وضع الاستعداد للتلفزيون

في 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 )، بما في ذلك على سبيل المثال لا الحصر:

  • التفاعل مع الشاشة التي تعمل باللمس
  • الضغط على زرّ على الجهاز
  • إدخال أحداث من ملحق خارجي (على سبيل المثال، لوحة مفاتيح متصلة أو جهاز تحكّم عن بُعد بالبلوتوث أو جهاز تحكّم عن بُعد بالأشعة تحت الحمراء)
  • التفاعل الصوتي
  • تلقي رسائل معينة عبر HDMI CEC، مثل One Touch Play
  • بدء جلسة بث جديدة

التخصيص

إذا تم تفعيل الميزة، يعرض الجهاز تحذيرًا على الشاشة بعد فترة زمنية محددة من عدم نشاط المستخدم. في حال عدم اتّخاذ أي إجراء، يتم إيقاف الشاشة. ويمكنك تخصيص الميزة باستخدام خيارات الضبط هذه.

ضبط المهلة

لضبط المهلة، عدِّل العنصر التالي في frameworks/base/core/res/res/values/config.xml:

  • config_attentiveTimeout
    • تحدِّد هذه السمة الوقت التلقائي بالملي ثانية الذي لا يُدخل المستخدم خلاله أي بيانات ويتم بعدها إطفاء الشاشة (حتى إذا كانت أدوات قفل تنشيط الشاشة مثبَّتة).
    • يتم ضبطها في وقت التصميم.
    • إذا كانت القيمة تتراوح بين 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

يمكن تغيير عمليات ضبط وقت الإصدار والموارد من خلال تراكبات الموارد.

التنفيذ

فعِّل الميزة باتّباع الخطوات التالية:

  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. تأكَّد من أنّ stay_on_while_plugged_in إعداد المطوّر غير مفعَّل إذا أبلغ HAL عن حالة الجهاز بأنّه يحتوي على بطارية (battery_present هو true)، لأنّ ذلك قد يمنع الميزة من إطفاء الشاشة.
    adb shell settings put global stay_on_while_plugged_in 0

  2. يمكنك ضبط مهلة السكون قبل النوم لتصبح أكثر من مدة مربّع حوار التحذير بضع ثوانٍ.
    adb shell settings put secure attentive_timeout 32000
  3. ابدأ تشغيل فيديو (للحصول على قفل تنشيط الشاشة).
  4. تحقق من ظهور مربع حوار التحذير بشأن السكون بعد بضع ثوانٍ.
  5. تأكَّد من أنّ الشاشة تتوقف عن العمل بعد انتهاء المهلة المحدّدة.