Chế độ chờ của TV

Trong Android 11, chế độ ngủ khi không chú ý là một tính năng tiết kiệm pin cho phép đặt thời gian chờ không hoạt động của người dùng, sau đó màn hình sẽ tắt, ngay cả khi các cửa sổ có FLAG_KEEP_SCREEN_ON hiển thị hoặc các khoá đánh thức ở cấp FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK hoặc SCREEN_DIM_WAKE_LOCK được giữ. Tính năng này không ảnh hưởng đến các wakelock có cấp độ PARTIAL_WAKE_LOCK. Ngay trước khi hết thời gian chờ, một thông báo có thể xuất hiện để cảnh báo người dùng rằng thiết bị sẽ chuyển sang chế độ ngủ nếu họ không tương tác với thiết bị.

Trong bối cảnh này, hoạt động của người dùng đề cập đến mọi hoạt động kích hoạt lệnh gọi đến PowerManager#userActivity (không có cờ USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS), bao gồm nhưng không giới hạn ở:

  • Tương tác với màn hình cảm ứng
  • Nhấn một nút vật lý
  • Sự kiện đầu vào từ một phụ kiện bên ngoài (ví dụ: bàn phím đã kết nối, điều khiển từ xa qua Bluetooth, điều khiển từ xa qua hồng ngoại)
  • Tương tác bằng giọng nói
  • Nhận một số thông báo HDMI CEC, chẳng hạn như One Touch Play
  • Bắt đầu một phiên truyền mới

Tuỳ chỉnh

Nếu tính năng này được bật, thiết bị sẽ hiển thị cảnh báo trên màn hình sau một khoảng thời gian không hoạt động nhất định của người dùng. Nếu bạn không làm gì, màn hình sẽ tắt. Bạn có thể tuỳ chỉnh tính năng này bằng các lựa chọn cấu hình sau.

Định cấu hình thời gian chờ

Để định cấu hình thời gian chờ, hãy cập nhật phần tử sau trong frameworks/base/core/res/res/values/config.xml:

  • config_attentiveTimeout
    • Chỉ định thời gian mặc định (tính bằng mili giây) kể từ khi người dùng không hoạt động cho đến thời điểm màn hình tắt (ngay cả khi có khoá đánh thức màn hình).
    • Đặt tại thời điểm tạo bản dựng.
    • Nếu giá trị nằm trong khoảng từ 0 đến config_minimumScreenOffTimeout, thì thời gian chờ sẽ được đặt thành config_minimumScreenOffTimeout để ngăn thiết bị tắt màn hình ngay sau khi thức.
    • Mặc định: -1, vô hiệu hoá tính năng này.

Ghi đè thời gian chờ mặc định

Để ghi đè chế độ cài đặt thời gian chờ mặc định, hãy cập nhật phần tử sau.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Nếu được đặt, tham số này sẽ ghi đè thời gian chờ mặc định ở chế độ ngủ khi không hoạt động do config_attentiveTimeout đặt.
    • Có thể được đặt trong thời gian chạy.

Định cấu hình khoảng thời gian trước khi cảnh báo xuất hiện

Để định cấu hình thời lượng, hãy cập nhật phần tử sau trong frameworks/base/core/res/res/values/config.xml:

  • config_attentiveWarningDuration
    • Khoảng thời gian hiển thị thông báo cảnh báo cho người dùng trước khi màn hình tắt sau khi người dùng không hoạt động trong thời gian dài.
    • Giá trị này phải thấp hơn nhiều so với thời gian chờ chuyển sang trạng thái ngủ khi không chú ý đã đặt, nếu không hộp thoại cảnh báo sẽ liên tục xuất hiện và không thể đóng.
    • Mặc định: 30000 (30 giây).

Hiện các lựa chọn ưu tiên về thời gian chờ trong TvSettings

Để hiện các lựa chọn ưu tiên về thời gian chờ, hãy cập nhật phần tử sau trong packages/apps/TvSettings/Settings/res/values/config.xml:

  • config_show_standby_timeout
    • Liệu có hiện một mục lựa chọn ưu tiên để cho phép tắt màn hình trong khi phát nội dung nghe nhìn hay không.
    • Mặc định: false.

Tài nguyên cho giao diện người dùng cảnh báo

  • Bố cục của hộp thoại cảnh báo được xác định trong frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml.
  • Các chuỗi sau đây cho hộp thoại được xác định trong frameworks/base/packages/SystemUI/res/values/strings.xmlframeworks/base/packages/SystemUI/res-product/values/strings.xml.
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Bạn có thể thay đổi các cấu hình và tài nguyên trong thời gian tạo bằng lớp phủ tài nguyên.

Triển khai

Bật tính năng này bằng cách làm như sau.

  1. Ghi đè config_attentiveTimeout mặc định.
  2. Nếu bạn đang sử dụng TvSettings AOSP:
    • Tắt tính năng này trong phần cài đặt bằng cách ghi đè config_show_standby_timeout.
    • Triển khai chế độ cài đặt của riêng bạn để đặt Settings.Secure.ATTENTIVE_TIMEOUT.

Xác nhận kết quả

Các kiểm thử CTS cho tính năng này nằm ở cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java.

Ví dụ và nguồn

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java chứa phương thức triển khai giao diện người dùng cảnh báo mặc định.
  • packages/apps/TvSettings cung cấp một ví dụ về cách hiển thị tính năng này trong phần cài đặt.

Ví dụ về trường hợp kiểm thử thủ công

  1. Đảm bảo rằng chế độ cài đặt nhà phát triển stay_on_while_plugged_in đang tắt nếu HAL sức khoẻ của thiết bị báo cáo rằng thiết bị có pin (battery_presenttrue) vì điều này có thể ngăn tính năng tắt màn hình.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Đặt thời gian chờ ngủ khi không chú ý dài hơn vài giây so với thời lượng của hộp thoại cảnh báo.
    adb shell settings put secure attentive_timeout 32000
  3. Bắt đầu phát video (để có được khoá đánh thức màn hình).
  4. Xác minh rằng hộp thoại cảnh báo về chế độ ngủ xuất hiện sau vài giây.
  5. Xác minh rằng màn hình sẽ tắt sau khi hết thời gian chờ đã đặt.