اقتراحات التدوير

في نظام التشغيل Android 8.0، يمكن للمستخدمين التبديل بين وضعَي "التدوير التلقائي" و"التدوير بالوضع العمودي" باستخدام مربّع "الإعدادات السريعة" أو إعدادات "الشاشة". في الإصدار 9 من Android، عدّلنا وضع التدوير بالوضع العمودي للحد من عمليات التدوير غير المقصودة من خلال تثبيت تدوير الشاشة الحالي حتى إذا تغيّر موضع الجهاز. يمكن للمستخدمين تفعيل العرض على الشاشة بشكل مائل يدويًا عند الحاجة من خلال الضغط على زر جديد في شريط التنقّل. تمت إعادة تسمية الوضع العمودي إلى "قفل التدوير" ويتم تفعيله عندما يكون التدوير التلقائي متوقفًا. ولم يتم إجراء أي تغييرات على وضع التدوير التلقائي.

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

يعمل وضع قفل التدوير من خلال عرض زر في شريط التنقل عند تغيُّر وضع تدوير الجهاز. لتحقيق ذلك، يجب أن يظلّ أداة استشعار الاتجاه في الجهاز نشطًا حتى في حال إيقاف ميزة "التدوير التلقائي". يؤدي النقر على هذا الزر إلى ضبط إعدادات تدوير الشاشة المفضّلة للمستخدم (Settings.System.USER_ROTATION) بشكل فعّال. يستخدم WindowManager هذه الإعدادات المفضّلة، بالإضافة إلى تفاصيل أخرى عن أهم الأنشطة وحالة النظام، لتغيير وضع دوران الشاشة في النظام. يواصل WindowManager استخدام إعدادات التبديل المفضّلة للمستخدم عند تحديد وضع التبديل الذي سيتم عرض النظام به عند الانتقال إلى نشاط آخر.

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

يجب الحفاظ على الإعدادات المفضّلة لدورة المستخدمين عند الانتقال بين الأنشطة. ومع ذلك، بما أنّ معظم مستخدمي الهواتف يريدون استخدام الوضع الأفقي لفترة قصيرة ومؤقتة فقط، أضفنا ميزة الميل إلى الوضع الطبيعي. تتم إعادة ضبط إعدادات اتجاه الشاشة المفضّلة للمستخدم على اتجاه الشاشة الطبيعي للجهاز عندما يتغيّر اتجاه الشاشة في النظام إلى اتجاه الشاشة الطبيعي للجهاز. في معظم الهواتف، يكون الاتجاه الطبيعي للجهاز عموديًا (0º). غالبًا ما تحدث عملية إعادة ضبط إعدادات التفضيل المتعلّقة بالدوران عند استخدام تطبيق مخصّص للوضع العمودي فقط أو قفل الهاتف أو العودة إلى مساحة عمل مشغّل التطبيقات.

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

المصدر

تمت إضافة ميزة الاقتراحات المتعلّقة بالدوران إلى الإصدار Android 9. تتضمّن معظم التغييرات الملفات التالية.

  • services/.../server/policy/PhoneWindowManager.java:
    • أدوات الربط التي تستهلك ناتج WindowOrientationListener (MyOrientationListener، المسؤولة عن مراقبة أجهزة الاستشعار لتحديد ما إذا تم تدوير الجهاز)
    • إبقاء WindowOrientationListener مفعَّلاً حتى في حال إيقاف التدوير التلقائي (راجِع needSensorRunningLp())
    • احتساب دورة النظام استنادًا إلى إعدادات "تبديل المستخدمين" المفضّلة، وأهم إعدادات "نشاط screenOrientation" وحالة النظام (راجِع rotationForOrientationLw())
    • تحديد ما إذا كان بإمكان النشاط العلوي التدوير بزاوية معيّنة (راجِع isRotationChoicePossible())
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • لتحديد ما إذا كان يجب عرض زر شريط التنقل عند التدوير عمليات استدعاء الاقتراحات من PhoneWindowManager (راجِع onRotationProposal())
    • تعالج هذه العناصر حالات إخفاء زر شريط التنقل لتغيير الاتجاه (راجِع طلبات التوجيه إلى setRotateSuggestionButtonState(false)).
    • معالجة مهلات الأزرار، بما في ذلك الحالة الخاصة عندما يكونnavbar مخفيًا (عادةً في وضع ملء الشاشة)
    • إعادة ضبط الإعدادات المفضّلة للمستخدم عند الرجوع إلى اتجاه الجهاز الطبيعي (mRotationWatcher)
    • اختيار النمط المناسب للحركة في زر شريط التنقل، يتم تطبيقه في NavigationBarView (راجِع onRotationProposal())
    • تضيف هذه السمة منطق وضع المقدّمة، بما في ذلك الصور المتحركة المخصّصة (راجِع الإشارات إلى Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED)
    • تنفيذ علامة إيقاف التدوير 2 (راجِع disable())
  • SystemUI/.../statusbar/phone/NavigationBarView.java:
    • رمز متحرك لزر الأنماط لمطابقة عملية التدوير في انتظار المراجعة (راجِع updateRotateSuggestionButtonStyle())
    • تعالج التغييرات في مستوى رؤية الزر (راجِع setRotateButtonVisibility())، بما في ذلك منطق إخفاء زر التدوير في حال كانت بعض خدمات تسهيل الاستخدام مفعّلة (مع مراعاة ترتيب تجميع أزرار شريط التنقّل الأيمن)
  • SystemUI/res/layout/menu_ime.xml:
    • يتضمّن رمزًا جديدًا KeyButtonView لزر التدوير، فوق القائمة واختَر IME/لوحة المفاتيح ولكن تحت زر "تسهيل الاستخدام"
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml:
    • AnimatedVectorDrawable معقّد يُستخدَم لإضافة تأثير متحرك إلى زر شريط التنقل الذي يمكن تدويره
    • يُستخدَم التنسيق (في SystemUI/res/values/styles.xml) لتحديد زوايا البدء والانتهاء للدوران حتى يمكن استخدام العنصر القابل للرسم نفسه لإنشاء صور متحركة مختلفة للدوران في بداية ونهاية التأثير.
    • يتم ضبط درجة لون الرمز من خلال TintedKeyButtonDrawable

