OEM के लिए इंटिग्रेशन गाइड

इस पेज पर, VHAL में रोटरी इनपुट को प्रोसेस करने, रोटरी सेवा को शामिल करने के लिए अपने बिल्ड को कॉन्फ़िगर करने, और सभी ऐप्लिकेशन में रोटरी अनुभव को पसंद के मुताबिक बनाने का तरीका बताया गया है. पहले से इंस्टॉल किए गए OEM ऐप्लिकेशन के लिए, जैसे कि OEM का दिया गया लॉन्चर, कार की यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी (car-ui-library) देखें.

VHAL

रोटरी कंट्रोलर की मदद से ये कार्रवाइयां की जा सकती हैं:

  • थोड़ा सा ऊपर, नीचे, बाएं, और दाएं करें.
  • घड़ी की दिशा में और घड़ी की उल्टी दिशा में घुमाएं.
  • सेंटर बटन दबाएं.
  • 'वापस जाएं' बटन दबाएं.
  • होम बटन दबाएं.
  • फ़ोन और मीडिया जैसे अन्य बटन दबाएं.

सिस्टम प्रॉपर्टी और उससे जुड़ी int32Values के दस्तावेज़ के लिए, hardware/interfaces/automotive/vehicle/2.0/types.hal देखें.

VHAL को ये कार्रवाइयां मैनेज करनी चाहिए:

नज

जब उपयोगकर्ता रोटरी कंट्रोलर को दाईं ओर दबाता है, तो VHAL को Android पर इवेंट भेजने के लिए, HW_KEY_INPUT प्रॉपर्टी का इस्तेमाल int32Values के साथ करना चाहिए:

  1. ACTION_DOWN
  2. KEYCODE_SYSTEM_NAVIGATION_RIGHT
  3. टारगेट डिसप्ले.

जब उपयोगकर्ता रोटरी कंट्रोलर को छोड़ता है, तो VHAL को ACTION_UP के साथ उसी प्रॉपर्टी और कीकोड का इस्तेमाल करना चाहिए. अन्य दिशाओं में किए जाने वाले नज़्ड, उनसे जुड़े कीकोड का इस्तेमाल करते हैं.

डायगनल के लिए कोई कीकोड नहीं होता. हालांकि, अगर हार्डवेयर डायगनल के साथ काम करता है, तो VHAL डायगनल बनाने के लिए हॉरिज़ॉन्टल और वर्टिकल इवेंट को जोड़ सकता है. उदाहरण के लिए, ऊपर और बाईं ओर ले जाने पर, आपको यह दिखेगा:

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN

रोटरी कंट्रोलर को किसी भी क्रम में (और बाद में) छोड़ने पर, यह होना चाहिए:

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

उपयोगकर्ता, रोटरी कंट्रोलर को छोड़ने से पहले, उसे लंबवत दिशा में दबा सकता है. उदाहरण के लिए, यह स्थिति:

लंबवत दिशा
पहली इमेज. लंबवत दिशा

इससे इवेंट का यह क्रम जनरेट होना चाहिए:

  1. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  2. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN
  3. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  4. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

रोटरी कंट्रोलर को एक ही दिशा में घुमाते समय, कोई दोहराएं इवेंट जनरेट नहीं होना चाहिए.

घुमाएं

जब उपयोगकर्ता रोटरी कंट्रोलर को एक बार घुमाता है, तो VHAL को Android पर इवेंट भेजने के लिए, HW_ROTARY_INPUT प्रॉपर्टी का इस्तेमाल int32Values के साथ करना चाहिए:

  1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
  2. एक (1) डिटेंट.
  3. टारगेट डिसप्ले.

इवेंट के टाइमस्टैंप को नैनोसेकंड में बीता हुआ समय पर सेट किया जाना चाहिए.

एक (1) डिटेंट को, घड़ी की सुई के उलट दिशा में घुमाने पर, वही इवेंट जनरेट होना चाहिए. हालांकि, डिटेंट की संख्या के लिए, इसमें एक (1) की जगह -1 होना चाहिए.

