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 das Display 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, in der der Nutzer gewarnt wird, 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:

  • Interaktion mit dem Touchscreen
  • Durch Drücken einer physischen Taste
  • Eingabeereignisse von externem Zubehör (z. B. angeschlossene Tastatur, Bluetooth-Fernbedienung, IR-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 keine Aktion ausführen, 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 die Zeitüberschreitung überschreiben möchten, aktualisieren Sie das folgende Element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Wenn festgelegt, wird das Standardzeitlimit für den inaktiven Ruhemodus überschrieben, das mit config_attentiveTimeout festgelegt wurde.
    • 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 wird, 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.
    • Standardeinstellung: 30000 (30 Sekunden)

Zeitlimiteinstellungen in den TV-Einstellungen anzeigen

Wenn Sie die Zeitüberschreitungseinstellungen anzeigen 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 Warndialogfelds 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 dem folgenden Befehl:

  1. Überschreiben Sie den Standardwert config_attentiveTimeout.
  2. Wenn Sie die AOSP-TvSettings verwenden:
    • 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 Standardimplementierung der Warn-UI.
  • 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 eine Batterie 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 das Display zu aktivieren.
  4. Prüfen Sie, ob nach einigen Sekunden das Dialogfeld mit der Ruhemoduswarnung angezeigt wird.
  5. Prüfen Sie, ob das Display nach Ablauf des festgelegten Zeitlimits ausgeschaltet wird.