Action ক্লাস ব্যবহার করে Glance ব্যবহারকারীর ইন্টার্যাকশন ম্যানেজ করার কাজকে সহজ করে তোলে। Glance-এর
Action ক্লাস ব্যবহারকারী কী কী অ্যাকশন নিতে পারবেন তা নির্ধারণ করে এবং আপনি অ্যাকশনের
প্রতিক্রিয়া হিসেবে সম্পাদিত অপারেশন নির্দিষ্ট করতে পারবেন। GlanceModifier.clickable পদ্ধতির মাধ্যমে আপনি যেকোনও
কম্পোনেন্টে Action প্রয়োগ করতে পারবেন।
অ্যাপ উইজেট রিমোট প্রসেসে লাইভ থাকে, তাই অ্যাকশনগুলি তৈরি করার
সময় নির্ধারণ করা হয় এবং রিমোট প্রসেসে এক্সিকিউট করা হয়। নেটিভ RemoteViews-এ,
এটি PendingIntents ব্যবহার করে করা হয়।
এই পৃষ্ঠায় নিম্নলিখিত অ্যাকশন সম্পর্কে বর্ণনা করা হয়েছে:
অ্যাক্টিভিটি লঞ্চ করা
ব্যবহারকারীর ইন্টার্যাকশনের উপর ভিত্তি করে কোনও অ্যাক্টিভিটি লঞ্চ করতে, Button বা অন্যান্য কম্পোজ করার উপযুক্ত আইটেমে
GlanceModifier.clickable মডিফায়ার ব্যবহার করে
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-এ নিম্নলিখিতগুলির মধ্যে একটি দিন:
- স্ট্রিং অ্যাকশন
ComponentName- ইনটেন্ট
BroadcastReceiverক্লাস
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
কাস্টম অ্যাকশন পারফর্ম করা
নির্দিষ্ট টার্গেট লঞ্চ করার পরিবর্তে, Glance, UI বা ব্যবহারকারীর ইন্টার্যাকশনের উপর ভিত্তি করে স্টেট আপডেট করার মতো অ্যাকশন পারফর্ম করতে, ল্যাম্বডা অ্যাকশন বা
actionRunCallback ব্যবহার করতে পারে।
lambda অ্যাকশন রান করা
UI ইন্টার্যাকশনের কলব্যাক হিসেবে আপনি ল্যাম্বডা ফাংশন ব্যবহার করতে পারবেন।
যেমন, GlanceModifier.clickable
মডিফায়ারে ল্যাম্বডা ফাংশন পাস করুন:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
অথবা, এটি সেইসব কম্পোজ করার উপযুক্ত আইটেমের onClick প্যারামিটারে পাস করুন যেগুলি এটি সাপোর্ট করে:
Button( text = "Submit", onClick = { submitData() } )
Run 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 } }
ব্যবহারকারী ক্লিক করলে, প্রদান করা suspend onAction পদ্ধতির
ActionCallback কল করা হয়, যার ফলে আগে থেকে নির্দিষ্ট করা লজিক (অর্থাৎ, ডেটা
রিফ্রেশ করার অনুরোধ) এক্সিকিউট হয়।
অ্যাকশন পারফর্ম করার পরে উইজেট আপডেট করতে, একটি নতুন ইনস্ট্যান্স তৈরি করুন এবং
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 // ... } }