অ্যাপ উইজেটগুলো কনফিগারযোগ্য হতে পারে। উদাহরণস্বরূপ, একটি ঘড়ির উইজেট ব্যবহারকারীদেরকে কোন টাইম জোন প্রদর্শন করা হবে তা নির্ধারণ করার সুযোগ দেয়।
আপনি যদি ব্যবহারকারীদের আপনার উইজেটের সেটিংস কনফিগার করার সুযোগ দিতে চান, তাহলে একটি উইজেট কনফিগারেশন Activity তৈরি করুন। আপনার নির্দিষ্ট করা কনফিগারেশন অপশনগুলোর উপর নির্ভর করে, এই অ্যাক্টিভিটিটি উইজেট তৈরি হওয়ার সময় অথবা পরে অ্যাপ উইজেট হোস্ট দ্বারা স্বয়ংক্রিয়ভাবে চালু হয়।
কনফিগারেশন কার্যকলাপ ঘোষণা করুন
অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলে কনফিগারেশন অ্যাক্টিভিটিটিকে একটি সাধারণ অ্যাক্টিভিটি হিসেবে ঘোষণা করুন। অ্যাপ উইজেট হোস্ট এটিকে ACTION_APPWIDGET_CONFIGURE অ্যাকশন দিয়ে চালু করে, তাই অ্যাক্টিভিটিটিকে এই ইন্টেন্টটি গ্রহণ করতে হবে। উদাহরণস্বরূপ:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
AppWidgetProviderInfo.xml ফাইলে android:configure অ্যাট্রিবিউট ব্যবহার করে অ্যাক্টিভিটিটি ডিক্লেয়ার করুন। এই ফাইলটি ডিক্লেয়ার করার বিষয়ে আরও তথ্য দেখুন। কনফিগারেশন অ্যাক্টিভিটি কীভাবে ডিক্লেয়ার করতে হয় তার একটি উদাহরণ নিচে দেওয়া হলো:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
অ্যাক্টিভিটিটি একটি সম্পূর্ণ যোগ্যতাসম্পন্ন নেমস্পেস দিয়ে ঘোষিত হয়, কারণ লঞ্চারটি আপনার প্যাকেজ স্কোপের বাইরে থেকে এটিকে রেফারেন্স করে।
একটি কনফিগারেশন কার্যক্রম শুরু করার জন্য এটুকুই যথেষ্ট। এরপর, আপনাকে প্রকৃত কার্যক্রমটি বাস্তবায়ন করতে হবে।
কনফিগারেশন কার্যকলাপ বাস্তবায়ন করুন
কার্যক্রমটি বাস্তবায়ন করার সময় দুটি গুরুত্বপূর্ণ বিষয় মনে রাখতে হবে:
- অ্যাপ উইজেট হোস্ট কনফিগারেশন অ্যাক্টিভিটিকে কল করে, এবং কনফিগারেশন অ্যাক্টিভিটিকে অবশ্যই সর্বদা একটি ফলাফল ফেরত দিতে হবে। যে ইন্টেন্টটি অ্যাক্টিভিটিটি চালু করেছে, সেই ইন্টেন্ট দ্বারা প্রেরিত অ্যাপ উইজেট আইডিটি অবশ্যই ফলাফলে অন্তর্ভুক্ত থাকতে হবে—যা ইন্টেন্ট এক্সট্রাসে
EXTRA_APPWIDGET_IDহিসেবে সংরক্ষিত থাকে। - যখন একটি কনফিগারেশন অ্যাক্টিভিটি চালু করা হয়, তখন সিস্টেম
ACTION_APPWIDGET_UPDATEব্রডকাস্টটি পাঠায় না, যার মানে হলো উইজেটটি তৈরি করার সময় এটিonUpdate()মেথডটিকে কল করে না। প্রথমবার উইজেটটি তৈরি করার সময়AppWidgetManagerকাছে আপডেটের অনুরোধ জানানোটা কনফিগারেশন অ্যাক্টিভিটির দায়িত্ব। তবে, পরবর্তী আপডেটগুলোর জন্যonUpdate()কল করা হয়—শুধুমাত্র প্রথমবার এটি এড়িয়ে যাওয়া হয়।
কনফিগারেশন থেকে কীভাবে ফলাফল রিটার্ন করতে হয় এবং উইজেট আপডেট করতে হয়, তার একটি উদাহরণের জন্য পরবর্তী বিভাগের কোড স্নিপেটগুলো দেখুন।
কনফিগারেশন অ্যাক্টিভিটি থেকে উইজেটটি আপডেট করুন।
যখন কোনো উইজেট একটি কনফিগারেশন অ্যাক্টিভিটি ব্যবহার করে, তখন কনফিগারেশন সম্পন্ন হলে উইজেটটি আপডেট করার দায়িত্ব সেই অ্যাক্টিভিটির। আপনি সরাসরি AppWidgetManager থেকে আপডেটের অনুরোধ করে এটি করতে পারেন।
উইজেটটি সঠিকভাবে আপডেট করতে এবং কনফিগারেশন অ্যাক্টিভিটিটি বন্ধ করতে যে পদ্ধতি অনুসরণ করতে হবে, তার একটি সারসংক্ষেপ নিচে দেওয়া হলো:
যে ইন্টেন্টটি অ্যাক্টিভিটিটি চালু করেছে, সেখান থেকে অ্যাপ উইজেট আইডিটি নিন:
কোটলিন
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_ID
জাভা
Intent intent = getIntent(); Bundle extras = intent.getExtras(); int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; if (extras != null) { appWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }
অ্যাক্টিভিটির ফলাফল
RESULT_CANCELEDএ সেট করুন।এইভাবে, যদি ব্যবহারকারী শেষ পর্যায়ে পৌঁছানোর আগেই কাজটি থেকে বেরিয়ে যান, তাহলে সিস্টেম অ্যাপ উইজেট হোস্টকে জানিয়ে দেয় যে কনফিগারেশনটি বাতিল করা হয়েছে এবং হোস্ট উইজেটটি যোগ করে না:
কোটলিন
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)
জাভা
int resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(Activity.RESULT_CANCELED, resultValue);
ব্যবহারকারীর পছন্দ অনুযায়ী উইজেটটি কনফিগার করুন।
কনফিগারেশন সম্পূর্ণ হলে,
getInstance(Context)কল করেAppWidgetManagerএর একটি ইনস্ট্যান্স নিন:কোটলিন
val appWidgetManager = AppWidgetManager.getInstance(context)
জাভা
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
updateAppWidget(int,RemoteViews)কল করে উইজেটটিকে একটিRemoteViewsলেআউট দিয়ে আপডেট করুন:কোটলিন
val views = RemoteViews(context.packageName, R.layout.example_appwidget) appWidgetManager.updateAppWidget(appWidgetId, views)
জাভা
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(appWidgetId, views);
রিটার্ন ইন্টেন্টটি তৈরি করুন, অ্যাক্টিভিটির ফলাফল দিয়ে এটি সেট করুন এবং অ্যাক্টিভিটিটি শেষ করুন:
কোটলিন
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
জাভা
Intent resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); finish();
একটি উদাহরণের জন্য গিটহাবে থাকা ListWidgetConfigureActivity.kt নমুনা ক্লাসটি দেখুন।
উইজেট কনফিগারেশন বিকল্পগুলি
ডিফল্টরূপে, অ্যাপ উইজেট হোস্ট ব্যবহারকারী তাদের হোম স্ক্রিনে উইজেটটি যুক্ত করার ঠিক পরেই, শুধুমাত্র একবার কনফিগারেশন অ্যাক্টিভিটি চালু করে। তবে, আপনি এমন অপশন নির্দিষ্ট করতে পারেন যা ব্যবহারকারীদের বিদ্যমান উইজেটগুলো পুনরায় কনফিগার করার সুযোগ দেয় অথবা একটি ডিফল্ট উইজেট কনফিগারেশন প্রদানের মাধ্যমে প্রাথমিক উইজেট কনফিগারেশন এড়িয়ে যেতে সাহায্য করে।
ব্যবহারকারীদের স্থাপন করা উইজেটগুলি পুনর্বিন্যাস করার সুযোগ দিন
ব্যবহারকারীদের বিদ্যমান উইজেটগুলি পুনর্বিন্যাস করার সুযোগ দিতে, appwidget-provider এর widgetFeatures অ্যাট্রিবিউটে reconfigurable ফ্ল্যাগটি উল্লেখ করুন। আরও তথ্যের জন্য AppWidgetProviderInfo.xml ফাইলটি ডিক্লেয়ার করার নির্দেশিকা দেখুন। উদাহরণস্বরূপ:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
ব্যবহারকারীরা উইজেটটি স্পর্শ করে ধরে রেখে এবং চিত্র ১-এ ১ হিসাবে চিহ্নিত ‘পুনর্বিন্যাস’ বোতামটিতে ট্যাপ করে তাদের উইজেটটি পুনর্বিন্যাস করতে পারেন।

