實作夜燈

研究顯示,螢幕的藍光可能對 睡眠。Android 7.1.1 導入了「夜燈」功能, 裝置螢幕所發出的藍光數量,以配合自然環境 顯示使用者的時段和位置。Android 8.0 導入了 可讓使用者進一步控制夜燈效果的強度。 Android 10 導入了 COLOR_DISPLAY_SERVICE 系統服務 (採用系統 API) 讓系統、設定和系統 UI 進一步控制所有顏色 包括 Night Light。

夜燈功能需要 硬體 Composer HAL 2.0 (HWC 2) 實作,可套用傳入的矩陣 setColorTransform,以在不影響電源的情況下進行色調, 應用程式的效能和應用程式相容性

實作

裝置製造商可透過下列方式啟用該功能的預設實作方式 使用您在 GCP 控制台中 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>

程式碼分為架構、系統服務、系統 UI 和設定。 核心功能是由 ColorDisplayManager 控管 (由 ColorDisplayService)。

裝置製造商應根據 裝置的顯示面板,包括白色點、色調和所需顏色。您可以變更 色彩漸層,而無需變更基本實作。 紅色、綠色、藍色 格式為 vres = vat2 + vbt + vy-int 其中 t 代表輸入的溫度輸入值 (以克耳文表示), config_nightDisplayColorTemperatureMinconfig_nightDisplayColorTemperatureMax (如上所述) 前一節),而 va、vb 和 vy-int 為 指定主線曲線分別的係數、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>

UI 功能

由於夜燈是面向使用者的功能,因此使用者必須能夠控制 基礎架構Android 開放原始碼已完全實作相關設定 專案 (AOSP) 套件/應用程式/設定 可供裝置製造商參照設定專案 。實作者必須處理 Settings.ACTION_NIGHT_DISPLAY_SETTINGS 揭露這項設定的意圖。

設定

夜燈設定需依序輕觸「設定」圖示 >顯示 >夜晚 淺色。使用者可藉此瞭解夜燈功能、設定時間表 開啟或關閉該設定

  • 自動開啟
    • 永不:夜燈功能一律不會自動開啟, 必須透過手動「開啟 / 關閉」切換鈕來啟用。
    • 自訂時間表:夜燈會在指定時間開啟 開始時間 [預設值:晚上 10 點 30 分],並在特定時間關閉 結束時間 [預設:6:30 a.m.]。
    • 日落到日出:夜燈會在日落和關閉時開啟 日出時日出和日落的時間取決於裝置所在位置 以及一年中的時節
  • 開啟 / 關閉:切換可控制夜間狀態的切換鈕 淺色。這個狀態會遵循現有的自動規則。舉例來說 燈已在下午 5 點 30 分開啟,(在自動規則啟用前 晚上 10:30)夜燈功能仍會在早上 6:30 關閉;如果夜間關閉 燈已在早上 5 點 30 分關閉 (在上午 6 點 30 分之前關閉), 它仍會在晚上 10:30 開啟。
  • 強度: 跳轉滑桿 透過滑動從暖色調控制色調你可以使用跳轉滑桿 會在未啟動夜燈時停用。
  • 資訊文字:讓使用者清楚瞭解 Night Light 的功能 並說明原因。

設定條件式

開啟夜燈時,這項設定會顯示在「設定」的頂端。

快速設定方塊

「快速設定」方塊的運作方式與開啟 / 關閉相同 開啟「設定」>顯示 >夜燈功能