टाइलों से विजेट पर माइग्रेट करना

टाइल और विजेट, दोनों ही रिमोट सिस्टम की स्क्रीन पर आपका कॉन्टेंट दिखाते हैं. हालांकि, इन्हें बनाने के लिए अलग-अलग तरीकों का इस्तेमाल करना पड़ता है. अपनी मौजूदा टाइल को विजेट में माइग्रेट करने का मतलब है कि लेआउट जनरेट करने के लिए, डाइनैमिक और डिक्लेरेटिव यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करना. इससे नई सुविधाओं को अनलॉक किया जा सकता है और डेवलपमेंट मॉडल को आसान बनाया जा सकता है.

लागू करने की रणनीति चुनना

अगर आपको किसी ऐसे ऐप्लिकेशन को माइग्रेट करना है जो लेगसी टाइल को बनाए रखता है, तो आपको यह तय करना होगा कि आपका ऐप्लिकेशन सिस्टम को कॉन्टेंट कैसे उपलब्ध कराता है. नए विजेट को एक ही विजेट सेवा का इस्तेमाल करना चाहिए. हालांकि, जिन ऐप्लिकेशन में पहले से टाइलें मौजूद हैं उन्हें दोनों सेवाओं को बनाए रखने या एक ही विजेट सेवा का इस्तेमाल करने का विकल्प चुनना होगा.

सुझाया गया: दोहरी सेवा (टाइल + विजेट)

हमारा सुझाव है कि जिन ऐप्लिकेशन में पहले से टाइल मौजूद है वे टाइल और विजेट, दोनों को बनाए रखें. दो अलग-अलग सेवाएं देने से, अलग-अलग डिवाइसों पर उपयोगकर्ताओं को सबसे अच्छा अनुभव मिलता है.

  • टाइल सेवा: TileService को बढ़ाएं और androidx.wear.tiles.action.BIND_TILE_PROVIDER के लिए इंटेंट फ़िल्टर का एलान करें.
  • विजेट सेवा: GlanceWearWidgetService को बढ़ाएं और androidx.glance.wear.action.BIND_WIDGET_PROVIDER के लिए इंटेंट फ़िल्टर का एलान करें.
  • लॉजिकल ग्रुपिंग: विजेट कॉन्फ़िगरेशन में group एट्रिब्यूट का इस्तेमाल करें. इससे, नए तरीके से लागू किए गए विजेट को मौजूदा TileService से लिंक किया जा सकता है. इससे सिस्टम, उन्हें एक लॉजिकल कॉम्पोनेंट के तौर पर पहचान पाता है. साथ ही, Wear OS 7 या इसके बाद के वर्शन पर, उपयोगकर्ता के मौजूदा कैरसेल स्लॉट को नए विजेट पर अपने-आप माइग्रेट कर देता है.

ड्यूअल-सर्विस सेटअप के लिए सिस्टम का व्यवहार:

ओएस / डिवाइस की क्षमता नतीजे के तौर पर मिलने वाला अनुभव
Wear OS 3 टाइल का इस्तेमाल किया गया
Wear OS 4, 5, 6 टाइल का इस्तेमाल किया गया
Wear OS 7 (इसमें स्क्रीन की पूरी ऊंचाई का इस्तेमाल नहीं किया जा सकता. जैसे, Pixel Watch) टाइल का इस्तेमाल किया गया
Wear OS 7 (आंशिक ऊंचाई के साथ काम करता है, जैसे कि Galaxy Watch) विजेट का इस्तेमाल किया जाता है

दूसरा तरीका: एक ही सेवा (सिर्फ़ विजेट के लिए)

एक ही सेवा, दोनों प्रोटोकॉल को मैनेज करती है. इस तरीके को लागू करने में कम समय लगता है. हालांकि, यह कंपैटबिलिटी मोड पर निर्भर करता है. कंपैटबिलिटी मोड, Wear OS के पुराने वर्शन पर चलने वाले डिवाइसों पर आपके विजेट को टाइल में "बदलने" का काम करता है.

