ব্যবহারকারীর মিথস্ক্রিয়া পরিচালনা করুন

গ্ল্যান্স Action ক্লাসের মাধ্যমে ব্যবহারকারীর ইন্টারঅ্যাকশন পরিচালনাকে সহজ করে। গ্ল্যান্সের Action ক্লাসগুলি একজন ব্যবহারকারীর ক্রিয়াকলাপগুলিকে সংজ্ঞায়িত করে এবং আপনি ক্রিয়াটির প্রতিক্রিয়া হিসাবে সম্পাদিত অপারেশনটি নির্দিষ্ট করতে পারেন। আপনি GlanceModifier.clickable পদ্ধতির মাধ্যমে যেকোনো উপাদানে একটি Action প্রয়োগ করতে পারেন।

অ্যাপ উইজেটগুলি একটি দূরবর্তী প্রক্রিয়ায় বাস করে, তাই ক্রিয়াগুলি তৈরির সময় সংজ্ঞায়িত করা হয় এবং নির্বাহটি দূরবর্তী প্রক্রিয়ায় ঘটে। নেটিভ RemoteViews এ, এটি PendingIntents মাধ্যমে করা হয়।

এই পৃষ্ঠায় নিম্নলিখিত কর্মগুলি বর্ণনা করা হয়েছে:

একটি কার্যকলাপ চালু করুন

ব্যবহারকারীর মিথস্ক্রিয়ায় একটি কার্যকলাপ চালু করতে, GlanceModifier.clickable (..) সংশোধকের মাধ্যমে একটি Button বা অন্যান্য কম্পোজেবলে actionStartActivity ফাংশন প্রদান করুন।

actionStartActivity এ নিম্নলিখিতগুলির মধ্যে একটি প্রদান করুন:

  • লক্ষ্য কার্যকলাপ বর্গ
  • ComponentName
  • একটি অভিপ্রায়

Glance প্রদত্ত লক্ষ্য এবং পরামিতি সহ একটি PendingIntent এ অ্যাকশনকে অনুবাদ করে। নিম্নলিখিত উদাহরণে, একজন ব্যবহারকারী বোতামে ক্লিক করলে NavigationActivity চালু হয়:

@Composable
fun MyContent() {
    // ..
    Button(
        text = "Go Home",
        onClick = actionStartActivity<MyActivity>()
    )
}

একটি পরিষেবা চালু করুন

একটি ক্রিয়াকলাপ চালু করার অনুরূপ, actionStartService পদ্ধতিগুলির একটি ব্যবহার করে ব্যবহারকারীর মিথস্ক্রিয়ায় একটি পরিষেবা চালু করুন।

actionStartService এ নিম্নলিখিতগুলির মধ্যে একটি প্রদান করুন:

  • লক্ষ্য কার্যকলাপ বর্গ
  • ComponentName
  • একটি অভিপ্রায়

@Composable
fun MyButton() {
    // ..
    Button(
        text = "Sync",
        onClick = actionStartService<SyncService>(
            isForegroundService = true // define how the service is launched
        )
    )
}

একটি সম্প্রচার ঘটনা পাঠান

একটি actionSendBroadcast পদ্ধতি ব্যবহার করে ব্যবহারকারীর মিথস্ক্রিয়ায় একটি সম্প্রচার ইভেন্ট পাঠান:

actionSendBroadcast নিম্নলিখিতগুলির মধ্যে একটি প্রদান করুন:

@Composable
fun MyButton() {
    // ..
    Button(
        text = "Send",
        onClick = actionSendBroadcast<MyReceiver>()
    )
}

কাস্টম কর্ম সঞ্চালন

একটি নির্দিষ্ট লক্ষ্য চালু করার পরিবর্তে, গ্ল্যান্স একটি ক্রিয়া সম্পাদন করতে একটি ল্যাম্বডা অ্যাকশন বা actionRunCallback ব্যবহার করতে পারে, যেমন UI আপডেট করা বা ব্যবহারকারীর ইন্টারঅ্যাকশনের অবস্থা।

ল্যাম্বডা অ্যাকশন চালান

