नाइट लाइट की सुविधा लागू करना

रिसर्च से पता चलता है कि स्क्रीन से निकलने वाली ब्लू लाइट का नींद पर बुरा असर पड़ सकता है. Android 7.1.1 में नाइट लाइट नाम की एक सुविधा जोड़ी गई है. यह सुविधा, डिवाइस के डिसप्ले से निकलने वाली नीली रोशनी को कम करती है, ताकि उपयोगकर्ता के दिन के समय और जगह की प्राकृतिक रोशनी के हिसाब से डिसप्ले की रोशनी को बेहतर बनाया जा सके. Android 8.0 में एक और सुविधा जोड़ी गई है. इसकी मदद से, उपयोगकर्ता रात की रोशनी के असर की तीव्रता को ज़्यादा कंट्रोल कर सकते हैं. Android 10 में COLOR_DISPLAY_SERVICE सिस्टम सेवा को शामिल किया गया है. इसमें सिस्टम एपीआई के प्लैटफ़ॉर्म का इस्तेमाल किया गया है, ताकि सिस्टम, सेटिंग, और सिस्टम यूज़र इंटरफ़ेस को रंग में होने वाले सभी बदलावों पर ज़्यादा कंट्रोल मिल सके. इनमें, नाइट लाइट की सुविधा भी शामिल है.

Night Light की सुविधा के लिए, Hardware Composer HAL 2.0 (HWC 2) लागू करना ज़रूरी है. यह सुविधा, setColorTransform को पास की गई मैट्रिक को लागू करके, डिवाइस की बैटरी, परफ़ॉर्मेंस, और ऐप्लिकेशन के साथ काम करने की क्षमता पर असर डाले बिना, डिसप्ले को टिंट कर सकती है.

लागू करना

डिवाइस बनाने वाली कंपनियां, frameworks/base/core/res/res/values/config.xml में बताए गए इन फ़्लैग का इस्तेमाल करके, इस सुविधा को डिफ़ॉल्ट रूप से लागू कर सकती हैं

 <!-- Control whether Night display is available. This should only be enabled
      on devices with HWC 2 color transform support. -->
 <bool name="config_nightDisplayAvailable">false</bool>
 <!-- Default mode to control how Night display is automatically activated.
      One of the following values (see NightDisplayController.java):
          0 - AUTO_MODE_DISABLED
          1 - AUTO_MODE_CUSTOM
          2 - AUTO_MODE_TWILIGHT
 -->
 <integer name="config_defaultNightDisplayAutoMode">0</integer>
 <!-- Default time when Night display is automatically activated.
      Represented as milliseconds from midnight (e.g. 79200000 == 10pm). -->
 <integer name="config_defaultNightDisplayCustomStartTime">79200000</integer>
 <!-- Default time when Night display is automatically deactivated.
      Represented as milliseconds from midnight (e.g. 21600000 == 6am). -->
 <integer name="config_defaultNightDisplayCustomEndTime">21600000</integer>

 <!-- Minimum color temperature, in Kelvin, supported by Night display. -->
 <integer name="config_nightDisplayColorTemperatureMin">2596</integer>
 <!-- Default color temperature, in Kelvin, to tint the screen when Night display is
      activated. -->
 <integer name="config_nightDisplayColorTemperatureDefault">2850</integer>
 <!-- Maximum color temperature, in Kelvin, supported by Night display. -->
 <integer name="config_nightDisplayColorTemperatureMax">4082</integer>

कोड को फ़्रेमवर्क, सिस्टम सेवाओं, सिस्टम यूज़र इंटरफ़ेस, और सेटिंग में बांटा गया है. मुख्य फ़ंक्शन को ColorDisplayManager कंट्रोल करता है. साथ ही, ColorDisplayService इसका बैकअप लेता है.