यह तरीका चुनने पर:

  1. दोनों इंटेंट फ़िल्टर तय करें: आपकी सेवा में androidx.wear.tiles.action.BIND_TILE_PROVIDER और androidx.glance.wear.action.BIND_WIDGET_PROVIDER, दोनों के लिए इंटेंट फ़िल्टर शामिल होने चाहिए. इससे यह पक्का होता है कि आपका विजेट, Wear 4, 5, 6, और 7 में टाइल की तरह दिखने वाले प्लैटफ़ॉर्म पर दिखे.
  2. अपनी मौजूदा सेवा का नाम बनाए रखें, ताकि अपग्रेड आसानी से हो सकें: अगर आपको किसी चालू टाइल को बदलना है, तो सेवा के क्लास का नाम वही रखें. इससे यह पक्का किया जा सकेगा कि जिन लोगों ने आपकी टाइल को अपने कैरसेल में जोड़ा है उन्हें वह अपने-आप नए विजेट में अपडेट होती हुई दिखे. Wear OS 7, अलग-अलग कॉम्पोनेंट को लॉजिकली लिंक करने के लिए, विजेट कॉन्फ़िगरेशन एक्सएमएल में group एट्रिब्यूट का इस्तेमाल करता है. वहीं, Wear OS के 7 से पहले के वर्शन, उन्हें "एक ही" कॉम्पोनेंट के तौर पर पहचानने के लिए, सेवा के नाम पर निर्भर करते हैं. अगर आपको सेवा का नया नाम इस्तेमाल करना है, तो आपका ऐप्लिकेशन अब भी ठीक से काम करेगा. हालांकि, Wear OS 6 या इससे पुराने वर्शन वाले डिवाइसों का इस्तेमाल करने वाले लोगों को, अपने कैरसेल में विजेट को मैन्युअल तरीके से फिर से जोड़ना होगा.

एक सेवा के सेटअप के लिए सिस्टम का व्यवहार:

ओएस / डिवाइस की क्षमता नतीजे के तौर पर मिलने वाला अनुभव
Wear OS 3 काम नहीं करता है
Wear OS 4, 5, 6 विजेट को फ़ुल स्क्रीन टाइल के तौर पर दिखाया जाता है
Wear OS 7 (इसमें आंशिक ऊंचाई वाले डिसप्ले काम नहीं करते) विजेट को टाइलों में बदल दिया जाता है
Wear OS 7 (आंशिक ऊंचाई के साथ काम करता है) विजेट का इस्तेमाल किया जाता है

*इसके लिए, रेंडरर 1.6 या इसके बाद का वर्शन ज़रूरी है.

यूज़र इंटरफ़ेस (यूआई) के अनुवाद से जुड़ी सलाह

