इस पेज पर, VHAL में रोटरी इनपुट प्रोसेस करने, रोटरी सेवा को शामिल करने के लिए बिल्ड कॉन्फ़िगर करने, और सभी ऐप्लिकेशन में रोटरी अनुभव को पसंद के मुताबिक बनाने का तरीका बताया गया है. पहले से इंस्टॉल किए गए ओईएम ऐप्लिकेशन के लिए, जैसे कि ओईएम की ओर से उपलब्ध कराया गया लॉन्चर, कार यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी (car-ui-library) देखें.
VHAL
रोटरी कंट्रोलर, इन कार्रवाइयों को सपोर्ट करता है:
- थोड़ा सा ऊपर, नीचे, बाएं, और दाएं करना.
- घड़ी की दिशा में और घड़ी की उलटी दिशा में घुमाना.
- सेंटर बटन दबाना.
- 'वापस जाएं' बटन दबाना.
- होम बटन दबाना.
- फ़ोन और मीडिया जैसे अन्य बटन दबाना.
सिस्टम की प्रॉपर्टी और उनसे जुड़ी int32Values के बारे में जानने के लिए, hardware/interfaces/automotive/vehicle/2.0/types.hal देखें.
VHAL को इन कार्रवाइयों को मैनेज करना चाहिए:
Nudge
जब कोई उपयोगकर्ता, रोटरी कंट्रोलर को दाईं ओर पुश करता है, तो VHAL को Android पर कोई इवेंट भेजने के लिए, HW_KEY_INPUT प्रॉपर्टी का इस्तेमाल करना चाहिए. साथ ही, इसमें ये int32Values शामिल होनी चाहिए:
ACTION_DOWNKEYCODE_SYSTEM_NAVIGATION_RIGHT- टारगेट डिसप्ले.
जब कोई उपयोगकर्ता, रोटरी कंट्रोलर को छोड़ता है, तो VHAL को ACTION_UP के साथ, उसी प्रॉपर्टी और कीकोड का इस्तेमाल करना चाहिए. अन्य दिशाओं में नज करने के लिए, उनसे जुड़े कीकोड का इस्तेमाल किया जाना चाहिए.
डायगनल के लिए कोई कीकोड नहीं होते. हालांकि, अगर हार्डवेयर डायगनल को सपोर्ट करता है, तो VHAL, हॉरिज़ॉन्टल और वर्टिकल इवेंट को मिलाकर डायगनल बना सकता है. उदाहरण के लिए, ऊपर और बाईं ओर नज करने पर यह होना चाहिए:
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWNHW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN
किसी भी क्रम में (और इसके बाद) रोटरी कंट्रोलर को छोड़ने पर यह होना चाहिए:
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UPHW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP
ऐसा हो सकता है कि उपयोगकर्ता, रोटरी कंट्रोलर को छोड़ने से पहले, उसे लंबवत दिशा में पुश करे. उदाहरण के लिए, यह परिदृश्य:
इससे इवेंट का यह क्रम जनरेट होना चाहिए:
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWNHW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWNHW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UPHW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP
रोटरी कंट्रोलर को एक ही दिशा में दबाकर रखने पर, दोहराए जाने वाले इवेंट जनरेट नहीं होने चाहिए.
घुमाएं
जब कोई उपयोगकर्ता, रोटरी कंट्रोलर को घड़ी की दिशा में एक डिटेंट (क्लिक) घुमाता है, तो VHAL को Android पर कोई इवेंट भेजने के लिए, HW_ROTARY_INPUT प्रॉपर्टी का इस्तेमाल करना चाहिए. साथ ही, इसमें ये int32Values शामिल होनी चाहिए:
ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION- एक (1) डिटेंट.
- टारगेट डिसप्ले.
इवेंट का टाइमस्टैंप, नैनोसेकंड में बीता हुआ समय होना चाहिए.
घड़ी की उलटी दिशा में एक (1) डिटेंट घुमाने पर, वही इवेंट जनरेट होना चाहिए. हालांकि, इसमें डिटेंट की संख्या के लिए -1 होना चाहिए.
अगर एक ही दिशा में रोटेशन के कई डिटेंट तेज़ी से होते हैं, तो VHAL को डिटेंट को एक ही इवेंट में जोड़ना चाहिए, ताकि सिस्टम पर इवेंट का ज़्यादा लोड न पड़े.
इस मामले में, इवेंट का टाइमस्टैंप वह होना चाहिए जब रोटेशन का पहला डिटेंट हुआ था.
int32Values में, रोटेशन के लगातार डिटेंट के बीच नैनोसेकंड की संख्या शामिल होनी चाहिए.
उदाहरण के लिए, रोटेशन का यह क्रम:
- t0 समय पर, उपयोगकर्ता ने घड़ी की उलटी दिशा में एक डिटेंट घुमाया.
- t0 + 5 नैनोसेकंड समय पर, उपयोगकर्ता ने घड़ी की उलटी दिशा में एक डिटेंट घुमाया.
- t0 + 8 नैनोसेकंड समय पर, उपयोगकर्ता ने घड़ी की उलटी दिशा में एक डिटेंट घुमाया.
इससे यह इवेंट जनरेट होना चाहिए:
- प्रॉपर्टी:
HW_ROTARY_INPUT - टाइमस्टैंप:
t0 int32Values:ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION- -3 (घड़ी की उलटी दिशा में तीन डिटेंट).
- टारगेट डिसप्ले.
- पहले और दूसरे डिटेंट के बीच 5 नैनोसेकंड.
- दूसरे और तीसरे डिटेंट के बीच 3 नैनोसेकंड.
सेंटर बटन
जब कोई उपयोगकर्ता, सेंटर बटन दबाता है, तो VHAL को Android पर कोई इवेंट भेजने के लिए, HW_KEY_INPUT प्रॉपर्टी का इस्तेमाल करना चाहिए. साथ ही, इसमें ये int32Values शामिल होनी चाहिए:
ACTION_DOWNKEYCODE_DPAD_CENTER- टारगेट डिसप्ले.
जब कोई उपयोगकर्ता, रोटरी कंट्रोलर को छोड़ता है, तो VHAL को ACTION_UP के साथ, उसी प्रॉपर्टी और कीकोड का इस्तेमाल करना चाहिए.
सेंटर बटन को दबाकर रखने पर, दोहराए जाने वाले इवेंट जनरेट न करें.
'वापस जाएं' बटन
जब कोई उपयोगकर्ता, 'वापस जाएं' बटन दबाता है, तो VHAL को Android पर कोई इवेंट भेजने के लिए, HW_KEY_INPUT प्रॉपर्टी का इस्तेमाल करना चाहिए. साथ ही, इसमें ये int32Values शामिल होनी चाहिए:
ACTION_DOWNKEYCODE_BACK- टारगेट डिसप्ले.
जब कोई उपयोगकर्ता, रोटरी कंट्रोलर को छोड़ता है, तो VHAL को ACTION_UP के साथ, उसी प्रॉपर्टी और कीकोड का इस्तेमाल करना चाहिए.
सेंटर बटन को दबाकर रखने पर, दोहराए जाने वाले इवेंट जनरेट नहीं होने चाहिए.
होम बटन
होम बटन को उसी तरह मैनेज करें जैसे 'वापस जाएं' बटन को मैनेज किया जाता है. हालांकि, इसमें KEYCODE_BACK के बजाय KEYCODE_HOME का इस्तेमाल करें.
अन्य बटन
अगर रोटरी कंट्रोलर में कोई अन्य बटन शामिल है, तो VHAL उन्हें ओईएम की पसंद के मुताबिक मैनेज कर सकता है. ऐसा इसलिए, क्योंकि Android के नज़रिए से इन्हें रोटरी का हिस्सा नहीं माना जाता.
आम तौर पर, इन्हें 'वापस जाएं' और होम बटन की तरह मैनेज किया जाता है. हालांकि, इनके लिए अलग-अलग कीकोड इस्तेमाल किए जाते हैं.
उदाहरण के लिए, KEYCODE_CALL या KEYCODE_MUSIC.
बिल्ड कॉन्फ़िगरेशन
रोटरी नेविगेशन की सुविधा, RotaryService नाम की ऐक्सेसबििलिटी सेवा से मिलती है.
इस सेवा को अपने डिवाइस की सिस्टम इमेज में शामिल करने के लिए, अपनी मेकफ़ाइल में यह लाइन जोड़ें:
PRODUCT_PACKAGES += CarRotaryController
आपके पास डीबग बिल्ड में, ये पैकेज शामिल करने का विकल्प भी है:
RotaryPlaygroundरोटरी के लिए रेफ़रंस ऐप्लिकेशन (RotaryPlayground देखें).RotaryIMEरोटरी IME का डेमो (इनपुट के तरीके के एडिटर देखें).CarRotaryImeRRORotaryIMEके लिए ओवरले.
डिवाइस बूट होने पर और उपयोगकर्ता के स्विच करने पर, रोटरी सेवा अपने-आप चालू हो जाती है. इससे यह पक्का होता है कि उपयोगकर्ता, सेट-अप के दौरान रोटरी कंट्रोलर का इस्तेमाल कर सकता है.
अगर रोटरी कंट्रोलर वाली और बिना रोटरी कंट्रोलर वाली कारों के लिए एक ही बिल्ड का इस्तेमाल किया जाता है, तो ऊपर दिखाए गए तरीके से CarRotaryController जोड़ें, ताकि बिल्ड में ज़रूरी कोड शामिल किया जा सके. रोटरी कंट्रोलर के बिना वाली कारों पर, रोटरी सेवा को चालू होने से रोकने के लिए, packages/services/Car/service में मौजूद rotaryService स्ट्रिंग रिसॉर्स को खाली स्ट्रिंग के साथ ओवरले करने के लिए, एक स्टैटिक RRO बनाएं. रोटरी और नॉन-रोटरी डिवाइसों के लिए, एक ही बिल्ड का इस्तेमाल किया जाएगा. हालांकि, इनके लिए अलग-अलग प्रॉडक्ट कॉन्फ़िगरेशन होंगे. सिर्फ़ बाद वाले में ओवरले शामिल होता है.
पसंद के मुताबिक बनाएं
ओईएम, इन जगहों पर मौजूद रिसॉर्स ओवरले की मदद से, फ़ोकस ढूंढने के लॉजिक, फ़ोकस हाइलाइट, और कुछ अन्य आइटम को पसंद के मुताबिक बना सकते हैं:
- car-ui-library,
packages/apps/Car/libs/car-ui-libमें मौजूद है RotaryService,packages/apps/Car/RotaryControllerमें मौजूद हैCore,frameworks/base/coreमें मौजूद है
नज का इतिहास
ओईएम यह कॉन्फ़िगर कर सकता है कि नज के इतिहास के दोनों टाइप में से हर एक को चालू किया जाए या नहीं. अगर चालू किया जाता है, तो कैश मेमोरी का साइज़ और समयसीमा खत्म होने की नीति तय की जा सकती है. यह सब, car-ui-library के अलग-अलग रिसॉर्स को बदलकर किया जाता है.
फ़ोकस के इतिहास की कैश मेमोरी
(Android 11 QPR3, Android 11 Car,
Android 12)
यह प्रति-FocusArea कैश मेमोरी,
FocusArea में हाल ही में फ़ोकस किए गए व्यू को सेव करती है, ताकि FocusArea पर वापस नज करने पर उसे फ़ोकस किया जा सके.
इस कैश मेमोरी को, car-ui-library के इन रिसॉर्स को ओवरले करके कॉन्फ़िगर किया जा सकता है:
-
car_ui_focus_history_cache_type:- कैश मेमोरी बंद है.
- कैश मेमोरी कुछ समय बाद खत्म हो जाएगी (नीचे देखें).
- कैश मेमोरी कभी खत्म नहीं होगी.
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:- कैश मेमोरी बंद है.
- कैश मेमोरी कुछ समय बाद खत्म हो जाएगी (नीचे देखें).
- कैश मेमोरी कभी खत्म नहीं होगी.
car_ui_focus_area_history_expiration_period_ms: अगर कैश मेमोरी का टाइप दो (ऊपर देखें) पर सेट है, तो कैश मेमोरी कितने मिलीसेकंड बाद खत्म होगी.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× ऐक्सेलरेशन के लिए किया जाता है. 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),
फ़ोकस हाइलाइट
ओईएम, Android फ़्रेमवर्क में डिफ़ॉल्ट फ़ोकस हाइलाइट और car-ui-library में मौजूद कई फ़ोकस हाइलाइट रिसॉर्स को बदल सकता है.
डिफ़ॉल्ट फ़ोकस हाइलाइट
Android फ़्रेमवर्क, selectableItemBackground एट्रिब्यूट के ज़रिए डिफ़ॉल्ट फ़ोकस हाइलाइट उपलब्ध कराता है. Theme.DeviceDefault में, यह एट्रिब्यूट Core में मौजूद item_background.xml को रेफ़र करता है. ओईएम, डिफ़ॉल्ट फ़ोकस हाइलाइट ड्रॉएबल को बदलने के लिए, 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 में मौजूद फ़ोकस हाइलाइट रिसॉर्स
ओईएम, 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: और उसके डिसेंडेंट के ऊपर एक हाइलाइट बनाएं.FocusAreaAOSP में, यह ड्रॉएबल, एक आउटलाइनFocusAreaके चारों ओर होती है. ओईएम,car_ui_focus_area_foreground_highlightड्रॉएबल को बदल सकते हैं.car_ui_enable_focus_area_background_highlight: के ऊपर एक हाइलाइट बनाएं, लेकिन उसके डिसेंडेंट के पीछे.FocusAreaAOSP में, यह ड्रॉएबल एक सॉलिड फ़िल होती है. ओईएम,car_ui_focus_area_background_highlightड्रॉएबल को बदल सकते हैं.
इनपुट के तरीके के एडिटर
इनपुट के तरीके के एडिटर (IME), इनपुट के तरीके होते हैं. उदाहरण के लिए, ऑन-स्क्रीन कीबोर्ड.
(Android 11 QPR3, Android 11 Car,
Android 12)
ओईएम को, टच-आधारित IME का ComponentName तय करने के लिए, RotaryService में मौजूद default_touch_input_method स्ट्रिंग रिसॉर्स को ओवरले करना होगा. उदाहरण के लिए, अगर ओईएम, Android Automotive के साथ उपलब्ध कराए गए IME का इस्तेमाल करता है, तो उसे com.google.android.apps.automotive.inputmethod/.InputMethodService तय करना चाहिए.
(Android 11 QPR3, Android 11 Car,
Android 12)
अगर ओईएम ने रोटरी के लिए कोई IME बनाया है, तो उसे
ComponentName रिसॉर्स में उसका rotary_input_method तय करना चाहिए. अगर इस रिसॉर्स को ओवरले किया जाता है, तो उपयोगकर्ता के रोटरी कंट्रोलर के नज, रोटेशन, और सेंटर बटन की मदद से हेड यूनिट के साथ इंटरैक्ट करने पर, तय किया गया IME इस्तेमाल किया जाता है. जब कोई उपयोगकर्ता स्क्रीन को टच करता है, तो पिछला IME इस्तेमाल किया जाएगा. 'वापस जाएं' बटन (और रोटरी कंट्रोलर पर मौजूद अन्य बटन) का IME चुनने पर कोई असर नहीं पड़ता. अगर इस रिसॉर्स को ओवरले नहीं किया जाता है, तो IME स्विच नहीं होता. Carboard, रोटरी को सपोर्ट नहीं करता. इसलिए, अगर ओईएम ने रोटरी IME उपलब्ध नहीं कराया है, तो उपयोगकर्ता रोटरी कंट्रोलर की मदद से टेक्स्ट नहीं डाल सकता.
RotaryIME, रोटरी IME का एक डेमो है. यह बुनियादी है, लेकिन ऊपर बताए गए IME स्विचिंग को आज़माने के लिए यह काफ़ी है. RotaryIME का सोर्स कोड, packages/apps/Car/tests/RotaryIME/ में मौजूद है.
स्क्रीन से बाहर नज करना
डिफ़ॉल्ट रूप से, जब कोई उपयोगकर्ता स्क्रीन के किनारे से बाहर नज करने की कोशिश करता है, तो कुछ नहीं होता. ओईएम, इन चीज़ों के किसी भी कॉम्बिनेशन को तय करके, चारों दिशाओं में से हर एक के लिए यह कॉन्फ़िगर कर सकता है कि क्या होना चाहिए:
AccessibilityServiceसे तय की गई कोई ग्लोबल कार्रवाई. उदाहरण के लिए,GLOBAL_ACTION_BACK.- कोई की कोड, जैसे कि
KEYCODE_BACK. - किसी गतिविधि को लॉन्च करने का इंटेंट, जिसे यूआरएल के तौर पर दिखाया गया है.
(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: यह बूलियन वैल्यू तय करती है कि हेड्स-अप नोटिफ़िकेशन, स्क्रीन पर सबसे ऊपर दिखाए जाने चाहिए या सबसे नीचे. इसकी वैल्यू,config_showHeadsUpNotificationOnBottomबूलियन रिसॉर्स की वैल्यू के बराबर होनी चाहिएframeworks/base/packages/CarSystemUI/res/values/config.xml - (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: यह इंटिजर वैल्यू तय करती है कि लॉन्ग-प्रेस को ट्रिगर करने के लिए, सेंटर बटन को कितने मिलीसेकंड तक दबाकर रखना होगा. शून्य का मतलब है कि लॉन्ग-प्रेस के लिए, सिस्टम के डिफ़ॉल्ट टाइमआउट का इस्तेमाल किया जाना चाहिए. यह डिफ़ॉल्ट वैल्यू है.