अगर एक ही दिशा में रोटेशन के कई डिटेंट एक के बाद एक तेज़ी से होते हैं, तो VHAL को डिटेंट को एक ही इवेंट में जोड़ना चाहिए, ताकि सिस्टम पर इवेंट का लोड न पड़े. इस मामले में, इवेंट का टाइमस्टैंप, रोटेशन का पहला डिटेंट होने का समय होना चाहिए. int32Values में, घुमाव के एक से ज़्यादा डिटेंट के बीच के नैनोसेकंड की संख्या शामिल होनी चाहिए.

उदाहरण के लिए, रोटेशन का यह क्रम:

  • t0 समय पर, उपयोगकर्ता ने एक डिटेंट को, घड़ी की सुई के उलट दिशा में घुमाया.
  • t0 + 5 ns पर, उपयोगकर्ता ने एक डिटेंट को वामावर्त घुमाया.
  • t0 + 8 ns पर, उपयोगकर्ता ने एक डिटेंट को, घड़ी की सुई के उलट दिशा में घुमाया.

यह इवेंट जनरेट करना चाहिए:

  • प्रॉपर्टी: HW_ROTARY_INPUT
  • टाइमस्टैंप: t0
  • int32Values:
    1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
    2. -3 (घड़ी की उलटी दिशा में तीन डिटेंट).
    3. टारगेट डिसप्ले.
    4. पहले और दूसरे डिटेंट के बीच 5 ns.
    5. दूसरे और तीसरे डिटेंट के बीच 3 ns.

सेंटर बटन

जब उपयोगकर्ता सेंटर बटन दबाता है, तो VHAL को Android पर इवेंट भेजने के लिए, HW_KEY_INPUT प्रॉपर्टी का इस्तेमाल यहां दिए गए int32Values के साथ करना चाहिए:

  1. ACTION_DOWN
  2. KEYCODE_DPAD_CENTER
  3. टारगेट डिसप्ले.

जब उपयोगकर्ता रोटरी कंट्रोलर को छोड़ता है, तो VHAL को ACTION_UP के साथ उसी प्रॉपर्टी और कीकोड का इस्तेमाल करना चाहिए.

सेंटर बटन को दबाकर रखने पर, दोहराए जाने वाले इवेंट जनरेट न करें.

'वापस जाएं' बटन

जब उपयोगकर्ता 'वापस जाएं' बटन दबाता है, तो VHAL को Android पर इवेंट भेजने के लिए, HW_KEY_INPUT प्रॉपर्टी का इस्तेमाल, यहां दिए गए int32Values के साथ करना चाहिए:

  1. ACTION_DOWN
  2. KEYCODE_BACK
  3. टारगेट डिसप्ले.

जब उपयोगकर्ता रोटरी कंट्रोलर को छोड़ता है, तो VHAL को ACTION_UP के साथ उसी प्रॉपर्टी और कीकोड का इस्तेमाल करना चाहिए.

सेंटर बटन को दबाकर रखने पर, कोई दोहराए जाने वाले इवेंट जनरेट नहीं होने चाहिए.

होम बटन

होम बटन को वैसे ही इस्तेमाल करें जैसे आपने वापस जाएं बटन का इस्तेमाल किया था. हालांकि, KEYCODE_BACK के बजाय KEYCODE_HOME का इस्तेमाल करें.

अन्य बटन

अगर रोटरी कंट्रोलर में कोई और बटन शामिल है, तो VHAL उन्हें OEM के हिसाब से मैनेज कर सकता है. ऐसा इसलिए, क्योंकि Android के हिसाब से उन्हें रोटरी कंट्रोलर का हिस्सा नहीं माना जाता. आम तौर पर, इन्हें वापस जाएं और होम बटन की तरह ही मैनेज किया जाता है. हालांकि, इनके लिए अलग-अलग कीकोड का इस्तेमाल किया जाता है. उदाहरण के लिए, KEYCODE_CALL या KEYCODE_MUSIC.

बिल्ड कॉन्फ़िगरेशन

रोटरी नेविगेशन की सुविधा, RotaryService नाम की सुलभता सेवा से मिलती है. अपने डिवाइस की सिस्टम इमेज में इस सेवा को शामिल करने के लिए, अपनी makefile में यह लाइन जोड़ें:

