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

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

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

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

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

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

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

المصدر

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

  • services/.../server/policy/PhoneWindowManager.java:
    • عناصر الجذب التي تستهلك ناتج "WindowOrientationListener" ("MyOrientationListener"، وهو مسؤول عن المراقبة أدوات الاستشعار لتحديد ما إذا تم تدوير الجهاز)
    • يُبقي WindowOrientationListener نشطًا حتى عند تم إيقاف التدوير التلقائي (راجع needSensorRunningLp())
    • لحساب تدوير النظام نظرًا لتفضيل دوران المستخدم، الأعلى إعدادات النشاط screenOrientation وحالة النظام (راجِع rotationForOrientationLw())
    • يمكنك تحديد ما إذا كان من الممكن تدوير النشاط العلوي إلى دوران معين (راجع isRotationChoicePossible())
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • تحدِّد هذه السياسة ما إذا كان يجب عرض زر شريط التنقّل عند التدوير. طلبات معاودة الاتصال بالاقتراحات من PhoneWindowManager (راجِع onRotationProposal())
    • يعالج هذا الإعداد وقت إخفاء زر تدوير شريط التنقل (راجع عمليات استدعاء setRotateSuggestionButtonState(false))
    • تتعامل مع المهلة المحددة للزر، بما في ذلك الحالة الخاصة عند انتهاء شريط التنقل مخفي (عادةً في وضع ملء الشاشة)
    • إعادة ضبط الإعدادات المفضّلة للمستخدم عند الرجوع إلى الإعدادات الطبيعية للجهاز الاتجاه (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