Tryb gotowości TV

W Androidzie 11 uśpienie bez uwagi to funkcja oszczędzania energii, która pozwala ustawić czas bezczynności użytkownika, po którym ekran się wyłącza, nawet jeśli widoczne są okna z FLAG_KEEP_SCREEN_ON lub blokady uśpienia na poziomieFULL_WAKE_LOCK,SCREEN_BRIGHT_WAKE_LOCK lubSCREEN_DIM_WAKE_LOCK. Ta funkcja nie ma wpływu na blokady wybudzania na poziomie PARTIAL_WAKE_LOCK. Krótko przed upływem czasu oczekiwania może wyświetlić się komunikat z ostrzeżeniem, że urządzenie przejdzie w tryb uśpienia, jeśli nie będzie z nim korzystać.

W tym kontekście aktywność użytkownika oznacza wszystko, co powoduje wywołanie funkcji PowerManager#userActivity (bez flagi USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS), w tym m.in.:

  • Interakcja z ekranem dotykowym
  • naciśnięcie przycisku fizycznego,
  • Wprowadzanie zdarzeń z akcesorium zewnętrznego (np. 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 przesyłania

Dostosowywanie

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

Konfigurowanie limitu czasu

Aby skonfigurować czas oczekiwania, zaktualizuj w frameworks/base/core/res/res/values/config.xml ten element:

  • config_attentiveTimeout
    • Określa domyślny czas w milisekundach, po którym ekran wyłącza się w przypadku braku aktywności użytkownika (nawet jeśli są ustawione blokady aktywacji ekranu).
    • Ustaw w czasie kompilacji.
    • Jeśli wartość należy do zakresu od 0 do config_minimumScreenOffTimeout, limit czasu jest ustawiony na config_minimumScreenOffTimeout. Dzięki temu urządzenie nie wyłączy ekranu tuż po wybudzeniu.
    • 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 ten element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Jeśli jest ustawiony, zastępuje domyślny limit czasu nieaktywnego snu określony przez config_attentiveTimeout.
    • Może być ustawiany w czasie działania.

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

Aby skonfigurować czas trwania, zaktualizuj w frameworks/base/core/res/res/values/config.xml ten element:

  • config_attentiveWarningDuration
    • Czas wyświetlania użytkownikowi komunikatu z ostrzeżeniem przed wyłączeniem ekranu po dłuższej nieaktywności.
    • Wartość powinna być znacznie niższa od ustawionego limitu czasu bezczynności, w przeciwnym razie okno z ostrzeżeniem będzie się wyświetlać stale i nie będzie można go zamknąć.
    • Wartość domyślna: 30000 (30 s).

Wyświetlanie ustawień limitu czasu w ustawieniach TV

Aby wyświetlić ustawienia limitu czasu, zaktualizuj w pliku packages/apps/TvSettings/Settings/res/values/config.xml ten element:

  • config_show_standby_timeout
    • Określa, czy wyświetlać element preferencji umożliwiający wyłączenie ekranu podczas odtwarzania multimediów.
    • Domyślnie: false.

Zasoby interfejsu ostrzegawczego

  • Układ okna ostrzeżenia jest zdefiniowany w frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml.
  • Te ciągi znaków odpowiadające dialogowi w oknie 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 w czasie kompilacji można zmieniać za pomocą nakładek zasobów.

Implementacja

Aby włączyć tę funkcję, wykonaj te czynności.

  1. Zastąp domyślną wartość config_attentiveTimeout.
  2. Jeśli korzystasz z AOSP:TvSettings
    • Wyłącz tę funkcję w ustawieniach, zastępując config_show_standby_timeout.
    • Wprowadź własne ustawienia, które mają być używane w przypadku Settings.Secure.ATTENTIVE_TIMEOUT.

Weryfikacja

Testy CTS dotyczące tej funkcji znajdują się na stronie 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 ostrzegawczego.
  • packages/apps/TvSettings zawiera przykład sposobu wyświetlania funkcji w ustawieniach.

Przykład ręcznego przypadku testowego

  1. Upewnij się, że ustawienie dla deweloperów stay_on_while_plugged_in jest wyłączone, jeśli HAL stanu urządzenia informuje, że urządzenie ma baterię (battery_present to true), ponieważ może to uniemożliwić funkcji wyłączenie ekranu.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Ustaw czas bezczynności w trybie uśpienia na kilka sekund dłuższy niż czas trwania okna z ostrzeżeniem.
    adb shell settings put secure attentive_timeout 32000
  3. Zacznij odtwarzać film (aby włączyć blokadę ekranu).
  4. Sprawdź, czy po kilku sekundach pojawia się okno z ostrzeżeniem dotyczącym snu.
  5. Sprawdź, czy ekran wyłącza się po upływie ustawionego czasu.