कार की सेटिंग में डिस्ट्रैक्शन ऑप्टिमाइज़ेशन

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

गाड़ी चलाते समय इस्तेमाल किए जा सकने वाले ऐप्लिकेशन

पहली इमेज. गाड़ी चलाते समय इस्तेमाल किए जा सकने वाले ऐप्लिकेशन

अगर ध्यान भटकाने वाली चीज़ों को ऑप्टिमाइज़ न किया गया हो, तो पूरी गतिविधियों को भी ब्लॉक किया जा सकता है, जैसा कि नीचे दिखाया गया है. फ़िलहाल, इस तरीके का इस्तेमाल मुख्य रूप से सेटिंग खोजने के लिए किया जाता है.

सभी गतिविधियां ब्लॉक की गईं

दूसरी इमेज. सभी गतिविधियां ब्लॉक की गईं

'क्या करें' की परफ़ॉर्मेंस में बुनियादी बदलाव, कॉन्फ़िगरेशन ओवरले की मदद से किए जा सकते हैं. अगर आपको ज़्यादा बारीकी से कस्टमाइज़ेशन की ज़रूरत है, तो कोड के ज़रिए ज़्यादा बदलाव किए जा सकते हैं.

ज़्यादा कस्टमाइज़ेशन

अगर गाड़ी चलाते समय कोई प्राथमिकता बंद है, तो उस पर टैप करने पर एक टॉस्ट मैसेज दिखता है. इसमें बताया जाता है कि गाड़ी चलाते समय यह प्राथमिकता उपलब्ध नहीं है. हालांकि, ऐसा तब ही होता है, जब प्राथमिकता के साथ कोई कंट्रोलर जुड़ा हो. इस मैसेज में 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);
    }
}