ProtoLayout (टाइल) से Remote Compose (विजेट) में यूज़र इंटरफ़ेस (यूआई) को ट्रांसलेट करते समय, मेंटल मॉडल, लेआउट बनाने वाले ज़रूरी टूल से बदलकर, स्टेट-ड्रिवन, Compose-आधारित आर्किटेक्चर में बदल जाता है. इसमें यूज़र इंटरफ़ेस (यूआई) के अपडेट, रीकंपोज़िशन के ज़रिए मैनेज किए जाते हैं. इन सिद्धांतों को ध्यान में रखें:

  • डिक्लेरेटिव यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करें: ज़रूरी शर्तों के साथ ProtoLayout बिल्डर (LayoutElementBuilders) को डिक्लेरेटिव Remote Compose के बराबर वाले बिल्डर से बदलें. जैसे, RemoteText, RemoteColumn, और RemoteBox.
  • मुख्य कॉन्टेंट (mainSlot) पर फ़ोकस करें: कम ऊंचाई वाले विजेट (जैसे, SMALL और LARGE कंटेनर टाइप) से, एक नज़र में जानकारी मिलती है. पूरी स्क्रीन पर दिखने वाले टाइल लेआउट को एक-से-एक पोर्ट करने के बजाय, अपने डिज़ाइन को आसान बनाएं. इससे मुख्य कॉन्टेंट एरिया में मुख्य जानकारी को हाइलाइट किया जा सकेगा.
  • किनारे पर मौजूद कार्रवाइयों को फिर से डिज़ाइन किया गया: टाइल के आर्किटेक्चर में, स्क्रीन के साथ जुड़े कॉम्पोनेंट, जैसे कि EdgeButton को किसी खास bottomSlot से जोड़ा गया था. पूरी ऊंचाई वाले विजेट, सीधे तौर पर वर्टिकल स्क्रोलिंग वाली जगह में इंटिग्रेट होते हैं. इसलिए, अब फ़िक्स्ड bottomSlot पैराडाइम मौजूद नहीं है. किनारे पर अलाइन किए गए बटन, अक्सर मुख्य कार्रवाइयों के तौर पर काम करते हैं. इसलिए, माइग्रेट करने के लिए, कॉम्पोनेंट को सीधे तौर पर बदलने के बजाय, यूज़र इंटरफ़ेस (यूआई) को फिर से डिज़ाइन करना ज़रूरी है. अपने प्राइमरी ऐक्शन के लिए, यूज़र एक्सपीरियंस (यूएक्स) से जुड़ी अन्य रणनीतियों का आकलन करें:
    • इनलाइन कार्रवाइयां: सीधे तौर पर अपने mainSlot लेआउट में, इनलाइन RemoteButton को इंटिग्रेट करें.
    • कंटेनर टैप: PendingIntentAction का इस्तेमाल करके, पूरे विजेट कंटेनर को टैप किया जा सकने वाला बनाएं. इससे इंटरैक्शन को एक साथ किया जा सकता है.
    • कॉन्टेंट पिवट: विजेट के फ़ोकस का फिर से आकलन करें. कार्रवाई के लिए अलग से स्लॉट न होने पर, एक नज़र में दिखने वाला ज़्यादा जानकारी वाला डेटा दिखाएं. साथ ही, विजेट पर कुछ कार्रवाइयों को अलग-अलग करने के बजाय, पूरे ऐप्लिकेशन को खोलने के लिए एक बार टैप करने की सुविधा दें.
  • इवेंट हैंडलिंग (कार्रवाइयां बनाम लैम्डा) माइग्रेट करें: टाइलें, इंटरैक्शन (जैसे कि LoadAction) पर निर्भर करती हैं. ये इंटरैक्शन, यूज़र इंटरफ़ेस को रीफ़्रेश करने के लिए, पूरी सेवा के कॉलबैक को ट्रिगर करते हैं. Wear विजेट, क्लाइंट-साइड पर काम करते हैं. स्टैंडर्ड कंपोज़ लैम्डा को रिमोटली नहीं चलाया जा सकता. इसके बजाय, सीरियलाइज़ किए जा सकने वाले डिक्लेरेटिव ऐक्शन (जैसे, ValueChange या PendingIntentAction) उपलब्ध कराएं. ऐप्लिकेशन राउंड-ट्रिप के बिना यूज़र इंटरफ़ेस (यूआई) को तुरंत अपडेट करने के लिए, इन्हें डिक्लेरेटिव स्टेट (जैसे, rememberMutableRemoteInt) के साथ मिलाएं.
  • डाइमेंशन और टाइप में बदलाव करना: लेआउट डाइमेंशन माइग्रेट करते समय, स्टैंडर्ड Dp के बजाय RemoteDp (जैसे, 10.rdp) का इस्तेमाल करके, लेआउट रिज़ॉल्यूशन को बाद के लिए सेट करना बेहतर होता है. इससे यह पक्का होता है कि सिस्टम रेंडरर, डिसप्ले के समय पिक्सल की वैल्यू का सही हिसाब लगाता है. इसी तरह, स्टैंडर्ड Kotlin और Remote Compose टाइप को आसानी से बदलने के लिए, Remote Compose एक्सटेंशन फ़ंक्शन (.rc के लिए Color, .rs के लिए String, .rdp के लिए Dp) का इस्तेमाल करें.
  • सैंपल कोड देखें: लेआउट बनाने, सिमैंटिक टाइपोग्राफ़ी लागू करने, और Remote Compose में स्टेट मैनेज करने के तरीके के बारे में ज़्यादा जानकारी पाने के लिए, Wear OS के सैंपल रिपॉज़िटरी में उपलब्ध आधिकारिक सैंपल कोड देखें.