Tryb czuwania telewizora

W systemie Android 11 nieuważny tryb uśpienia to funkcja oszczędzania energii, która umożliwia ustawienie limitu czasu bezczynności użytkownika, po upływie którego ekran się wyłącza, nawet jeśli widoczne są okna z FLAG_KEEP_SCREEN_ON lub są utrzymywane wakelocki na poziomie FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK lub SCREEN_DIM_WAKE_LOCK . Ta funkcja nie ma wpływu na wakelocki z poziomem PARTIAL_WAKE_LOCK . Krótko przed upływem limitu czasu może zostać wyświetlony komunikat ostrzegający użytkownika, że ​​urządzenie przejdzie w tryb uśpienia, jeśli nie będzie z nim wchodzić w interakcję.

W tym kontekście aktywność użytkownika odnosi się do wszystkiego, co wyzwala wywołanie PowerManager#userActivity (bez flagi USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS ), w tym między innymi:

  • Interakcja z ekranem dotykowym
  • Naciśnięcie fizycznego przycisku
  • Wprowadzanie zdarzeń z akcesorium zewnętrznego (na przykład podłączonej klawiatury, pilota Bluetooth, pilota na podczerwień)
  • Interakcja głosowa
  • Odbieranie niektórych komunikatów HDMI CEC, takich jak One Touch Play
  • Rozpoczynanie nowej sesji obsady

Dostosowywanie

Jeśli ta funkcja jest włączona, urządzenie wyświetla ostrzeżenie na ekranie po określonym czasie braku aktywności użytkownika. Jeśli nie zostaną podjęte żadne działania, ekran wyłączy się. Możesz dostosować tę funkcję, korzystając z tych opcji konfiguracji.

Konfigurowanie limitu czasu

Aby skonfigurować limit czasu, zaktualizuj następujący element w frameworks/base/core/res/res/values/config.xml :

  • config_attentiveTimeout
    • Określa domyślny czas bezczynności użytkownika w milisekundach, po którym ekran się wyłącza (nawet jeśli włączone są blokady ekranu).
    • Ustawiane w czasie kompilacji.
    • Jeśli wartość mieści się w przedziale od 0 do config_minimumScreenOffTimeout , limit czasu jest ustawiany na config_minimumScreenOffTimeout , aby zapobiec wyłączeniu ekranu urządzenia wkrótce po przebudzeniu.
    • Wartość domyślna: -1 , która wyłącza tę funkcję.

Zastępowanie domyślnego limitu czasu

Aby zastąpić domyślne ustawienie limitu czasu, zaktualizuj następujący element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Jeśli jest ustawiony, zastępuje domyślny limit czasu uśpienia nieuważnego ustawiony przez config_attentiveTimeout .
    • Można ustawić w czasie wykonywania.

Konfigurowanie czasu, po którym pojawia się ostrzeżenie

Aby skonfigurować czas trwania, zaktualizuj następujący element w frameworks/base/core/res/res/values/config.xml :

  • config_attentiveWarningDuration
    • Jak długo ma wyświetlać się użytkownikowi komunikat ostrzegawczy, zanim ekran wyłączy się po dłuższej bezczynności użytkownika.
    • Wartość powinna być znacznie niższa od ustawionego limitu czasu uśpienia nieuważnego, w przeciwnym razie okno dialogowe z ostrzeżeniem będzie wyświetlane stale i nie będzie można go zamknąć.
    • Domyślnie: 30000 (30 s).

Wyświetlanie preferencji limitu czasu w TvSettings

Aby wyświetlić preferencje dotyczące limitu czasu, zaktualizuj następujący element w packages/apps/TvSettings/Settings/res/values/config.xml :

  • config_show_standby_timeout
    • Określa, czy wyświetlać element preferencji umożliwiający wyłączanie ekranu podczas odtwarzania multimediów.
    • Wartość domyślna: false .

Zasoby dotyczące interfejsu użytkownika ostrzeżeń

  • Układ okna dialogowego ostrzeżenia jest zdefiniowany w frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml .
  • Następujące ciągi dialogowe są zdefiniowane w frameworks/base/packages/SystemUI/res/values/strings.xml i frameworks/base/packages/SystemUI/res-product/values/strings.xml .
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Konfiguracje i zasoby czasu kompilacji można zmieniać za pomocą nakładek zasobów.

Realizacja

Włącz tę funkcję, korzystając z poniższych instrukcji.

  1. Zastąp domyślną wartość config_attentiveTimeout .
  2. Jeśli używasz ustawień AOSP TvSettings :
    • Wyłącz tę funkcję w ustawieniach, zastępując config_show_standby_timeout .
    • Zaimplementuj własne ustawienia, które ustawiają Settings.Secure.ATTENTIVE_TIMEOUT .

Walidacja

Testy CTS dla tej funkcji znajdują się w cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java .

Przykłady i źródło

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java zawiera domyślną implementację interfejsu użytkownika z ostrzeżeniami.
  • packages/apps/TvSettings zawiera przykład, jak udostępnić tę funkcję w ustawieniach.

Przykład przypadku testu ręcznego

  1. Upewnij się, że ustawienie programisty stay_on_while_plugged_in jest wyłączone, jeśli stan HAL urządzenia zgłasza, że ​​urządzenie ma baterię ( battery_present ma wartość true ), ponieważ może to uniemożliwić wyłączenie ekranu przez tę funkcję.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Ustaw limit czasu uśpienia nieuważnego na kilka sekund dłuższy niż czas trwania okna dialogowego ostrzeżenia.
    adb shell settings put secure attentive_timeout 32000
  3. Rozpocznij odtwarzanie wideo (aby uzyskać funkcję wakelock ekranu).
  4. Sprawdź, czy po kilku sekundach pojawi się okno dialogowe z ostrzeżeniem o uśpieniu.
  5. Sprawdź, czy ekran wyłączy się po upływie ustawionego limitu czasu.