TV-Standby

In Android 11 ist der unaufmerksame Ruhezustand eine Stromsparfunktion, die es ermöglicht, ein Zeitlimit für Benutzerinaktivität festzulegen, nach dem sich der Bildschirm ausschaltet, selbst wenn Fenster mit FLAG_KEEP_SCREEN_ON sichtbar sind oder Wakelocks der Stufen FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK oder SCREEN_DIM_WAKE_LOCK gehalten werden. Wakelocks mit der Stufe PARTIAL_WAKE_LOCK sind von dieser Funktion nicht betroffen. Kurz vor Ablauf des Timeouts kann eine Meldung angezeigt werden, die den Benutzer warnt, dass das Gerät in den Ruhezustand wechselt, wenn er nicht mit dem Gerät interagiert.

In diesem Zusammenhang bezieht sich Benutzeraktivität auf alles, was einen Aufruf von PowerManager#userActivity auslöst (ohne das Flag USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS ), einschließlich, aber nicht beschränkt auf:

  • Interaktion mit dem Touchscreen
  • Drücken einer physischen Taste
  • Eingabeereignisse von einem externen Zubehör (z. B. angeschlossene Tastatur, Bluetooth-Fernbedienung, IR-Fernbedienung)
  • Sprachinteraktion
  • Empfang bestimmter HDMI-CEC-Meldungen, z. B. One Touch Play
  • Beginn einer neuen Besetzungssitzung

Anpassung

Wenn die Funktion aktiviert ist, zeigt das Gerät nach einer bestimmten Zeit der Benutzerinaktivität eine Bildschirmwarnung an. Wenn keine Aktion ausgeführt wird, wird der Bildschirm ausgeschaltet. Sie können die Funktion mithilfe dieser Konfigurationsoptionen anpassen.

Konfigurieren des Timeouts

Um das Timeout zu konfigurieren, aktualisieren Sie das folgende Element in frameworks/base/core/res/res/values/config.xml “:

  • config_attentiveTimeout
    • Gibt die Standardzeit in Millisekunden der Benutzerinaktivität an, nach der sich der Bildschirm ausschaltet (auch wenn Bildschirm-Wakelocks vorhanden sind).
    • Zur Erstellungszeit festlegen.
    • Wenn der Wert zwischen 0 und config_minimumScreenOffTimeout liegt, wird das Timeout auf config_minimumScreenOffTimeout gesetzt, um zu verhindern, dass das Gerät seinen Bildschirm kurz nach dem Aufwachen ausschaltet.
    • Standard: -1 , wodurch diese Funktion deaktiviert wird.

Überschreiben des Standard-Timeouts

Um die Standard-Timeout-Einstellung zu überschreiben, aktualisieren Sie das folgende Element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Wenn festgelegt, wird das von config_attentiveTimeout festgelegte Standard-Timeout für unaufmerksamen Ruhezustand außer Kraft gesetzt.
    • Kann zur Laufzeit eingestellt werden.

Konfigurieren der Dauer, bevor eine Warnung angezeigt wird

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

  • config_attentiveWarningDuration
    • Wie lange dauert es, bis dem Benutzer eine Warnmeldung angezeigt wird, bevor sich der Bildschirm nach längerer Inaktivität des Benutzers ausschaltet?
    • Der Wert sollte deutlich unter dem eingestellten Timeout für unaufmerksamen Ruhezustand liegen, andernfalls wird der Warndialog ständig angezeigt und kann nicht geschlossen werden.
    • Standard: 30000 (30s).

Zeigt die Timeout-Einstellungen in TvSettings an

Um die Timeout-Einstellungen anzuzeigen, aktualisieren Sie das folgende Element in packages/apps/TvSettings/Settings/res/values/config.xml :

  • config_show_standby_timeout
    • Ob ein Einstellungselement angezeigt werden soll, um das Ausschalten des Bildschirms während der Medienwiedergabe zu ermöglichen.
    • Standard: false .

Ressourcen für die Warn-Benutzeroberfläche

  • Das Layout des Warndialogs ist in frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml definiert.
  • Die folgenden Zeichenfolgen 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 Build-Zeitkonfigurationen und Ressourcen können durch Ressourcen-Overlays geändert werden.

Implementierung

Aktivieren Sie die Funktion wie folgt.

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

Validierung

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 bietet ein Beispiel dafür, wie die Funktion in den Einstellungen verfügbar gemacht wird.

Beispiel für einen manuellen Testfall

  1. Stellen Sie sicher, dass die Entwicklereinstellung stay_on_while_plugged_in deaktiviert ist, wenn die Gesundheits-HAL des Geräts meldet, dass das Gerät über einen Akku verfügt ( battery_present ist true ), da dies die Funktion möglicherweise daran hindert, den Bildschirm auszuschalten.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Legen Sie eine Zeitüberschreitung für den unaufmerksamen Ruhezustand fest, die einige Sekunden länger ist als die Dauer des Warndialogs.
    adb shell settings put secure attentive_timeout 32000
  3. Starten Sie die Wiedergabe eines Videos (um einen Bildschirm-Wakelock zu erhalten).
  4. Stellen Sie sicher, dass nach einigen Sekunden das Dialogfeld „Schlafwarnung“ angezeigt wird.
  5. Stellen Sie sicher, dass sich der Bildschirm nach Ablauf der eingestellten Zeitüberschreitung ausschaltet.