PRODUCT_PACKAGES += CarRotaryController

डीबग बिल्ड में, ये पैकेज भी शामिल किए जा सकते हैं:

डिवाइस के बूट होने और उपयोगकर्ता के स्विच करने पर, रोटरी सेवा अपने-आप चालू हो जाती है. इससे यह पक्का होता है कि उपयोगकर्ता सेट-अप के दौरान रोटरी कंट्रोलर का इस्तेमाल कर सके.

अगर रोटरी कंट्रोलर वाली और बिना रोटरी कंट्रोलर वाली कारों के लिए एक ही बिल्ड का इस्तेमाल किया जाता है, तो ऊपर दिखाए गए तरीके से CarRotaryController जोड़ें, ताकि बिल्ड में ज़रूरी कोड शामिल हो जाए. रोटरी सेवा को रोटरी वाली कारों के अलावा अन्य कारों पर चालू होने से रोकने के लिए, एक स्टैटिक आरआरओ बनाएं. इससे, packages/services/Car/service में rotaryService स्ट्रिंग रिसॉर्स को खाली स्ट्रिंग से ओवरले किया जा सकेगा. आपको एक ही बिल्ड का इस्तेमाल करना होगा, लेकिन रोटरी और नॉन-रोटरी डिवाइसों के लिए, अलग-अलग प्रॉडक्ट कॉन्फ़िगरेशन होंगे. सिर्फ़ बाद वाले विकल्प में ओवरले शामिल होता है.

पसंद के मुताबिक बनाएं

OEM, फ़ोकस ढूंढने के लॉजिक, फ़ोकस हाइलाइट, और कुछ अन्य आइटम को पसंद के मुताबिक बना सकते हैं. इसके लिए, उन्हें इन जगहों पर संसाधन ओवरले का इस्तेमाल करना होगा:

  • car-ui-library, packages/apps/Car/libs/car-ui-lib में मौजूद है
  • RotaryService, packages/apps/Car/RotaryController में मौजूद है
  • Core, frameworks/base/core में मौजूद है

सूचना का इतिहास

OEM यह कॉन्फ़िगर कर सकता है कि दोनों तरह के सूचना भेजने के इतिहास को चालू किया गया है या नहीं. अगर चालू है, तो कैश मेमोरी का साइज़ और खत्म होने की नीति. यह सब, car-ui-library के अलग-अलग संसाधनों को बदलकर किया जाता है.

फ़ोकस इतिहास कैश मेमोरी

(Android 11 QPR3, Android 11 Car, Android 12)
FocusArea के लिए हर कैश मेमोरी में, सबसे हाल ही में फ़ोकस किया गया व्यू सेव किया जाता है, ताकि FocusArea पर वापस जाने पर उस पर फ़ोकस किया जा सके.FocusArea इस कैश मेमोरी को कॉन्फ़िगर करने के लिए, इन car-ui-library संसाधनों को ओवरले करें:

  • car_ui_focus_history_cache_type:
    1. कैश मेमोरी में सेव होने की सुविधा बंद है.
    2. कैश मेमोरी कुछ समय बाद खत्म हो जाएगी (नीचे देखें).
    3. कैश मेमोरी कभी खत्म नहीं होगी.
  • car_ui_focus_history_expiration_period_ms: अगर कैश मेमोरी का टाइप दो (2) पर सेट है, तो कैश मेमोरी कितने मिलीसेकंड में खत्म हो जाएगी (ऊपर देखें).

FocusArea के इतिहास की कैश मेमोरी

(Android 11 QPR3, Android 11 Car, Android 12)
यह कैश मेमोरी, नॉज करने का इतिहास सेव करती है, ताकि दूसरी दिशा में नॉज करने पर, फ़ोकस उसी FocusArea पर वापस आ सके. इस कैश मेमोरी को कॉन्फ़िगर करने के लिए, यहां दिए गए car-ui-library संसाधनों को ओवरले करें:

  • car_ui_focus_area_history_cache_type:
    1. कैश मेमोरी में सेव होने की सुविधा बंद है.
    2. कैश मेमोरी कुछ समय बाद खत्म हो जाती है (नीचे देखें).
    3. कैश मेमोरी की समयसीमा कभी खत्म नहीं होती.
  • car_ui_focus_area_history_expiration_period_ms: अगर कैश मेमोरी का टाइप 2 पर सेट है, तो कैश मेमोरी कितने मिलीसेकंड में खत्म हो जाएगी (ऊपर देखें).
  • car_ui_clear_focus_area_history_when_rotating: उपयोगकर्ता जब कंट्रोलर को घुमाता है, तो क्या कैश मेमोरी को खाली करना है.

