پیاده‌سازی نور شب

پژوهش‌ها نشان می‌دهد که نور آبی صفحه‌نمایش می‌تواند تأثیر منفی بر خواب داشته باشد. در Android 7.1.1 ویژگی‌ای به‌نام «نور شب» معرفی شد که میزان نور آبی ساطع‌شده از نمایشگر دستگاه را کاهش می‌دهد تا با نور طبیعی زمان روز و مکان کاربر مطابقت بیشتری داشته باشد. در Android 8.0 ویژگی اضافه‌ای معرفی شد که به کاربران امکان می‌دهد کنترل بیشتری روی شدت جلوه «نور شب» داشته باشند. Android 10 سرویس سیستم COLOR_DISPLAY_SERVICE را با سطح میانای برنامه‌سازی کاربردی سیستم معرفی می‌کند تا به سیستم، «تنظیمات»، و «میانای کاربر سیستم» کنترل بیشتری بر همه تبدیل‌های رنگ، ازجمله «نور شب»، بدهد.

«نور شب» به پیاده‌سازی سخت‌افزاری ترکیب‌کننده 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، و عرض از مبدأ برای منحنی اولیه داده‌شده هستند، همان‌طور که در زیر نشان داده شده است.

    <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 (AOSP) packages/apps/Settings وجود دارد که سازندگان دستگاه می‌توانند برای پیاده‌سازی «تنظیمات» خود به آن مراجعه کنند. پیاده‌سازان باید Settings.ACTION_NIGHT_DISPLAY_SETTINGS قصد آشکار کردن این تنظیم را مدیریت کنند.

تنظیمات

تنظیمات «نور شب» در تنظیمات > نمایش > نور شب قرار دارد. از آنجا، کاربران می‌توانند درباره «نور شب» اطلاعات کسب کنند، زمان‌بندی آن را تنظیم کنند، و آن را روشن یا خاموش کنند.

  • روشن کردن خودکار
    • هرگز: «نور شب» هرگز به‌طور خودکار روشن نمی‌شود و باید با کلید روشن / خاموش دستی فعال شود.
    • زمان‌بندی سفارشی: «نور شب» در زمان شروع مشخصی [پیش‌فرض: ۱۰:۳۰ ب.ظ.] روشن می‌شود و در زمان پایان مشخصی [پیش‌فرض: ۶:۳۰ ق.ظ.] خاموش می‌شود.
    • از غروب تا طلوع آفتاب: «نور شب» هنگام غروب آفتاب روشن می‌شود و هنگام طلوع آفتاب خاموش می‌شود. زمان طلوع و غروب آفتاب به مکان دستگاه و زمان سال بستگی دارد.
  • روشن / خاموش: دکمه‌ای که وضعیت فعلی «نور شب» را کنترل می‌کند. این وضعیت از قوانین خودکار موجود پیروی می‌کند. برای مثال، اگر «نور شب» در ساعت ۵:۳۰ بعدازظهر روشن شود (قبل‌از اینکه قانون خودکار آن را در ساعت ۱۰:۳۰ بعدازظهر روشن کند)، «نور شب» همچنان ساعت ۶:۳۰ صبح خاموش خواهد شد. و اگر «نور شب» ساعت ۵:۳۰ صبح (قبل‌از اینکه ساعت ۶:۳۰ صبح خاموش شود) خاموش شود، همچنان ساعت ۱۰:۳۰ شب روشن خواهد شد.
  • شدت: نوار پیمایش که با لغزاندن از گرم به سرد، سطح رنگ را کنترل می‌کند. وقتی «نور شب» فعال نباشد، نوار جستجو می‌تواند غیرفعال شود.
  • نوشتار اطلاعاتی: به کاربر آموزش می‌دهد که «نور شب» چه کاری انجام می‌دهد و چرا.

تنظیمات شرطی

وقتی «نور شب» روشن است، در بالای «تنظیمات» قابل‌مشاهده است.

کاشی «تنظیمات فوری»

کاشی «تنظیمات فوری» دقیقاً مانند کلید روشن / خاموش در تنظیمات > نمایشگر > نور شب عمل می‌کند.