TV-Standby

In Android 11 ist unaufmerksam Schlaf eine Energiesparfunktion , die eine Benutzer Inaktivitätsauszeit erlaubt , nach dem gesetzt wird der Bildschirm schaltet sich aus, auch wenn Fenster mit FLAG_KEEP_SCREEN_ON sichtbar sind oder wakelocks der Ebene FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK oder SCREEN_DIM_WAKE_LOCK gehalten. Wakelocks mit Level PARTIAL_WAKE_LOCK werden 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 geht, wenn er nicht mit dem Gerät interagiert.

In diesem Zusammenhang bezieht sich der Benutzeraktivität auf alles , was einen Anruf auslöst PowerManager#userActivity (ohne USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS Flagge), 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
  • Empfangen bestimmter HDMI-CEC-Nachrichten, wie z. B. One Touch Play
  • Starten einer neuen Besetzungssitzung

Anpassung

Wenn die Funktion aktiviert ist, zeigt das Gerät nach einer bestimmten Zeit der Inaktivität des Benutzers eine Bildschirmwarnung an. Wenn keine Aktion ausgeführt wird, schaltet sich der Bildschirm aus. Sie können die Funktion mit diesen Konfigurationsoptionen anpassen.

Zeitüberschreitung konfigurieren

Um den 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 der Bildschirm ausgeschaltet wird (auch wenn Bildschirm-Wakelocks aktiviert sind).
    • Zur Bauzeit eingestellt.
    • Wenn der Wert zwischen dem , 0 und config_minimumScreenOffTimeout wird der Timeout einzustellen config_minimumScreenOffTimeout das Gerät vor dem Ausschalten der Bildschirm kurz nach dem Aufwachen zu verhindern.
    • Standard: -1 , die diese Funktion deaktiviert.

Überschreiben des Standard-Timeouts

Um die Standardeinstellung für das Zeitlimit zu überschreiben, aktualisieren Sie das folgende Element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Wenn gesetzt, überschreibt den Standard unaufmerksam Schlaf Timeout Satz von config_attentiveTimeout .
    • 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 dem Benutzer eine Warnmeldung angezeigt wird, bevor der Bildschirm nach längerer Inaktivität des Benutzers ausgeschaltet wird.
    • Der Wert sollte deutlich unter dem eingestellten Timeout für unaufmerksamen Schlaf liegen, sonst wird der Warndialog ständig angezeigt und kann nicht geschlossen werden.
    • Standard: 30000 (30).

Anzeigen der Timeout-Einstellungen in TvSettings

Um die Timeout - Einstellungen zu zeigen, 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-UI

  • Das Layout des Warndialogfeld ist in definierten frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml .
  • Die folgenden Zeichenfolgen für den Dialog in definierten frameworks/base/packages/SystemUI/res/values/strings.xml und frameworks/base/packages/SystemUI/res-product/values/strings.xml .
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Die Build-Zeit-Konfigurationen und Ressourcen können durch Ressourcen-Overlays geändert werden.

Implementierung

Aktivieren Sie die Funktion wie folgt.

  1. Überschreiben Sie den Standard config_attentiveTimeout .
  2. Wenn die AOSP mit TvSettings :
    • Deaktivieren Sie die Funktion in den Einstellungen durch zwingende config_show_standby_timeout .
    • Implementieren Sie Ihre eigenen Einstellungen, die festgelegt Settings.Secure.ATTENTIVE_TIMEOUT .

Validierung

Die CTS - Tests für die Funktion sind bei 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 Warnung UI Implementierung Standard.
  • packages/apps/TvSettings liefert ein Beispiel dafür , wie die Funktion in den Einstellungen zu belichten.

Beispiel für einen manuellen Testfall

  1. Stellen Sie sicher , dass die stay_on_while_plugged_in Entwickler Einstellung ausgeschaltet ist , wenn das Gesundheit HAL Berichte des Geräts , dass das Gerät eine Batterie hat ( battery_present ist true ) , da dies die Funktion von einem Abschalten des Bildschirms zu verhindern.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Legen Sie ein Timeout für den unaufmerksamen Ruhezustand so fest, dass es 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. Vergewissern Sie sich, dass das Dialogfeld mit der Schlafwarnung nach einigen Sekunden angezeigt wird.
  5. Stellen Sie sicher, dass sich der Bildschirm nach Ablauf des eingestellten Timeouts ausschaltet.