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 aktywacji o poziomie PARTIAL_WAKE_LOCK. Krótko przed upływem czasu oczekiwania może wyświetlić się komunikat z ostrzeżeniem użytkownik, że urządzenie przejdzie w tryb uśpienia, jeśli nie będzie z nim korzystać.

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

  • Interakcja z ekranem dotykowym
  • naciśnięcie przycisku fizycznego.
  • zdarzenia wejściowe z zewnętrznego urządzenia peryferyjnego (np. podłączonej klawiatury, pilota Bluetooth lub pilota podczerwieni);
  • Interakcja głosowa
  • odbieranie określonych komunikatów HDMI CEC, takich jak odtwarzanie za pomocą jednego dotknięcia.
  • Rozpoczynam nową sesję przesyłania

Dostosowywanie

Jeśli ta funkcja jest włączona, na ekranie urządzenia wyświetla się ostrzeżenie po upływie określonego czasu braku aktywności użytkownika. Jeśli nie podejmiesz żadnego działania, ekran się wyłączy. Możesz dostosować tę funkcję za pomocą tych opcji konfiguracji.

Konfigurowanie limitu czasu

Aby skonfigurować limit czasu, zaktualizuj w pliku 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ą zastosowane blokady aktywacji ekranu).
    • Ustaw w momencie kompilacji.
    • Jeśli wartość mieści się w przedziale od 0 do config_minimumScreenOffTimeout, czas oczekiwania jest ustawiany na config_minimumScreenOffTimeout, aby urządzenie nie wyłączało 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 ustawione, zastępuje domyślny limit czasu nieświadomego uśpienia ustawiony przez config_attentiveTimeout
    • Można ustawić w czasie działania.

Skonfiguruj czas wyświetlania ostrzeżenia

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

  • config_attentiveWarningDuration
    • Po jakim czasie ma być wyświetlany komunikat z ostrzeżeniem, zanim ekran wyłączy się przez długi czas braku aktywności użytkowników.
    • Wartość powinna być znacznie poniżej ustawionego czasu oczekiwania w przypadku braku uwagi. W przeciwnym razie pojawia się cały czas i nie można go zamknąć.
    • Wartość domyślna: 30000 (30 s).

Pokaż preferencje czasu oczekiwania 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.

Materiały dotyczące interfejsu ostrzeżenia

  • Układ okna ostrzeżenia jest zdefiniowany w frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
  • Poniższe ciągi tekstowe dialogu są zdefiniowane w plikach frameworks/base/packages/SystemUI/res/values/strings.xmlframeworks/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.

Implementacja

Włącz tę funkcję za pomocą poniższych sposobów.

  1. Zastąp domyślną wartość config_attentiveTimeout.
  2. Jeśli korzystasz z AOSP:TvSettings
    • Wyłącz funkcję w ustawieniach, zastępując ją config_show_standby_timeout.
    • Wdrażanie własnych ustawień z wartością Settings.Secure.ATTENTIVE_TIMEOUT.

Weryfikacja

Trwają testy CTS tej funkcji 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.javazawiera domyślną implementację interfejsu użytkownika ostrzeżenia.
  • packages/apps/TvSettings zawiera przykład sposobu wyświetlania funkcji w ustawieniach.

Przykład testu ręcznego

  1. Jeśli funkcja HAL stanu urządzenia zgłasza, że urządzenie ma baterię (battery_present to true), upewnij się, że ustawienie dla deweloperów stay_on_while_plugged_in jest wyłączone, 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. Rozpocznij odtwarzanie filmu (aby uzyskać blokadę wybudzania ekranu).
  4. Sprawdź, czy po kilku sekundach wyświetli się okno dialogowe z ostrzeżeniem o uśpieniu.
  5. Sprawdź, czy ekran wyłącza się po upływie ustawionego czasu.