ব্যবহারকারীর ইন্টার‍্যাকশন ম্যানেজ করা

Glance, Action ক্লাস ব্যবহার করে ব্যবহারকারীর ইন্টার‍্যাকশন ম্যানেজ করার কাজ সহজ করে। Glance-এর 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>()
    )
}

কাস্টম অ্যাকশন পারফর্ম করা

নির্দিষ্ট টার্গেট লঞ্চ করার পরিবর্তে, Glance কোনও অ্যাকশন পারফর্ম করার জন্য ল্যাম্বডা অ্যাকশন বা actionRunCallback ব্যবহার করতে পারে, যেমন ব্যবহারকারীর ইন্টার‍্যাকশনের ভিত্তিতে UI বা স্টেট আপডেট করা।

ল্যাম্বডা অ্যাকশন রান করুন

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

যেমন, GlanceModifier.clickable মডিফায়ারে ল্যাম্বডা ফাংশন পাস করুন

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
        // ...
    }
}