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

في 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
    • المدة التي يتم خلالها عرض رسالة تحذيرية للمستخدم قبل أن يتم إطفاء الشاشة بعد فترة طويلة من عدم نشاط المستخدم
    • يجب أن تكون القيمة أقل بكثير من مهلة السكون في حال عدم الانتباه المحدَّدة، وإلا سيظهر مربع diálogo التحذير باستمرار ولا يمكن إغلاقه.
    • القيمة التلقائية: 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. تأكَّد من أنّ الشاشة يتم إطفاءها بعد انتهاء المهلة المحدّدة.