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

في 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. إذا كنت تستخدم TvSettings في AOSP:
    • أوقِف الميزة في الإعدادات من خلال إلغاء 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. تأكَّد من إيقاف الشاشة بعد انتهاء المهلة المحدّدة.