আপনি UI মিথস্ক্রিয়াতে কলব্যাক হিসাবে ল্যাম্বডা ফাংশন ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, ল্যাম্বডা ফাংশনটি GlanceModifier.clickable modifier-এ পাস করুন:

Text(
    text = "Submit",
    modifier = GlanceModifier.clickable {
        submitData()
    }
)

অথবা, এটিকে সমর্থন করে এমন কম্পোজেবলের onClick প্যারামিটারে পাস করুন:

Button(
    text = "Submit",
    onClick = {
        submitData()
    }
)

ActionCallback চালান

বিকল্পভাবে, ব্যবহারকারীর মিথস্ক্রিয়ায় একটি ক্রিয়া সম্পাদন করতে actionRunCallback পদ্ধতিগুলি ব্যবহার করুন। এটি করার জন্য, ActionCallback এর একটি কাস্টম বাস্তবায়ন প্রদান করুন:

@Composable
private fun MyContent() {
    // ..
    Image(
        provider = ImageProvider(R.drawable.ic_hourglass_animated),
        modifier = GlanceModifier.clickable(
            onClick = actionRunCallback<RefreshAction>()
        ),
        contentDescription = "Refresh"
    )
}

class RefreshAction : ActionCallback {
    override suspend fun onAction(
        context: Context,
        glanceId: GlanceId,
        parameters: ActionParameters
    ) {
        // TODO implement
    }
}

ব্যবহারকারীর ক্লিকে, প্রদত্ত ActionCallback এর suspend onAction পদ্ধতি বলা হয়, সংজ্ঞায়িত লজিক (অর্থাৎ, রিফ্রেশ ডেটার অনুরোধ করা)।

অ্যাকশন সঞ্চালিত হওয়ার পরে উইজেট আপডেট করতে, একটি নতুন উদাহরণ তৈরি করুন এবং কল update (..)। আরও বিশদ বিবরণের জন্য, GlanceAppWidget রাজ্য পরিচালনা বিভাগটি দেখুন।

class RefreshAction : ActionCallback {
    override suspend fun onAction(
        context: Context,
        glanceId: GlanceId,
        parameters: ActionParameters
    ) {
        // do some work but offset long-term tasks (e.g a Worker)
        MyAppWidget().update(context, glanceId)
    }
}

কর্মের পরামিতি প্রদান করুন

একটি ক্রিয়াকে অতিরিক্ত তথ্য প্রদান করতে, একটি টাইপ করা কী-মান জোড়া তৈরি করতে ActionParameters API ব্যবহার করুন। উদাহরণস্বরূপ, ক্লিক করা গন্তব্য সংজ্ঞায়িত করতে:

private val destinationKey = ActionParameters.Key<String>(
    NavigationActivity.KEY_DESTINATION
)

class MyAppWidget : GlanceAppWidget() {

    // ..

    @Composable
    private fun MyContent() {
        // ..
        Button(
            text = "Home",
            onClick = actionStartActivity<NavigationActivity>(
                actionParametersOf(destinationKey to "home")
            )
        )
        Button(
            text = "Work",
            onClick = actionStartActivity<NavigationActivity>(
                actionParametersOf(destinationKey to "work")
            )
        )
    }

    override suspend fun provideGlance(context: Context, id: GlanceId) {
        provideContent { MyContent() }
    }
}

নীচে, প্যারামিটারগুলি অ্যাক্টিভিটি চালু করার জন্য ব্যবহৃত উদ্দেশ্যের মধ্যে অন্তর্ভুক্ত করা হয়েছে, যার ফলে টার্গেট অ্যাক্টিভিটি এটি পুনরুদ্ধার করতে পারে।

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val destination = intent.extras?.getString(KEY_DESTINATION) ?: return
        // ...
    }
}

পরামিতিগুলি ActionCallback প্রদান করা হয়। মান পুনরুদ্ধার করতে সংজ্ঞায়িত Parameters.Key ব্যবহার করুন:

class RefreshAction : ActionCallback {

    private val destinationKey = ActionParameters.Key<String>(
        NavigationActivity.KEY_DESTINATION
    )

    override suspend fun onAction(
        context: Context,
        glanceId: GlanceId,
        parameters: ActionParameters
    ) {
        val destination: String = parameters[destinationKey] ?: return
        // ...
    }
}