रोटेशन

(Android 11 QPR3, Android 11 Car, Android 12)
ओईएम, RotaryService में दो इंटिजर संसाधनों को बदल सकता है. इससे यह पता चलता है कि स्क्रीन घुमाने के लिए, माउस ऐक्सेलरेशन जैसी कोई सुविधा है या नहीं:

  • rotation_acceleration_3x_ms: यह मिलीसेकंड में तय किया गया समय अंतराल है, जिससे यह तय किया जाता है कि Google को रोटेशन के लिए कंट्रोलर के रोटेशन को तेज़ करना चाहिए या नहीं. अगर इस डिटेंट और रोटेशन के पिछले डिटेंट के बीच का इंटरवल, इस वैल्यू से कम है, तो इसे रोटेशन के तीन डिटेंट माना जाएगा. 3× एक्सेलरेशन की सुविधा बंद करने के लिए, इसे 2147483647 पर सेट करें.
  • rotation_acceleration_2x_ms: rotation_acceleration_3x_ms से मिलता-जुलता है. इसका इस्तेमाल, 2× त्वरण के लिए किया जाता है. दो गुना तेज़ी से प्रोसेस करने की सुविधा बंद करने के लिए, इसे 2147483647 पर सेट करें.

ऐक्सेलरेशन सबसे बेहतर तरीके से तब काम करता है, जब घुमाव के हर डिटेंट के लिए अलग-अलग टाइमस्टैंप हों, जैसा कि VHAL के लिए ज़रूरी है. अगर ये उपलब्ध नहीं हैं, तो RotaryService यह मानकर चलता है कि रोटेशन के डिटेंट एक जैसे अंतर पर हैं.

/**
     * Property to feed H/W rotary events to android
     *
     * int32Values[0] : RotaryInputType identifying which rotary knob rotated
     * int32Values[1] : number of detents (clicks), positive for clockwise,
     *                  negative for counterclockwise
     * int32Values[2] : target display defined in VehicleDisplay. Events not
     *                  tied to specific display must be sent to
     *                  VehicleDisplay#MAIN.
     * int32values[3 .. 3 + abs(number of detents) - 2]:
     *                  nanosecond deltas between pairs of consecutive detents,
     *                  if the number of detents is > 1 or < -1
     *
     * VehiclePropValue.timestamp: when the rotation occurred. If the number of
     *                             detents is > 1 or < -1, this is when the
     *                             first detent of rotation occurred.
     *
     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
     * @data_enum RotaryInputType
     * @access VehiclePropertyAccess:READ
     */
    HW_ROTARY_INPUT = (
        0x0A20
        | VehiclePropertyGroup:SYSTEM
        | VehiclePropertyType:INT32_VEC
        | VehicleArea:GLOBAL),

फ़ोकस हाइलाइट

OEM, Android फ़्रेमवर्क में फ़ोकस हाइलाइट करने की डिफ़ॉल्ट सुविधा और car-ui-library में फ़ोकस हाइलाइट करने के कई रिसॉर्स को बदल सकता है.

फ़ोकस हाइलाइट करने की डिफ़ॉल्ट सेटिंग

Android फ़्रेमवर्क, एट्रिब्यूट selectableItemBackground की मदद से डिफ़ॉल्ट फ़ोकस हाइलाइट उपलब्ध कराता है. Theme.DeviceDefault में, यह एट्रिब्यूट Core में मौजूद item_background.xml का रेफ़रंस देता है. डिफ़ॉल्ट फ़ोकस हाइलाइट ड्रॉआउट को बदलने के लिए, OEM item_background.xml को ओवरले कर सकता है.

