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

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

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

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

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

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

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

  • লক্ষ্য কার্যকলাপ শ্রেণী
  • ComponentName
  • একটি উদ্দেশ্য

Glance, Action-টিকে প্রদত্ত টার্গেট এবং প্যারামিটারসহ একটি 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 এ নিম্নলিখিতগুলির মধ্যে একটি প্রদান করুন:

  • স্ট্রিং অ্যাকশন
  • উপাদানের ComponentName
  • একটি অভিপ্রায়
  • BroadcastReceiver ক্লাস

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

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

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

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

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

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

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

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

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

রান অ্যাকশনকলব্যাক

বিকল্পভাবে, ব্যবহারকারীর ইন্টারঅ্যাকশনের ফলে কোনো অ্যাকশন সম্পাদন করতে 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
        // ...
    }
}