উইজেটের ডিফল্ট কনফিগারেশন ব্যবহার করুন
ব্যবহারকারীদের প্রাথমিক কনফিগারেশন ধাপটি এড়িয়ে যাওয়ার সুযোগ দিয়ে আপনি উইজেটের একটি আরও নির্বিঘ্ন অভিজ্ঞতা প্রদান করতে পারেন। এটি করার জন্য, widgetFeatures ফিল্ডে configuration_optional এবং reconfigurable উভয় ফ্ল্যাগ উল্লেখ করুন। এর ফলে, ব্যবহারকারী উইজেটটি যোগ করার পর কনফিগারেশন অ্যাক্টিভিটি চালু হওয়া এড়ানো যায়। পূর্বে যেমন উল্লেখ করা হয়েছে, ব্যবহারকারী পরেও উইজেটটি পুনরায় কনফিগার করতে পারেন। উদাহরণস্বরূপ, একটি ঘড়ির উইজেট প্রাথমিক কনফিগারেশন এড়িয়ে ডিফল্টরূপে ডিভাইসের টাইম জোন দেখাতে পারে।
আপনার কনফিগারেশন অ্যাক্টিভিটিকে কীভাবে পুনঃকনফিগারযোগ্য এবং ঐচ্ছিক উভয় হিসাবে চিহ্নিত করবেন তার একটি উদাহরণ এখানে দেওয়া হলো:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>