आम तौर पर, यह ड्रॉबल StateListDrawable होना चाहिए, जो android:state_focused और android:state_pressed के साथ-साथ, स्टेटस के अलग-अलग कॉम्बिनेशन के आधार पर बैकग्राउंड में बदलाव करता है. जब उपयोगकर्ता किसी व्यू पर फ़ोकस करने के लिए रोटरी कंट्रोल का इस्तेमाल करता है, तो android:state_focused true हो जाएगा, लेकिन android:state_pressed false हो जाएगा. अगर उपयोगकर्ता रोटरी कंट्रोलर पर मौजूद बीच वाले बटन को दबाता है, तो बटन को दबाए रखने के दौरान android:state_focused और android:state_pressed, दोनों true हो जाएंगे. जब उपयोगकर्ता बटन को छोड़ देगा, तो सिर्फ़ android:state_focused रहेगा true.

car-ui-library, Theme.DeviceDefault से ली गई थीम का इस्तेमाल करती है. इस वजह से, इस ओवरले का असर उन ऐप्लिकेशन पर पड़ता है जो इस लाइब्रेरी का इस्तेमाल करते हैं. साथ ही, इसका असर उन ऐप्लिकेशन पर भी पड़ता है जो Theme.DeviceDefault से ली गई किसी भी थीम का इस्तेमाल करते हैं. इसका असर उन ऐप्लिकेशन पर नहीं पड़ेगा जो Theme.Material जैसी किसी दूसरी थीम का इस्तेमाल करते हैं.

car-ui-library में हाइलाइट किए गए संसाधनों पर फ़ोकस करना

OEM, कई car-ui-library संसाधनों को बदल सकता है. इससे यह कंट्रोल किया जा सकता है कि फ़ोकस हाइलाइट, ऐसे व्यू पर कैसा दिखे जिनमें फ़ोकस हाइलाइट, आयताकार (जैसे, गोल या गोली के आकार का) न हो. साथ ही, यह भी कंट्रोल किया जा सकता है कि Theme.DeviceDefault से नहीं ली गई थीम का इस्तेमाल करने वाले ऐप्लिकेशन में, फ़ोकस हाइलाइट कैसा दिखे. इन संसाधनों को ओवरले किया जाना चाहिए, ताकि फ़ोकस हाइलाइट, डिफ़ॉल्ट फ़ोकस हाइलाइट ड्रॉबल के साथ मेल खाए.

(Android 11 QPR3, Android 11 Car, Android 12)
यहां दिए गए संसाधनों का इस्तेमाल यह बताने के लिए किया जाता है कि किसी व्यू पर फ़ोकस किया गया है, लेकिन उसे दबाया नहीं गया है:

  • car_ui_rotary_focus_fill_color: भरने के लिए रंग.
  • car_ui_rotary_focus_stroke_color: आउटलाइन का रंग.
  • car_ui_rotary_focus_stroke_width: आउटलाइन की मोटाई.

(Android 11 QPR3, Android 11 Car, Android 12)
इन संसाधनों का इस्तेमाल करके यह पता चलता है कि किसी व्यू पर फ़ोकस कब और उसे कब दबाया गया:

  • car_ui_rotary_focus_pressed_fill_color: भरने के लिए रंग.
  • car_ui_rotary_focus_pressed_stroke_color: आउटलाइन का रंग.
  • car_ui_rotary_focus_pressed_stroke_width: आउटलाइन की मोटाई.

कभी-कभी किसी बटन को उपयोगकर्ता का ध्यान खींचने के लिए, बैकग्राउंड का रंग एक जैसा किया जाता है. जैसे, ऊपर दिए गए उदाहरण में. इससे फ़ोकस हाइलाइट को देखना मुश्किल हो सकता है.

सॉलिड बैकग्राउंड वाला बटन
दूसरी इमेज. सॉलिड बैकग्राउंड वाला बटन

इस स्थिति में, डेवलपर सेकंडरी रंगों का इस्तेमाल करके, फ़ोकस हाइलाइट करने का तरीका तय कर सकता है:
  • (Android 11 QPR3, Android 11 Car, Android 12)
    car_ui_rotary_focus_fill_secondary_color
    car_ui_rotary_focus_stroke_secondary_color
  • (Android 12)
    car_ui_rotary_focus_pressed_fill_secondary_color
    car_ui_rotary_focus_pressed_stroke_secondary_color

