TV-Standby

In Android 11 ist der Inaktivmodus eine Energiesparfunktion, mit der ein Zeitlimit für die Inaktivität des Nutzers festgelegt werden kann, nach dem der Bildschirm ausgeschaltet wird, auch wenn Fenster mit FLAG_KEEP_SCREEN_ON sichtbar sind oder Wakelocks der Ebenen FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK oder SCREEN_DIM_WAKE_LOCK aktiv sind. Wakelocks mit dem Level PARTIAL_WAKE_LOCK sind von dieser Funktion nicht betroffen. Kurz vor Ablauf der Zeitüberschreitung kann eine Meldung angezeigt werden, die den Nutzer warnt, dass das Gerät in den Ruhemodus wechselt, wenn er nicht mit dem Gerät interagiert.

In diesem Zusammenhang bezieht sich „Nutzeraktivität“ auf alles, was einen Aufruf von PowerManager#userActivity (ohne das Flag USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS) auslöst. Dazu gehören unter anderem:

  • Mit dem Touchscreen interagieren
  • Durch Drücken einer physischen Taste
  • Ereignisse von externem Zubehör eingeben (z. B. verbundene Tastatur, Bluetooth-Fernbedienung oder Infrarot-Fernbedienung)
  • Sprachinteraktion
  • Empfang bestimmter HDMI-CEC-Nachrichten, z. B. „One Touch Play“
  • Neue Übertragung starten

Personalisierung

Wenn die Funktion aktiviert ist, wird auf dem Gerät nach einer bestimmten Zeit der Nutzerinaktivität eine Warnung angezeigt. Wenn Sie nichts tun, wird das Display ausgeschaltet. Sie können die Funktion mithilfe dieser Konfigurationsoptionen anpassen.

Zeitlimit konfigurieren

Aktualisieren Sie das folgende Element in frameworks/base/core/res/res/values/config.xml, um das Zeitlimit zu konfigurieren:

  • config_attentiveTimeout
    • Gibt die Standardzeit in Millisekunden an, nach der der Bildschirm ausgeschaltet wird, wenn der Nutzer inaktiv ist, auch wenn Wakelocks für den Bildschirm aktiviert sind.
    • Wird zum Zeitpunkt der Erstellung festgelegt.
    • Wenn der Wert zwischen 0 und config_minimumScreenOffTimeout liegt, wird die Zeitüberschreitung auf config_minimumScreenOffTimeout festgelegt, damit das Gerät den Bildschirm nicht kurz nach dem Aufwachen ausschaltet.
    • Standardeinstellung: -1, wodurch diese Funktion deaktiviert wird.

Standardzeitlimit überschreiben

Wenn Sie die Standardeinstellung für das Zeitlimit überschreiben möchten, aktualisieren Sie das folgende Element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Überschreibt das von config_attentiveTimeout festgelegte Standardzeitlimit für den unaufmerksamen Ruhemodus.
    • Kann zur Laufzeit festgelegt werden.

Dauer bis zur Warnung konfigurieren

Aktualisieren Sie das folgende Element in frameworks/base/core/res/res/values/config.xml, um die Dauer zu konfigurieren:

  • config_attentiveWarningDuration
    • Gibt an, wie lange eine Warnung angezeigt werden soll, bevor das Display nach längerer Inaktivität des Nutzers ausgeschaltet wird.
    • Der Wert sollte deutlich unter dem festgelegten Zeitlimit für den Ruhemodus bei fehlender Aufmerksamkeit liegen, da sonst das Warndialogfeld ständig angezeigt wird und nicht geschlossen werden kann.
    • Standard: 30000 (30 Sek.)

Zeitlimiteinstellungen in den TV-Einstellungen anzeigen

Wenn Sie die Zeitüberschreitungseinstellungen anzeigen lassen möchten, aktualisieren Sie das folgende Element in packages/apps/TvSettings/Settings/res/values/config.xml:

  • config_show_standby_timeout
    • Gibt an, ob ein Einstellungselement angezeigt werden soll, mit dem das Display während der Medienwiedergabe ausgeschaltet werden kann.
    • Standard: false.

Ressourcen für die Warnungs-UI

  • Das Layout des Dialogfelds „Warnung“ wird in frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml definiert.
  • Die folgenden Strings für den Dialog sind in frameworks/base/packages/SystemUI/res/values/strings.xml und frameworks/base/packages/SystemUI/res-product/values/strings.xml definiert.
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Die Buildzeitkonfigurationen und -ressourcen können durch Ressourcen-Overlays geändert werden.

Implementierung

Aktivieren Sie die Funktion mit den folgenden Schritten.

  1. Überschreiben Sie den Standardwert config_attentiveTimeout.
  2. Bei Verwendung des AOSP-TvSettings:
    • Deaktivieren Sie die Funktion in den Einstellungen, indem Sie config_show_standby_timeout überschreiben.
    • Implementieren Sie eigene Einstellungen, die Settings.Secure.ATTENTIVE_TIMEOUT festlegen.

Zertifizierungsstufe

Die CTS-Tests für die Funktion finden Sie unter cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java.

Beispiele und Quelle

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java enthält die UI-Standardimplementierung mit Warnungen.
  • packages/apps/TvSettings zeigt ein Beispiel dafür, wie die Funktion in den Einstellungen angezeigt wird.

Beispiel für einen manuellen Testfall

  1. Die Entwicklereinstellung stay_on_while_plugged_in muss deaktiviert sein, wenn die HAL für den Gerätestatus meldet, dass das Gerät einen Akku hat (battery_present ist true), da die Funktion sonst möglicherweise nicht das Display ausschaltet.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Legen Sie für den Inaktivitäts-Ruhemodus ein Zeitlimit fest, das einige Sekunden länger ist als die Dauer des Warndialogfelds.
    adb shell settings put secure attentive_timeout 32000
  3. Starten Sie die Wiedergabe eines Videos, um den Bildschirm zu aktivieren.
  4. Prüfen Sie, ob nach einigen Sekunden das Dialogfeld mit der Ruhemoduswarnung angezeigt wird.
  5. Vergewissere dich, dass sich der Bildschirm nach Ablauf des eingestellten Zeitlimits ausschaltet.