สแตนด์บายทีวี

ใน Android 11 โหมดสลีปเมื่อไม่มีการใช้งานเป็นฟีเจอร์ประหยัดพลังงานที่ช่วยให้คุณตั้งค่าระยะหมดเวลาของผู้ใช้ที่ไม่ได้ใช้งานได้ ซึ่งหลังจากนั้นหน้าจอจะปิดลง แม้ว่าจะมีหน้าต่างที่มี FLAG_KEEP_SCREEN_ON แสดงอยู่หรือมีการใช้ Wake Lock ระดับ FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK หรือ SCREEN_DIM_WAKE_LOCK อยู่ก็ตาม Wakelock ที่มีระดับ PARTIAL_WAKE_LOCK จะไม่ได้รับผลกระทบจากฟีเจอร์นี้ ก่อนที่ระยะหมดเวลาจะหมดอายุไม่นาน ระบบอาจแสดงข้อความเพื่อเตือนผู้ใช้ว่าอุปกรณ์จะเข้าสู่โหมดสลีปถ้าไม่ได้โต้ตอบกับอุปกรณ์

ในบริบทนี้ กิจกรรมของผู้ใช้หมายถึงอะไรก็ตามที่ทริกเกอร์การเรียก PowerManager#userActivity (โดยไม่มี USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS Flag) ซึ่งรวมถึงแต่ไม่จำกัดเพียง

  • การโต้ตอบกับหน้าจอสัมผัส
  • การกดปุ่มบนตัวเครื่อง
  • เหตุการณ์อินพุตจากอุปกรณ์เสริมภายนอก (เช่น แป้นพิมพ์ที่เชื่อมต่อ รีโมตบลูทูธ รีโมต IR)
  • การโต้ตอบด้วยเสียง
  • การรับข้อความ HDMI CEC บางรายการ เช่น One Touch Play
  • เริ่มเซสชันการแคสต์ใหม่

การปรับแต่ง

หากเปิดใช้ฟีเจอร์นี้ อุปกรณ์จะแสดงคำเตือนบนหน้าจอหลังจากไม่มีการใช้งานของผู้ใช้ตามระยะเวลาที่ระบุ หน้าจอจะดับลงหากไม่มีการดำเนินการใดๆ คุณสามารถปรับแต่งฟีเจอร์ได้โดยใช้ตัวเลือกการกำหนดค่า

กำหนดค่าการหมดเวลา

หากต้องการกำหนดค่าระยะหมดเวลา ให้อัปเดตองค์ประกอบต่อไปนี้ใน frameworks/base/core/res/res/values/config.xml

  • config_attentiveTimeout
    • ระบุเวลาเริ่มต้นเป็นมิลลิวินาทีที่ผู้ใช้ไม่มีการใช้งานหลังจากที่หน้าจอปิดไป (แม้ว่าจะมี Wake Lock สำหรับหน้าจออยู่ก็ตาม)
    • ตั้งค่าไว้เมื่อสร้าง
    • หากค่าอยู่ระหว่าง 0 ถึง config_minimumScreenOffTimeout ระบบจะตั้งค่าการหมดเวลาเป็น config_minimumScreenOffTimeout เพื่อไม่ให้อุปกรณ์ปิดหน้าจอหลังจากตื่นขึ้นไม่นาน
    • ค่าเริ่มต้น: -1 ซึ่งปิดใช้ฟีเจอร์นี้

ลบล้างการหมดเวลาเริ่มต้น

หากต้องการลบล้างการตั้งค่าระยะหมดเวลาเริ่มต้น ให้อัปเดตองค์ประกอบต่อไปนี้

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • หากตั้งค่าไว้ ระบบจะลบล้างระยะหมดเวลาการหยุดทำงานเมื่อไม่มีการใช้งานตามค่าเริ่มต้นที่ตั้งค่าโดย config_attentiveTimeout
    • ตั้งค่าได้ในรันไทม์

กำหนดค่าระยะเวลาก่อนที่คำเตือนจะปรากฏ