कोई भी रंग पारदर्शी हो सकता है और कोई भी डाइमेंशन शून्य हो सकता है. उदाहरण के लिए, अगर आपको सिर्फ़ भरना है या सिर्फ़ आउटलाइन बनानी है.

FocusArea हाइलाइट

(Android 11 QPR3, Android 11 Car, Android 12)
FocusArea, अपने किसी वंश के फ़ोकस होने पर दो तरह के हाइलाइट दिखा सकता है. अगर आप चाहें, तो दोनों का एक साथ इस्तेमाल किया जा सकता है. यह सुविधा AOSP में डिफ़ॉल्ट रूप से बंद रहती है. हालांकि, car-ui-library के संसाधनों को बदलकर इसे चालू किया जा सकता है:

  • car_ui_enable_focus_area_foreground_highlight: FocusArea और उसके वंशजों के ऊपर हाइलाइट करें. AOSP में, यह ड्रॉबल FocusArea के चारों ओर एक आउटलाइन है. OEM, car_ui_focus_area_foreground_highlight ड्रॉआउट को बदल सकते हैं.
  • car_ui_enable_focus_area_background_highlight: FocusArea के ऊपर, लेकिन उसके वंशजों के पीछे हाइलाइट करें. AOSP में, यह ड्रॉबल एक सॉलिड फ़िल है. OEM, car_ui_focus_area_background_highlight ड्रॉआउट को बदल सकते हैं.

इनपुट के तरीके के एडिटर

इनपुट के तरीके संपादक (आईएमई), इनपुट के तरीके होते हैं. उदाहरण के लिए, ऑन-स्क्रीन कीबोर्ड.

(Android 11 QPR3, Android 11 Car, Android 12)
ओईएम को टच-आधारित IME के ComponentName की जानकारी देने के लिए, RotaryService में default_touch_input_method स्ट्रिंग रिसॉर्स को ओवरले करना होगा. उदाहरण के लिए, अगर OEM, Android Automotive के साथ दिए गए IME का इस्तेमाल करता है, तो उसे com.google.android.apps.automotive.inputmethod/.InputMethodService की जानकारी देनी चाहिए.

(Android 11 QPR3, Android 11 Car, Android 12)
अगर OEM ने खास तौर पर रोटरी के लिए कोई IME बनाया है, तो उसे rotary_input_method संसाधन में इसके बारे में बताना चाहिए ComponentName. अगर इस संसाधन को ओवरले किया जाता है, तो जब भी उपयोगकर्ता रोटरी कंट्रोलर के नॉब, रोटेशन, और सेंटर बटन की मदद से हेड यूनिट के साथ इंटरैक्ट करता है, तो बताए गए IME का इस्तेमाल किया जाता है. जब उपयोगकर्ता स्क्रीन को टच करेगा, तो पिछले IME का इस्तेमाल किया जाएगा. IME के विकल्प पर, बैक बटन (और रोटरी कंट्रोलर के अन्य बटन) का कोई असर नहीं पड़ता. अगर इस संसाधन को ओवरले नहीं किया जाता है, तो IME स्विच नहीं होता. Cardboard में रोटरी कंट्रोल की सुविधा काम नहीं करती. इसलिए, अगर OEM ने रोटरी IME नहीं दिया है, तो उपयोगकर्ता रोटरी कंट्रोलर से टेक्स्ट नहीं डाल सकता.

RotaryIME, रोटरी IME का डेमो है. ऊपर बताए गए तरीके से, IME के अपने-आप स्विच होने की सुविधा को आज़माना काफ़ी है. RotaryIME का सोर्स कोड packages/apps/Car/tests/RotaryIME/ में मिल सकता है.

स्क्रीन के बाहर सूचनाएं

