מצב המתנה בטלוויזיה

ב-Android 11, מצב שינה במקרה של חוסר פעילות הוא תכונה לחיסכון באנרגיה שמאפשרת להגדיר זמן קצוב לתפוגה של חוסר פעילות של משתמשים, שאחריו המסך נכבה, גם אם חלונות עם FLAG_KEEP_SCREEN_ON גלויים או אם מוחזקות חסימות מצב שינה ברמה FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK או SCREEN_DIM_WAKE_LOCK. התכונה הזו לא משפיעה על נעילות השכמה ברמה PARTIAL_WAKE_LOCK. זמן קצר לפני שזמן קצוב לתפוגה מסתיים, אפשר להציג הודעה שמזהירה את המשתמש שהמכשיר יעבור למצב שינה אם הוא לא יבצע פעולות במכשיר.

בהקשר הזה, פעילות משתמש מתייחסת לכל דבר שמפעיל קריאה ל-PowerManager#userActivity (ללא הדגל USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS), כולל, בין היתר:

  • אינטראקציה עם מסך המגע
  • לחיצה על לחצן פיזי
  • אירועי קלט מאביזר חיצוני (לדוגמה, מקלדת מחוברת, שלט Bluetooth, שלט IR)
  • אינטראקציה קולית
  • קבלת הודעות מסוימות של HDMI CEC, כמו הפעלה בנגיעה אחת
  • התחלת סשן חדש של Cast

התאמה אישית

אם התכונה מופעלת, במכשיר מוצגת אזהרה במסך אחרי פרק זמן מסוים של חוסר פעילות מצד המשתמש. אם לא תתבצע פעולה, המסך יכבה. אפשר להתאים אישית את התכונה באמצעות אפשרויות ההגדרה האלה.

הגדרת הזמן הקצוב לתפוגה

כדי להגדיר את הזמן הקצוב לתפוגה, מעדכנים את הרכיב הבא בקובץ frameworks/base/core/res/res/values/config.xml:

  • config_attentiveTimeout
    • המדיניות הזו קובעת את משך הזמן שמוגדר כברירת מחדל באלפיות שנייה של חוסר פעילות מצד המשתמש, שאחריו המסך מושבת (גם אם יש נעילות מסך).
    • ההגדרה מתבצעת בזמן ה-build.
    • אם הערך הוא בין 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.

מקורות מידע על ממשק המשתמש של האזהרה

  • הפריסה של תיבת הדו-שיח עם האזהרה מוגדרת ב-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

אפשר לשנות את ההגדרות והמשאבים של משך זמן של תהליך build באמצעות שכבות-על של משאבים.

הטמעה

כדי להפעיל את התכונה, משתמשים באפשרויות הבאות.

  1. שינוי ברירת המחדל config_attentiveTimeout.
  2. אם משתמשים ב-AOSP TvSettings:
    • כדי להשבית את התכונה בהגדרות, צריך לבטל את ההגדרה 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 מכיל את הטמעת ברירת המחדל של ממשק המשתמש של האזהרה.
  • בדוגמה הבאה אפשר לראות איך חושפים את התכונה בהגדרות.packages/apps/TvSettings

דוגמה לתרחיש בדיקה ידני

  1. אם המכשיר מדווח על סוללה (battery_present הוא true) באמצעות HAL של תקינות המכשיר, צריך לוודא שהגדרת המפתח stay_on_while_plugged_in מושבתת, כי אחרת יכול להיות שהתכונה לא תכבה את המסך.
    adb shell settings put global stay_on_while_plugged_in 0

  2. מגדירים את משך הזמן הקצוב לתפוגה של שינה לא פעילה כך שיהיה ארוך בכמה שניות ממשך הזמן של תיבת הדו-שיח של האזהרה.
    adb shell settings put secure attentive_timeout 32000
  3. מפעילים סרטון (כדי לקבל נעילת מסך למניעת שינה).
  4. מוודאים שתיבת הדו-שיח עם האזהרה לגבי שינה מופיעה אחרי כמה שניות.
  5. מוודאים שהמסך נכבה אחרי שחלף הזמן הקצוב שהוגדר.