หากต้องการกำหนดค่าระยะเวลา ให้อัปเดตองค์ประกอบต่อไปนี้ใน frameworks/base/core/res/res/values/config.xml

  • config_attentiveWarningDuration
    • ระยะเวลาในการแสดงข้อความเตือนให้ผู้ใช้เห็นก่อนที่หน้าจอจะปิดลงหลังจากผู้ใช้ไม่มีการใช้งานเป็นเวลานาน
    • ค่านี้ควรอยู่ต่ำกว่าระยะหมดเวลาโดยไม่ได้ตั้งใจที่ตั้งไว้ มิฉะนั้นกล่องโต้ตอบคำเตือนจะแสดงขึ้นอย่างต่อเนื่องและปิดไม่ได้
    • ค่าเริ่มต้น: 30000 (30 วินาที)

แสดงค่ากำหนดการหมดเวลาใน TvSettings

หากต้องการแสดงค่ากำหนดระยะหมดเวลา ให้อัปเดตองค์ประกอบต่อไปนี้ใน packages/apps/TvSettings/Settings/res/values/config.xml

  • config_show_standby_timeout
    • เลือกว่าจะแสดงรายการค่ากำหนดสำหรับการอนุญาตให้ปิดหน้าจอระหว่างการเล่นสื่อหรือไม่
    • ค่าเริ่มต้น: false

แหล่งข้อมูลสําหรับ UI คำเตือน

  • เลย์เอาต์ของกล่องโต้ตอบคําเตือนกําหนดไว้ใน frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
  • สตริงต่อไปนี้สําหรับกล่องโต้ตอบได้รับการกําหนดไว้ใน frameworks/base/packages/SystemUI/res/values/strings.xml และ frameworks/base/packages/SystemUI/res-product/values/strings.xml
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

การกำหนดค่าและทรัพยากรเวลาบิลด์จะเปลี่ยนแปลงได้โดยการวางซ้อนทรัพยากร

การใช้งาน

เปิดใช้ฟีเจอร์โดยใช้ข้อมูลต่อไปนี้

  1. ลบล้าง config_attentiveTimeout เริ่มต้น
  2. หากใช้ AOSP TvSettings ให้ทำดังนี้
    • ปิดใช้ฟีเจอร์ในการตั้งค่าโดย overriding config_show_standby_timeout
    • ใช้การตั้งค่าของคุณเอง ชุดนั้น Settings.Secure.ATTENTIVE_TIMEOUT

การตรวจสอบความถูกต้อง

การทดสอบ CTS สำหรับฟีเจอร์นี้อยู่ที่ cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java

ตัวอย่างและแหล่งที่มา

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java มีการใช้ UI คำเตือนเริ่มต้น
  • packages/apps/TvSettings มีตัวอย่างวิธีแสดงฟีเจอร์นี้ในการตั้งค่า

ตัวอย่าง Test Case ที่ดำเนินการด้วยตนเอง

  1. ตรวจสอบว่าการตั้งค่า stay_on_while_plugged_in สำหรับนักพัฒนาซอฟต์แวร์ปิดอยู่หาก HAL รายงานสถานะการทำงานของอุปกรณ์ว่าอุปกรณ์มีแบตเตอรี่ (battery_present เท่ากับ true) เนื่องจากอาจทำให้ฟีเจอร์ปิดหน้าจอไม่ได้
    adb shell settings put global stay_on_while_plugged_in 0

  2. ตั้งค่าระยะหมดเวลาของโหมดสลีปโดยไม่ได้ตั้งใจให้นานกว่าระยะเวลาในกล่องโต้ตอบคำเตือน 2-3 วินาที
    adb shell settings put secure attentive_timeout 32000
  3. เริ่มเล่นวิดีโอ (เพื่อให้หน้าจอปลุกอยู่)
  4. ตรวจสอบว่ากล่องโต้ตอบคำเตือนการนอนหลับปรากฏขึ้นหลังจากผ่านไป 2-3 วินาที
  5. ตรวจสอบว่าหน้าจอปิดลงหลังจากหมดเวลาที่กำหนด