डिफ़ॉल्ट रूप से, जब उपयोगकर्ता स्क्रीन के किनारे से टाइल को हटाने की कोशिश करता है, तो कुछ नहीं होता. OEM, इनमें से किसी भी कॉम्बिनेशन का इस्तेमाल करके कॉन्फ़िगर कर सकता है कि चारों दिशाओं में क्या करना है:

  1. AccessibilityService से तय की गई ग्लोबल कार्रवाई. उदाहरण के लिए, GLOBAL_ACTION_BACK.
  2. कोई कुंजी कोड, जैसे कि KEYCODE_BACK.
  3. किसी गतिविधि को लॉन्च करने का इंटेंट, जिसे यूआरएल के तौर पर दिखाया जाता है.

(Android 11 QPR3, Android 11 Car, Android 12)
इनके बारे में जानकारी देने के लिए, RotaryService में ये ऐरे संसाधन ओवरले किए जाते हैं:

  • off_screen_nudge_global_actions: जब उपयोगकर्ता स्क्रीन के किनारे पर ऊपर, नीचे, बाईं या दाईं ओर स्वाइप करता है, तब करने के लिए वैश्विक कार्रवाइयों का कलेक्शन. अगर इस कलेक्शन का काम का एलिमेंट -1 है, तो कोई ग्लोबल ऐक्शन नहीं किया जाता.
  • off_screen_nudge_key_codes: क्लिक इवेंट के मुख्य कोड का कलेक्शन, जिसे उपयोगकर्ता के स्क्रीन के किनारे पर ऊपर, नीचे, बाईं या दाईं ओर जाने पर इंजेक्ट किया जाता है. अगर इस कलेक्शन के काम के एलिमेंट की वैल्यू 0 (KEYCODE_UNKNOWN) है, तो कोई इवेंट इंजेक्ट नहीं किया जाता.
  • off_screen_nudge_intents: जब उपयोगकर्ता स्क्रीन के किनारे पर ऊपर, नीचे, बाएं या दाएं स्वाइप करता है, तब किसी गतिविधि को लॉन्च करने के लिए इंटेंट का कलेक्शन. अगर इस कलेक्शन का काम का एलिमेंट खाली है, तो कोई गतिविधि शुरू नहीं की जाती.

अन्य कॉन्फ़िगरेशन

आपको RotaryService के इन रिसॉर्स को ओवरले करना चाहिए:

  • (Android 11 QPR3, Android 11 Car, Android 12)
    config_showHeadsUpNotificationOnBottom: यह एक बूलियन वैल्यू है. इससे यह पता चलता है कि हेड्स-अप सूचनाओं को ऊपर के बजाय, नीचे दिखाया जाना चाहिए या नहीं. इसकी वैल्यू, frameworks/base/packages/CarSystemUI/res/values/config.xml में मौजूद config_showHeadsUpNotificationOnBottom बूलियन रिसॉर्स की वैल्यू के जैसी होनी चाहिए
  • (Android 11 QPR3, Android 11 Car, Android 12)
    notification_headsup_card_margin_horizontal: हेड-अप सूचना विंडो के लिए, बायां और दायां मार्जिन. इसकी वैल्यू, packages/apps/Car/Notification/res/values/dimens.xml में मौजूद notification_headsup_card_margin_horizontal डाइमेंशन रिसॉर्स की वैल्यू के जैसी होनी चाहिए
  • (Android 12)
    excluded_application_overlay_window_titles: उन विंडो के टाइटल का ऐरे जिन्हें ओवरले विंडो नहीं माना जाना चाहिए. इसमें TaskViews या TaskDisplayAreas को दिखाने वाली ऐप्लिकेशन विंडो के टाइटल शामिल होने चाहिए. डिफ़ॉल्ट रूप से, इस सूची में सिर्फ़ "Maps" शामिल होता है.

इस RotaryService संसाधन को ओवरले किया जा सकता है:

  • (Android 11 QPR3, Android 11 Car, Android 12)
    long_press_ms: यह एक इंटिजर वैल्यू होती है. इससे पता चलता है कि लंबे समय तक दबाए रखने की सुविधा को ट्रिगर करने के लिए, सेंटर बटन को कितने मिलीसेकंड तक दबाकर रखना होगा. 0 से पता चलता है कि सिस्टम के डिफ़ॉल्ट तौर पर, लंबे समय तक दबाने पर होने वाले टाइम आउट का इस्तेमाल किया जाना चाहिए. यह डिफ़ॉल्ट मान है.