टीवी का स्टैंडबाय मोड

Android 11 में, इनैटेंटिव स्लीप, बैटरी बचाने वाली सुविधा है. इसकी मदद से, उपयोगकर्ता की गतिविधि न होने पर स्क्रीन बंद होने का समय सेट किया जा सकता है. इसके बाद, स्क्रीन बंद हो जाती है. भले ही, FLAG_KEEP_SCREEN_ON वाली विंडो दिख रही हों या FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK या SCREEN_DIM_WAKE_LOCK लेवल के वेकलॉक होल्ड किए गए हों. PARTIAL_WAKE_LOCK लेवल वाले वेकलॉक पर इस सुविधा का कोई असर नहीं पड़ता. टाइम आउट होने से कुछ समय पहले, एक मैसेज दिखाया जा सकता है. इसमें उपयोगकर्ता को चेतावनी दी जाती है कि अगर वह डिवाइस के साथ इंटरैक्ट नहीं करता है, तो डिवाइस स्लीप मोड में चला जाएगा.

इस संदर्भ में, उपयोगकर्ता गतिविधि का मतलब ऐसी किसी भी गतिविधि से है जो PowerManager#userActivity को कॉल ट्रिगर करती है (इसमें USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS फ़्लैग शामिल नहीं होता). इसमें ये शामिल हैं, लेकिन इनके अलावा और भी चीज़ें शामिल हो सकती हैं:

  • टचस्क्रीन के साथ इंटरैक्ट करना
  • फ़िज़िकल बटन दबाने पर
  • बाहरी ऐक्सेसरी से मिले इनपुट इवेंट (जैसे, कनेक्ट किया गया कीबोर्ड, ब्लूटूथ रिमोट, आईआर रिमोट)
  • वॉइस इंटरैक्शन
  • एचडीएमआई सीईसी के कुछ मैसेज पाना, जैसे कि एक बार में चालू होने की सुविधा
  • कास्ट करने का नया सेशन शुरू करना

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

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

टाइम आउट कॉन्फ़िगर करना

टाइमआउट को कॉन्फ़िगर करने के लिए, frameworks/base/core/res/res/values/config.xml में मौजूद इस एलिमेंट को अपडेट करें:

  • config_attentiveTimeout
    • इस विकल्प से, उपयोगकर्ता की गतिविधि न होने पर स्क्रीन बंद होने का डिफ़ॉल्ट समय तय किया जाता है. यह समय मिलीसेकंड में होता है. भले ही, स्क्रीन वेकलॉक चालू हों.
    • इसे बिल्ड प्रोसेस के दौरान सेट किया जाता है.
    • अगर वैल्यू 0 और config_minimumScreenOffTimeout के बीच है, तो टाइम आउट को config_minimumScreenOffTimeout पर सेट किया जाता है. इससे डिवाइस की स्क्रीन, चालू होने के तुरंत बाद बंद नहीं होती.
    • डिफ़ॉल्ट: -1. इससे यह सुविधा बंद हो जाती है.

डिफ़ॉल्ट टाइम आउट को बदलना

डिफ़ॉल्ट टाइमआउट सेटिंग को बदलने के लिए, इस एलिमेंट को अपडेट करें.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • इस विकल्प को सेट करने पर, config_attentiveTimeout की ओर से सेट किए गए, नींद में होने पर डिवाइस बंद होने के डिफ़ॉल्ट टाइमआउट को बदल दिया जाता है.
    • इसे रनटाइम पर सेट किया जा सकता है.

चेतावनी दिखने से पहले की अवधि कॉन्फ़िगर करना

अवधि कॉन्फ़िगर करने के लिए, frameworks/base/core/res/res/values/config.xml में मौजूद इस एलिमेंट को अपडेट करें:

  • config_attentiveWarningDuration
    • उपयोगकर्ता की लंबे समय तक निष्क्रियता के बाद, स्क्रीन बंद होने से पहले उसे चेतावनी का मैसेज कितने समय तक दिखाना है.
    • यह वैल्यू, डिवाइस के कुछ समय से इस्तेमाल में न होने पर स्लीप मोड में जाने के लिए सेट किए गए टाइम आउट से काफ़ी कम होनी चाहिए. ऐसा न होने पर, चेतावनी वाला डायलॉग लगातार दिखता रहेगा और उसे खारिज नहीं किया जा सकेगा.
    • डिफ़ॉल्ट: 30000 (30 सेकंड).

TvSettings में टाइम आउट की सेटिंग दिखाना

टाइम आउट की सेटिंग दिखाने के लिए, packages/apps/TvSettings/Settings/res/values/config.xml में मौजूद इस एलिमेंट को अपडेट करें:

  • config_show_standby_timeout
    • यह तय करें कि मीडिया चलाने के दौरान स्क्रीन बंद करने की अनुमति देने के लिए, प्राथमिकता वाला आइटम दिखाना है या नहीं.
    • डिफ़ॉल्ट: false.

चेतावनी वाले यूज़र इंटरफ़ेस के लिए संसाधन

  • चेतावनी वाले डायलॉग बॉक्स का लेआउट, frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml में तय किया गया है.
  • डायलॉग के लिए यहां दी गई स्ट्रिंग, frameworks/base/packages/SystemUI/res/values/strings.xml और frameworks/base/packages/SystemUI/res-product/values/strings.xml में तय की गई हैं.
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

संसाधन ओवरले की मदद से, बिल्ड टाइम कॉन्फ़िगरेशन और संसाधनों में बदलाव किया जा सकता है.

लागू करना

इस सुविधा को चालू करने के लिए, यहां दिया गया तरीका अपनाएं.

  1. डिफ़ॉल्ट config_attentiveTimeout को बदलें.
  2. अगर AOSP TvSettings का इस्तेमाल किया जा रहा है, तो:
    • सेटिंग में जाकर, config_show_standby_timeout को बदलकर इस सुविधा को बंद करें.
    • अपनी सेटिंग लागू करें, जो Settings.Secure.ATTENTIVE_TIMEOUT सेट करती हैं.

सत्यापन

इस सुविधा के लिए, सीटीएस टेस्ट cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java पर उपलब्ध हैं.

उदाहरण और सोर्स

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java में, चेतावनी के डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) को लागू करने की सुविधा होती है.
  • packages/apps/TvSettings में, सेटिंग में सुविधा को दिखाने का तरीका बताया गया है.

मैन्युअल टेस्ट केस का उदाहरण

  1. अगर डिवाइस का हेल्थ HAL यह रिपोर्ट करता है कि डिवाइस में बैटरी है (battery_present true है), तो पक्का करें कि stay_on_while_plugged_in डेवलपर सेटिंग बंद हो. ऐसा इसलिए, क्योंकि इससे स्क्रीन बंद करने की सुविधा काम नहीं कर सकती है.
    adb shell settings put global stay_on_while_plugged_in 0

  2. नींद में होने पर, डिवाइस के बंद होने का समय, चेतावनी वाले डायलॉग बॉक्स की अवधि से कुछ सेकंड ज़्यादा पर सेट करें.
    adb shell settings put secure attentive_timeout 32000
  3. वीडियो चलाना शुरू करें, ताकि स्क्रीन वेकलॉक मिल सके.
  4. पुष्टि करें कि नींद से जुड़ी चेतावनी वाला डायलॉग कुछ सेकंड बाद दिखता है.
  5. पुष्टि करें कि सेट किया गया टाइमआउट खत्म होने के बाद, स्क्रीन बंद हो जाती है.