التنفيذ

يتضمّن نظام Android 9 جميع التغييرات اللازمة لبدء استخدام ميزة "اقتراحات الوضع العمودي/الأفقي" على الأجهزة التي تستخدم مفاتيح التنقّل البرمجية (رجوع، الصفحة الرئيسية، وما إلى ذلك).

على صانعي الأجهزة الذين ينشئون أجهزة تتضمّن مفاتيح تنقّل بالأجهزة ويرغبون في تنفيذ هذه الميزة تصميم واجهة مستخدم النظام الخاصة بهم وتنفيذها أو إيقاف الميزة. ننصح بأن يكون أي سطح معروض سهل الاستخدام عند تثبيت الجهاز بزاوية 90 درجة أو 180 درجة بالنسبة إلى اتجاه دوران الشاشة في النظام الحالي وأن يكون سهل الوصول إليه. لهذه الأسباب، لا يُنصح باستخدام الإشعارات (كما هو الحال مع أداة اختيار IME/لوحة المفاتيح).

متطلبات الجهاز لاستخدام هذه الميزة هي نفسها متطلبات استخدام ميزة "التدوير التلقائي".

من الضروري للحفاظ على اتساق التنفيذ أن تتم إعادة ضبط إعدادات المستخدم المفضّلة للوضع العمودي/الأفقي (Settings.System.USER_ROTATION) على الوضع العمودي/الأفقي الطبيعي للجهاز عندما يغيّر النظام الوضع العمودي/الأفقي الطبيعي للجهاز لأي سبب عندما يكون الوضع "التدوير التلقائي" غير مفعّل. ينفّذ الإجراء المقدَّم ذلك (راجِع NavigationBarFragment.mRotationWatcher).

هناك علامة جديدة في StatusBarManager.disable2 لمنع ظهور اقتراحات التناوب مؤقتًا. يُرجى الاطّلاع على StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS. يجب مراعاة هذه العلامة في جميع عمليات التنفيذ لأنّ تطبيقات النظام المهمة تستخدمها، بما في ذلك "معالج الإعداد". تتيح آلية التنفيذ المقدَّمة ذلك (راجِع NavigationBarFragment.disable()).

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

التخصيص

بما أنّ اقتراحات التدوير لا تظهر إلا في وضع التدوير المُقفَل (التدوير التلقائي غير مفعَّل)، يمكن اختيار ما إذا كانت الميزة مفعَّلة تلقائيًا في عمليات التثبيت الجديدة من خلال اختيار إيقاف التدوير التلقائي تلقائيًا. راجِع def_accelerometer_rotation في SettingsProvider/res/values/defaults.xml لإجراء تغييرات تلقائية.

يمكن للمستخدمين بسهولة تغيير ما إذا كان وضع "التدوير التلقائي" مفعّلاً أم لا (بغض النظر عن الإعداد التلقائي) من خلال مربّع التدوير في "الإعدادات السريعة" أو "إعدادات الشاشة".

التحقُّق

لأغراض الاختبار، يمكن تفعيل الميزة وإيقافها من خلال تغيير قيمة العنصر المُقيِّد Settings.Secure. يمكن تنفيذ ذلك بسهولة من خلال تنفيذ الأمر التالي من مثيل adb مفوَّض:

adb shell settings put secure show_rotation_suggestions <x>

اضبط x على 0 للإيقاف و1 للتشغيل.

لأغراض الاختبار، يمكن إعادة ضبط وضع المقدّمة من خلال تغيير قيمة Settings.Secure المرتبطة به. يمكن تنفيذ ذلك بسهولة من خلال تنفيذ الأمر التالي من مثيل adb مفوَّض:

adb shell settings put secure num_rotation_suggestions_accepted 0