Tryb gotowości 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.

Skonfiguruj limit 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ąp domyślny limit 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.

Skonfiguruj czas, 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 być wyświetlany 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).

Pokaż preferencje dotyczące 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 pozwalający na wyłączenie ekranu podczas odtwarzania multimediów.
    • Wartość domyślna: false .

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

  • Układ okna 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 udostępnienia tej funkcji 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 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.