डिवाइस बनाने वाली कंपनियों को डिवाइस के डिसप्ले पैनल की विशेषताओं के आधार पर, कलर रेंप को पसंद के मुताबिक बनाना चाहिए. इन विशेषताओं में व्हाइट पॉइंट, गैमट, और पसंदीदा रंग शामिल हैं. कॉन्फ़िगरेशन ओवरले का इस्तेमाल करके, बेस लागू करने के तरीके में बदलाव किए बिना कलर रैंप बदला जा सकता है. इस कॉन्फ़िगरेशन को लाल, हरे, और नीले रंग के लिए, क्वैड्रैटिक समीकरण के तौर पर दिखाया जाता है. यह समीकरण इस तरह होता है: vres = vat2 + vbt + vy-int. यहां t, केल्विन में तापमान का इनपुट है, जो config_nightDisplayColorTemperatureMin और config_nightDisplayColorTemperatureMax के बीच की रेंज में होता है. जैसा कि पिछले सेक्शन में बताया गया है. साथ ही, va, vb, और vy-int, दिए गए प्राइमरी कर्व के लिए, क्रमशः a-कोईफ़िशिएंट, b-कोईफ़िशिएंट, और y-इंटरसेप्ट होते हैं.

    <string-array name="config_nightDisplayColorTemperatureCoefficientsNative">
        <!-- R a-coefficient --> <item>0.0</item>
        <!-- R b-coefficient --> <item>0.0</item>
        <!-- R y-intercept --> <item>1.0</item>
        <!-- G a-coefficient --> <item>-0.00000000962353339</item>
        <!-- G b-coefficient --> <item>0.000153045476</item>
        <!-- G y-intercept --> <item>0.390782778</item>
        <!-- B a-coefficient --> <item>-0.0000000189359041</item>
        <!-- B b-coefficient --> <item>0.000302412211</item>
        <!-- B y-intercept --> <item>-0.198650895</item>
    </string-array>

    <string-array name="config_nightDisplayColorTemperatureCoefficients">
        <!-- R a-coefficient --> <item>0.0</item>
        <!-- R b-coefficient --> <item>0.0</item>
        <!-- R y-intercept --> <item>1.0</item>
        <!-- G a-coefficient --> <item>-0.00000000962353339</item>
        <!-- G b-coefficient --> <item>0.000153045476</item>
        <!-- G y-intercept --> <item>0.390782778</item>
        <!-- B a-coefficient --> <item>-0.0000000189359041</item>
        <!-- B b-coefficient --> <item>0.000302412211</item>
        <!-- B y-intercept --> <item>-0.198650895</item>
    </string-array>

यूज़र इंटरफ़ेस (यूआई) की सुविधाएं

नाइट लाइट की सुविधा, उपयोगकर्ताओं के लिए है. इसलिए, उपयोगकर्ताओं को इसे कंट्रोल करने की सुविधा मिलनी चाहिए. Android Open Source Project (AOSP) के packages/apps/Settings प्रोजेक्ट में, सेटिंग को पूरी तरह से लागू किया गया है. डिवाइस बनाने वाली कंपनियां, सेटिंग को लागू करने के लिए इसका रेफ़रंस ले सकती हैं. इस सेटिंग को दिखाने के लिए, लागू करने वाले लोगों को Settings.ACTION_NIGHT_DISPLAY_SETTINGS इंटेंट मैनेज करना होगा.

सेटिंग

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

  • अपने-आप चालू होना
    • कभी नहीं: नाइट लाइट कभी भी अपने-आप चालू नहीं होगी और इसे मैन्युअल चालू / बंद टॉगल की मदद से चालू करना होगा.
    • पसंद के मुताबिक शेड्यूल: नाइट लाइट, तय किए गए चालू होने के समय [डिफ़ॉल्ट रूप से: रात 10:30 बजे] पर चालू होती है और तय किए गए बंद होने के समय [डिफ़ॉल्ट रूप से: सुबह 6:30 बजे] पर बंद होती है.
    • सूरज डूबने से लेकर सूरज निकलने तक: नाइट लाइट, सूरज डूबने पर चालू हो जाती है और सूरज निकलने पर बंद हो जाती है. सूरज के उगने और डूबने का समय, डिवाइस की जगह और साल के समय पर निर्भर करता है.
  • चालू / बंद: यह टॉगल, नाइट लाइट की मौजूदा स्थिति को कंट्रोल करता है. यह स्थिति, अपने-आप लागू होने वाले मौजूदा नियमों का पालन करती है. उदाहरण के लिए, अगर नाइट लाइट को शाम 5:30 बजे टॉगल किया जाता है (इससे पहले कि ऑटोमैटिक नियम इसे रात 10:30 बजे चालू करे), नाइट लाइट की सुविधा, सुबह 6:30 बजे बंद हो जाएगी. अगर नाइट लाइट की सुविधा को सुबह 5:30 बजे (सुबह 6:30 बजे बंद होने से पहले) बंद किया जाता है, तो भी यह सुविधा रात 10:30 बजे चालू हो जाएगी.
  • इंटेंसिटी: सीक बार की मदद से, वॉर्म से कूल तक स्लाइड करके टिनट लेवल को कंट्रोल किया जा सकता है. नाइट लाइट की सुविधा चालू न होने पर, स्क्रीन पर दिखने वाले वीडियो के हिस्से को आगे-पीछे करने के लिए बने बार को बंद किया जा सकता है.
  • जानकारी देने वाला टेक्स्ट: इससे उपयोगकर्ता को यह पता चलता है कि नाइट लाइट क्या करती है और क्यों.

सेटिंग की शर्त

नाइट लाइट की सुविधा चालू होने पर, सेटिंग में सबसे ऊपर दिखता है.

क्विक सेटिंग टाइल

क्विक सेटिंग टाइल, सेटिंग > डिसप्ले > नाइट लाइट में मौजूद चालू / बंद टॉगल की तरह काम करती है.