Tryb czuwania telewizora

W Androidzie 11 funkcja nieuważnego uśpienia to funkcja oszczędzania energii, która umożliwia ustawienie limitu czasu nieaktywności użytkownika, po którym ekran wyłącza się nawet wtedy, gdy widoczne są okna z FLAG_KEEP_SCREEN_ON lub gdy są włączone blokady uśpienia na poziomie FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK lub SCREEN_DIM_WAKE_LOCK. Ta funkcja nie ma wpływu na blokady wybudzania na poziomie PARTIAL_WAKE_LOCK. Krótko przed upływem limitu czasu może się pojawić komunikat ostrzegający użytkownika, że urządzenie przejdzie w stan uśpienia, jeśli nie będzie z niego korzystać.

W tym kontekście aktywność użytkownika odnosi się do wszystkiego, co wywołuje 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
  • zdarzenia wejściowe z zewnętrznego akcesorium (np. podłączonej klawiatury, pilota Bluetooth lub pilota na podczerwień);
  • Interakcja głosowa
  • Odbieranie niektórych wiadomości HDMI CEC, np. One Touch Play
  • Rozpoczynanie nowej sesji przesyłania

Dostosowywanie

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

Konfigurowanie czasu oczekiwania

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

  • config_attentiveTimeout
    • Określa domyślny czas nieaktywności użytkownika w milisekundach, po którym ekran ma być wyłączany (nawet jeśli są włączone blokady wybudzania ekranu).
    • Ustawiane w czasie kompilacji.
    • Jeśli wartość mieści się w zakresie od 0 do config_minimumScreenOffTimeout, czas oczekiwania jest ustawiany na config_minimumScreenOffTimeout, aby zapobiec wyłączeniu ekranu urządzenia krótko po jego wybudzeniu.
    • Wartość domyślna to -1, co 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 nieuważnego snu ustawiony przez config_attentiveTimeout.
    • Można go ustawić w czasie działania.

Konfigurowanie czasu, po którym ma się pojawić ostrzeżenie

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

  • config_attentiveWarningDuration
    • Jak długo ma się wyświetlać komunikat ostrzegawczy przed wyłączeniem ekranu po dłuższym okresie nieaktywności użytkownika.
    • Wartość powinna być znacznie niższa niż ustawiony limit czasu nieuważnego snu, w przeciwnym razie okno dialogowe ostrzeżenia będzie się wyświetlać nieustannie i nie będzie można go zamknąć.
    • Domyślnie: 30000 (30 s).

Wyświetlanie preferencji dotyczących limitu czasu w ustawieniach telewizora

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

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

Zasoby interfejsu ostrzeżenia

  • Układ okna z ostrzeżeniem jest zdefiniowany w frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml.
  • Poniższe ciągi znaków dla okna są zdefiniowane w plikach 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.

Implementacja

Włącz tę funkcję, wykonując te czynności.

  1. Zastąp domyślny config_attentiveTimeout.
  2. Jeśli używasz TvSettings AOSP:
    • Wyłącz tę funkcję w ustawieniach, zastępując config_show_standby_timeout.
    • Wprowadź własne ustawienia, które określają Settings.Secure.ATTENTIVE_TIMEOUT.

Weryfikacja

Testy CTS dla tej funkcji znajdują się w lokalizacji 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 ostrzeżenia.
  • packages/apps/TvSettings zawiera przykład sposobu udostępniania tej funkcji w ustawieniach.

Przykład ręcznego przypadku testowego

  1. Upewnij się, że ustawienie stay_on_while_plugged_in dla programistów jest wyłączone, jeśli interfejs HAL stanu urządzenia zgłasza, że urządzenie ma baterię (battery_present to 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 czas oczekiwania na brak uwagi podczas snu o kilka sekund dłuższy niż czas trwania okna ostrzegawczego.
    adb shell settings put secure attentive_timeout 32000
  3. Rozpocznij odtwarzanie filmu (aby uzyskać blokadę wybudzania ekranu).
  4. Sprawdź, czy po kilku sekundach pojawi się okno z ostrzeżeniem o śnie.
  5. Sprawdź, czy ekran wyłącza się po upływie ustawionego czasu.