Glance-এর মাধ্যমে সমস্যার সমাধান করা

Glance-এ সমস্যা ম্যানেজ করার সুবিধা উন্নত করার জন্য API ফিচার Android 15-এ অন্তর্ভুক্ত করা হয়েছে। এই পৃষ্ঠায় এইসব API সংক্রান্ত পেশাদার পদ্ধতি সম্পর্কে তথ্য দেওয়া আছে।

কম্পোজ করা যায় না এমন কম্পোনেন্টের চারপাশে try-catch ব্লক ব্যবহার করুন

Compose কম্পোজেবলের চারপাশে ট্রাই-ক্যাচ ব্লক করার অনুমতি দেয় না, তবে আপনাকে এই ব্লকগুলিতে আপনার অ্যাপের অন্যান্য লজিক র‍্যাপ করতে দেয়। এটি আপনাকে আপনার ত্রুটি ভিউয়ের জন্য Compose ব্যবহার করতে দেয়, যেমন নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

provideContent {
    var isError = false
    var data = listOf<String>()
    try {
        val repository = (context.applicationContext as MyApplication).myRepository
        data = repository.loadData()
    } catch (e: Exception) {
        isError = true
        // TODO: handle error
    }

    if (isError) {
        ErrorView()
    } else {
        Content(data)
    }
}

ডিফল্ট সমস্যার লেআউট

কোনও আনক্যাচড এক্সেপশন বা Compose সংক্রান্ত সমস্যা হলে, Glance একটি ডিফল্ট সমস্যার লেআউট দেখায়:

একটি ত্রুটি মেসেজ যা ত্রুটির ধরন এবং এটি কোথায় খুঁজতে হবে তার জন্য একটি সাজেশন
  দেখায়
ছবি ১. Glance 1.0 ডিফল্ট সমস্যা লেআউট
'কন্টেন্ট দেখানো যাচ্ছে না' টেক্সট সহ একটি বক্স
ছবি ২. Glance 1.1.0 ডিফল্ট সমস্যা লেআউট

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

class UpgradeWidget : GlanceAppWidget(errorUiLayout = R.layout.error_layout) {
    // ...
}
এই লেআউটটি একটি স্ট্যাটিক লেআউট যার সাথে আপনার ব্যবহারকারী ইন্টার‍্যাক্ট করতে পারবেন না, তবে এটি জরুরি পরিস্থিতিতে উপযোগী।

এতে একটি শিরোনাম এবং একটি টেক্সট ফিল্ড থাকে যা ত্রুটি মেসেজ দেখায়
ছবি ৩. কাস্টম সমস্যার লেআউটের উদাহরণ

ডিফল্ট সমস্যা UI-তে অ্যাকশন যোগ করুন

Glance 1.1.0 থেকে, Glance আপনাকে ডিফল্ট সমস্যা ম্যানেজ করার কোড ওভাররাইড করতে দেয়। এইভাবে, আপনি কম্পোজিশনে আনক্যাচড এক্সেপশন বা ত্রুটির ক্ষেত্রে অ্যাকশন কলব্যাক যোগ করতে পারেন।

এই ফিচার ব্যবহার করতে, onCompositionError() ফাংশন ওভাররাইড করুন:

GlanceAppWidget.onCompositionError(
    context: Context,
    glanceId: GlanceId,
    appWidgetId: Int,
    throwable: Throwable
)

এই ফাংশনে, সমস্যা সমাধানের জন্য Glance RemoteViews API-তে ফিরে যায়। এটি আপনাকে XML ব্যবহার করে লেআউট এবং অ্যাকশন হ্যান্ডলার নির্দিষ্ট করতে দেয়।

নিম্নলিখিত উদাহরণ থেকে আপনি ধাপে ধাপে জানতে পারবেন যে কীভাবে একটি ত্রুটি UI তৈরি করতে হয় যাতে মতামত পাঠানোর জন্য একটি বোতাম অন্তর্ভুক্ত থাকে:

  1. error_layout.xml ফাইলটি লিখুন:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       style="@style/Widget.MyApplication.AppWidget.Error"
       android:id="@android:id/background"
       android:layout_width="match_parent"
       android:textSize="24sp"
       android:layout_height="match_parent"
       android:orientation="vertical">
    
       <TextView
           android:id="@+id/error_title_view"
           android:layout_width="match_parent"
           android:textColor="@color/white"
           android:textFontWeight="800"
           android:layout_height="wrap_content"
           android:text="Example Widget Error" />
    
       <LinearLayout
           android:layout_width="match_parent"
           android:orientation="horizontal"
           android:paddingTop="4dp"
           android:layout_height="match_parent">
    
           <ImageButton
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:layout_gravity="center"
            android:tint="@color/white"
            android:id="@+id/error_icon"
            android:src="@drawable/heart_broken_fill0_wght400_grad0_opsz24"
           />
           <TextView
               android:id="@+id/error_text_view"
               android:layout_width="wrap_content"
               android:textColor="@color/white"
               android:layout_height="wrap_content"
               android:layout_gravity="center"
               android:padding="8dp"
               android:textSize="16sp"
               android:layout_weight="1"
               android:text="Useful Error Message!" />
       </LinearLayout>
    
    </LinearLayout>
    

  2. onCompositionError ফাংশন ওভাররাইড করুন:

    override fun onCompositionError(
        context: Context, glanceId: GlanceId, appWidgetId: Int, throwable: Throwable
    ) {
        val rv = RemoteViews(context.packageName, R.layout.error_layout)
        rv.setTextViewText(
            R.id.error_text_view,
            "Error was thrown. \nThis is a custom view \nError Message: `${throwable.message}`"
        )
        rv.setOnClickPendingIntent(R.id.error_icon, getErrorIntent(context, throwable))
        AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, rv)
    }

  3. আপনার GlanceAppWidgetReceiver রেফারেন্স করে এমন একটি পেন্ডিং ইনটেন্ট তৈরি করুন:

    private fun getErrorIntent(context: Context, throwable: Throwable): PendingIntent {
        val intent = Intent(context, UpgradeToHelloWorldPro::class.java)
        intent.action = "widgetError"
        return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
    }

  4. আপনার GlanceAppWidgetReceiver-এ অভিপ্রায় ম্যানেজ করুন:

    override fun onReceive(context: Context, intent: Intent) {
        super.onReceive(context, intent)
        Log.e("ErrorOnClick", "Button was clicked.")
    }