GlanceAppWidget ম্যানেজ ও আপডেট করা

GlanceAppWidget কীভাবে আপডেট করতে হয় এবং এর স্ট্যাটাস ম্যানেজ করতে হয় তা নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে।

GlanceAppWidget-এর স্টেট ম্যানেজ করা

উইজেট তৈরি করা হলে বা আপডেট করার প্রয়োজন হলে, প্রদত্ত GlanceAppWidget ক্লাস ইনস্ট্যানশিয়েট করা হয়, তাই এটি স্টেটলেস ও প্যাসিভ হওয়া উচিত।

'স্টেট' ধারণাটিকে নিম্নলিখিত ভাগে ভাগ করা যায়:

  • অ্যাপ্লিকেশনের অবস্থা: উইজেটের প্রয়োজনীয় অ্যাপের অবস্থা বা কন্টেন্ট। যেমন, ব্যবহারকারীর সংজ্ঞা অনুযায়ী সেভ করা গন্তব্যের তালিকা (অর্থাৎ, ডেটাবেস)।
  • এক ঝলকে দেখা স্টেট: নির্দিষ্ট স্টেট যা শুধুমাত্র অ্যাপ উইজেটের সাথে প্রাসঙ্গিক এবং অ্যাপের স্টেটকে পরিবর্তন বা প্রভাবিত করে না। যেমন, উইজেটে চেকবক্স বেছে নেওয়া হয়েছে বা কাউন্টার বাড়ানো হয়েছে।

অ্যাপ্লিকেশনের স্ট্যাটাস ব্যবহার করা

অ্যাপ উইজেট প্যাসিভ হতে হবে। প্রতিটি অ্যাপ্লিকেশন ডেটা লেয়ার ম্যানেজ করা এবং উইজেট UI-তে প্রতিফলিত হওয়া আইডল, লোডিং ও সমস্যার মতো স্টেট হ্যান্ডেল করার জন্য দায়ী।

যেমন, নিম্নলিখিত কোডটি রিপোজিটরি লেয়ার থেকে ইন-মেমরি ক্যাশে থেকে গন্তব্যগুলি রিট্রিভ করে, গন্তব্যের সেভ করা তালিকা প্রদান করে এবং এর অবস্থার উপর নির্ভর করে একটি আলাদা UI দেখায়:

class DestinationAppWidget : GlanceAppWidget() {

    // ...

    @Composable
    fun MyContent() {
        val repository = remember { DestinationsRepository.getInstance() }
        // Retrieve the cache data everytime the content is refreshed
        val destinations by repository.destinations.collectAsState(State.Loading)

        when (destinations) {
            is State.Loading -> {
                // show loading content
            }

            is State.Error -> {
                // show widget error content
            }

            is State.Completed -> {
                // show the list of destinations
            }
        }
    }
}

স্টেট বা ডেটা পরিবর্তন হলে, অ্যাপের দায়িত্ব হল বিজ্ঞপ্তি পাঠানো এবং উইজেট আপডেট করা। আরও তথ্যের জন্য Update GlanceAppWidget দেখুন।

GlanceAppWidget আপডেট করুন

GlanceAppWidget ব্যবহার করে আপনার উইজেট কন্টেন্ট আপডেট করার অনুরোধ করতে পারবেন। ম্যানেজ GlanceAppWidget স্টেট বিভাগে ব্যাখ্যা করা হয়েছে, অ্যাপ উইজেট অন্য প্রসেসে হোস্ট করা হয়। Glance কন্টেন্টকে বাস্তব RemoteViews ভাষায় অনুবাদ করে হোস্টকে পাঠায়। কন্টেন্ট আপডেট করতে, Glance-কে RemoteViews আবার তৈরি করে পাঠাতে হবে।

আপডেট পাঠাতে, GlanceAppWidget ইনস্ট্যান্সের update মেথড কল করুন, context ও glanceId প্রদান করে:

MyAppWidget().update(context, glanceId)

glanceId পেতে, GlanceAppWidgetManager-এ কোয়েরি করুন:

val manager = GlanceAppWidgetManager(context)
val widget = GlanceSizeModeWidget()
val glanceIds = manager.getGlanceIds(widget.javaClass)
glanceIds.forEach { glanceId ->
    widget.update(context, glanceId)
}

অথবা, GlanceAppWidget update এক্সটেনশনগুলির মধ্যে একটি ব্যবহার করুন:

// Updates all placed instances of MyAppWidget
MyAppWidget().updateAll(context)

// Iterate over all placed instances of MyAppWidget and update if the state of
// the instance matches the given predicate
MyAppWidget().updateIf<State>(context) { state ->
    state == State.Completed
}

এইসব পদ্ধতি আপনার অ্যাপ্লিকেশনের যেকোনও অংশ থেকে কল করা যেতে পারে। যেহেতু এগুলি suspend ফাংশন, তাই আমরা এগুলিকে মূল থ্রেড স্কোপের বাইরে লঞ্চ করার সাজেশন দিই। নিচের উদাহরণে, সেগুলি CoroutineWorker-এ লঞ্চ করা হয়েছে:

class DataSyncWorker(
    val context: Context,
    val params: WorkerParameters,
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        // Fetch data or do some work and then update all instance of your widget
        MyAppWidget().updateAll(context)
        return Result.success()
    }
}

কোরুটিন সম্পর্কে আরও তথ্যের জন্য Android-এ Kotlin Coroutines দেখুন।

কখন উইজেট আপডেট করতে হবে

অবিলম্বে বা নির্দিষ্ট সময় অন্তর উইজেট আপডেট করুন।

আপনার অ্যাপ চালু থাকলে, উইজেট সঙ্গে সঙ্গে আপডেট হতে পারে। যেমন:

  • ব্যবহারকারী কোনও উইজেটের সাথে ইন্টার‍্যাক্ট করলে, কোনও অ্যাকশন, ল্যাম্বডা কল বা অ্যাক্টিভিটি লঞ্চ করার ইনটেন্ট ট্রিগার হয়।
  • আপনার ব্যবহারকারী যখন আপনার অ্যাপের সাথে ফোরগ্রাউন্ডে ইন্টার‍্যাক্ট করেন অথবা Firebase Cloud Messaging (FCM) মেসেজ বা ব্রডকাস্টের উত্তরে অ্যাপটি আগে থেকেই আপডেট হচ্ছে।

এইসব ক্ষেত্রে, এই নির্দেশিকায় বর্ণিত update পদ্ধতি কল করুন।

আপনার অ্যাপ চালু না থাকলেও, আপনার উইজেট নির্দিষ্ট সময় অন্তর আপডেট হতে পারে। যেমন:

  • প্রতি ৩০ মিনিট অন্তর একবার পর্যন্ত উইজেট আপডেট করতে updatePeriodMillis ব্যবহার করুন।
  • প্রতি ১৫ মিনিট অন্তর আরও ঘন ঘন আপডেট শিডিউল করতে WorkManager ব্যবহার করুন।
  • ব্রডকাস্টের উত্তরে উইজেট আপডেট করা।

রিসোর্স