ध्यान भटकाने वाली गतिविधियों को कम करने वाला टूल (डीओ), एक टूल के तौर पर उपलब्ध कराया गया है. इससे, गाड़ी के चलने के दौरान ड्राइवर को सेटिंग ऐप्लिकेशन के साथ इंटरैक्ट करने की ज़रूरत नहीं पड़ती. गाड़ी चलाते समय कुछ सेटिंग में बदलाव करना पड़ सकता है. इसलिए, ऐप्लिकेशन को पूरी तरह से ब्लॉक नहीं किया जाता. हालांकि, डिफ़ॉल्ट रूप से ज़्यादातर प्राथमिकताएं बंद रहती हैं. सिर्फ़ मुख्य और आसानी से अपडेट की जा सकने वाली प्राथमिकताएं चालू रहती हैं.
पहली इमेज. गाड़ी चलाते समय इस्तेमाल किए जा सकने वाले ऐप्लिकेशन
अगर गतिविधियों को ध्यान भटकाने वाली गतिविधियों के लिए ऑप्टिमाइज़ नहीं किया गया है, तो उन्हें पूरी तरह से ब्लॉक भी किया जा सकता है. जैसा कि यहां दिखाया गया है. फ़िलहाल, इस तरीके का इस्तेमाल मुख्य रूप से सेटिंग खोजने के लिए किया जाता है.
दूसरी इमेज. सभी गतिविधियां ब्लॉक की गईं
कॉन्फ़िगरेशन ओवरले की मदद से, डीओ की परफ़ॉर्मेंस में बुनियादी बदलाव किए जा सकते हैं. अगर आपको ज़्यादा बारीकी से कस्टमाइज़ेशन की ज़रूरत है, तो कोड के ज़रिए ज़्यादा बदलाव किए जा सकते हैं.
ज़्यादा कस्टमाइज़ेशन
अगर गाड़ी चलाते समय कोई प्राथमिकता बंद है, तो उस पर टैप करने पर एक टॉस्ट मैसेज दिखता है. इसमें बताया जाता है कि गाड़ी चलाते समय यह प्राथमिकता उपलब्ध नहीं है. हालांकि, ऐसा तब ही होता है, जब प्राथमिकता के साथ कोई कंट्रोलर जुड़ा हो. मैसेज में restricted_while_driving
स्ट्रिंग का इस्तेमाल किया गया है. इसे ओवरले की मदद से पसंद के मुताबिक बनाया जा सकता है. हालांकि, इसके लिए ज़रूरी है कि स्ट्रिंग में 60 से कम वर्ण हों.
तीसरा चित्र. पसंद के मुताबिक बनाया गया ओवरले
config_always_ignore_ux_restrictions
का इस्तेमाल करके, डीओ फ़्रेमवर्क को पूरी तरह से बंद किया जा सकता है.
इस विकल्प को 'सही' पर सेट करने का मतलब है कि ड्राइवर, सेटिंग ऐप्लिकेशन के हर हिस्से के साथ इंटरैक्ट कर सकता है.
<bool name="config_always_ignore_ux_restrictions">true</bool>
अगर ऊपर दिया गया कॉन्फ़िगरेशन 'गलत' पर सेट है, तो सेटिंग ऐप्लिकेशन
config_ignore_ux_restrictions
पर वापस जाता है. इससे यह तय किया जाता है कि ड्राइविंग के दौरान कौनसी सेटिंग चालू होनी चाहिए. यहां दी गई स्ट्रिंग, preference_keys.xml.
में बताई गई स्ट्रिंग से मेल खानी चाहिए
उदाहरण
ड्राइविंग के दौरान, नेस्ट की गई सेटिंग को चालू करने का तरीका दिखाने के लिए, इस उदाहरण में लिखाई को बोली में बदलने (टीटीएस) की आउटपुट सेटिंग को चालू करने का तरीका बताया गया है. इसके काम करने के लिए, config_ignore_ux_restrictions
में हैरारकी की सभी सेटिंग जोड़ें.
इसमें सिस्टम, भाषाएं और इनपुट के साथ-साथ, टेक्स्ट-टू-स्पीच (टीटीएस) की सेटिंग शामिल होती हैं. ऐसा इसलिए है, क्योंकि हमारी हैरारकी इस तरह है: सिस्टम->भाषाएं और इनपुट->टेक्स्ट-टू-स्पीच आउटपुट. हालांकि, लिखाई को बोली में बदलने वाले फ़्रैगमेंट में मौजूद सेटिंग अब भी बंद हैं. उन्हें चालू करने के लिए, हमें उन प्राथमिकताओं के लिए बटन जोड़ने होंगे जिन्हें ऐक्सेस करना है. इस उदाहरण में, हमें वीडियो चलाने की प्राथमिकताएं चालू करनी हैं, लेकिन इंजन की प्राथमिकताएं नहीं. इसलिए, हम अपने कॉन्फ़िगरेशन में pk_tts_playback_group
जोड़ते हैं.
<string-array name="config_ignore_ux_restrictions"> [...] <item>@string/pk_system_settings_entry</item> <item>@string/pk_languages_and_input_settings</item> <item>@string/pk_tts_settings_entry</item> <item>@string/pk_tts_playback_group</item> </string-array>
ज़्यादा कस्टमाइज़ेशन
कुछ प्राथमिकताओं के लिए, ड्राइविंग की स्थिति के आधार पर किसी प्राथमिकता को चालू/बंद करने के बजाय, ज़्यादा पसंद के मुताबिक व्यवहार की ज़रूरत हो सकती है. उदाहरण के लिए, ड्राइविंग के दौरान सेव किए गए ब्लूटूथ डिवाइसों या वाई-फ़ाई ऐक्सेस पॉइंट दिखाने के लिए, ब्लूटूथ और वाई-फ़ाई में पहले से ही बदलाव किए जा चुके हैं.
फ़िलहाल, इस तरह के बदलाव करने के लिए, कॉन्फ़िगरेशन पर आधारित कोई समाधान उपलब्ध नहीं है. इसके बजाय, अपनी पसंद के मुताबिक एक कस्टम क्लास बनाई जा सकती है, जो PreferenceController को एक्सटेंड करती है और onApplyUxRestrictions()
को बदलकर, अपनी पसंद के मुताबिक बदलाव करती है.
कस्टम प्राथमिकता कंट्रोलर बनाने के बाद, डिफ़ॉल्ट प्राथमिकता कंट्रोलर को अपने लागू किए गए कंट्रोलर से बदलने के लिए, काम की एक्सएमएल फ़ाइल को ओवरले किया जा सकता है.
उदाहरण
CarSettings में, कुछ प्राथमिकताओं में इस तरह के ज़्यादा पसंद के मुताबिक व्यवहार होते हैं. इनका इस्तेमाल, ज़्यादा पसंद के मुताबिक बनाने के उदाहरणों के तौर पर किया जा सकता है. उदाहरण के लिए, वाई-फ़ाई ऐक्सेस पॉइंट की सूची में, ड्राइविंग के दौरान सिर्फ़ सेव किए गए ऐक्सेस पॉइंट दिखाए जाएं और बाकी को छिपाया जाए. ऐसा करने के लिए, यह तरीका अपनाएं:
} else if (shouldApplyUxRestrictions(getUxRestrictions())) { wifiEntries = getCarWifiManager().getSavedWifiEntries(); } else { wifiEntries = getCarWifiManager().getAllWifiEntries(); }
यहां दिखने वाले ऐक्सेस पॉइंट पर पहले से ही पाबंदी लगी है. इसलिए, आपको इन प्राथमिकताओं पर कोई और UxRestrictions
लागू नहीं करना है.
इसलिए, onApplyUxRestrictions
को बदलें और जान-बूझकर कोई कार्रवाई न करें:
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { // Since the list dynamically changes based on the UX restrictions, we // enable this fragment regardless of the restriction. Intentional no-op. }
ब्लूटूथ से कनेक्ट किए गए डिवाइसों में एक और उदाहरण दिया गया है.
ब्लूटूथ डिवाइसों को कनेक्ट और डिसकनेक्ट करने की सुविधा चालू रखना है, लेकिन इन डिवाइसों की अन्य सेटिंग ऐक्सेस करने की सुविधा बंद करनी है. ऐसा करने के लिए, हम onApplyUxRestrictions
को फिर से बदल देते हैं. हालांकि, इस बार अगर NO_SETUP
पाबंदी चालू है, तो प्राथमिकता पर सेकंडरी ऐक्शन छिपाएं.
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }