テレビスタンバイ

Android 11 では、不注意によるスリープは省電力機能であり、 FLAG_KEEP_SCREEN_ONのウィンドウが表示されている場合や、 FULL_WAKE_LOCKSCREEN_BRIGHT_WAKE_LOCKまたはSCREEN_DIM_WAKE_LOCKレベルのウェイクロックが保持されている場合でも、ユーザーの非アクティブ タイムアウトを設定してから画面がオフになるように設定できます。レベルPARTIAL_WAKE_LOCKのウェイクロックは、この機能の影響を受けません。タイムアウトが期限切れになる直前に、ユーザーがデバイスと対話しないとデバイスがスリープ状態になることをユーザーに警告するメッセージが表示されます。

このコンテキストでは、ユーザー アクティビティとは、 PowerManager#userActivity ( USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTSフラグなし) への呼び出しをトリガーするあらゆるものを指します。これには次のものが含まれますが、これらに限定されません。

  • タッチスクリーンの操作
  • 物理ボタンを押す
  • 外部アクセサリからの入力イベント (接続されたキーボード、Bluetooth リモコン、IR リモコンなど)
  • 音声インタラクション
  • One Touch Play などの特定の HDMI CEC メッセージの受信
  • 新しいキャスト セッションの開始

カスタマイズ

この機能が有効になっている場合、ユーザーが非アクティブになってから指定された時間が経過すると、デバイスは画面上に警告を表示します。何も操作しないと、画面がオフになります。これらの構成オプションを使用して機能をカスタマイズできます。

タイムアウトを構成する

タイムアウトを構成するには、 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

警告 UI のリソース

  • 警告ダイアログのレイアウトは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 テストはcts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.javaにあります。

例とソース

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.javaには、デフォルトの警告 UI 実装が含まれています。
  • packages/apps/TvSettings設定で機能を公開する方法の例が示されています。

手動テストケースの例

  1. デバイスの正常性 HAL がデバイスにバッテリーがある ( battery_presenttrue ) と報告する場合は、開発者設定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. 設定されたタイムアウトが経過すると画面がオフになることを確認します。