في Android 8.0، يمكن للمستخدمين التبديل بين أوضاع التدوير التلقائي والتدوير العمودي باستخدام مربع الإعدادات السريعة أو إعدادات العرض. في Android 9، قمنا بتحديث وضع التدوير العمودي للتخلص من عمليات التدوير غير المقصودة عن طريق تثبيت دوران الشاشة الحالي حتى إذا تغير موضع الجهاز. يمكن للمستخدمين تشغيل التدوير يدويًا عند الحاجة عن طريق الضغط على زر جديد في شريط التنقل. لقد قمنا بإعادة تسمية الوضع الرأسي إلى قفل التدوير ويتم تنشيطه عند إيقاف التدوير التلقائي. لا توجد تغييرات على وضع التدوير التلقائي.
عندما يكون الجهاز في وضع قفل التدوير، يمكن للمستخدمين قفل شاشتهم على أي دوران يدعمه النشاط العلوي المرئي (نظرًا لقيود النظام الحالية). إذا كان من الممكن عرض النشاط العلوي في دورات متعددة في وضع التدوير التلقائي، فيجب أن تكون نفس الخيارات متاحة في وضع قفل التدوير، مع بعض الاستثناءات بناءً على إعداد screenOrientation
الخاص بالنشاط.
يعمل وضع قفل التدوير من خلال إظهار زر في شريط التنقل عند تغيير دوران الجهاز. ولتحقيق ذلك، يجب أن يظل مستشعر اتجاه الجهاز نشطًا حتى عند إيقاف التدوير التلقائي. يؤدي النقر على هذا الزر إلى تعيين تفضيلات تدوير المستخدم بشكل فعال ( Settings.System.USER_ROTATION
). يستخدم WindowManager هذا التفضيل، بالإضافة إلى تفاصيل أخرى حول النشاط العلوي وحالة النظام، لتغيير دوران النظام. يستمر WindowManager في استخدام تفضيل تدوير المستخدم عند تحديد التدوير الذي سيتم عرض النظام فيه عند الانتقال إلى نشاط آخر.
![تعرض هذه الصورة المتحركة هاتفًا في اتجاه أفقي والشاشة في اتجاه عمودي. يظهر رمز ليسأل المستخدم عما إذا كان يريد تغيير اتجاه الشاشة إلى الوضع الأفقي.](https://source.android.com/static/docs/core/display/images/rotate-btn-quickstep.gif?authuser=5&hl=ar)
يجب الحفاظ على تفضيل دوران المستخدم عند التنقل بين الأنشطة. ومع ذلك، نظرًا لأن معظم مستخدمي الهاتف لا يريدون سوى التواجد في الوضع الأفقي لفترة زمنية قصيرة ومؤقتة، فقد أضفنا تحيز الاتجاه الطبيعي. تتم إعادة ضبط تفضيل دوران المستخدم على الاتجاه الطبيعي للجهاز عندما يتغير دوران النظام إلى الاتجاه الطبيعي للجهاز. بالنسبة لمعظم الهواتف، يكون الاتجاه الطبيعي للجهاز عموديًا (0 درجة). غالبًا ما تحدث إعادة تعيين تفضيل تدوير المستخدم عند استخدام تطبيق عمودي فقط أو قفل الهاتف أو العودة إلى مساحة عمل المشغل.
لم تتغير تفاعلات التناوب للمستخدمين كثيرًا في العقد الماضي. قد يجد المستخدمون صعوبة في اكتشاف هذه الميزة نظرًا لسجلهم السابق من خلال التدوير ووضع الزر في شريط التنقل. ولهذا السبب، أضفنا وضع المقدمة إلى زر التدوير الذي يقوم بتمييزه عند ظهوره. يحدث سلوك وضع المقدمة فقط في تفاعلات الأزرار القليلة الأولى التي يتم بعدها تعطيل وضع المقدمة.
مصدر
تمت إضافة دعم اقتراحات التدوير إلى Android 9. معظم التغييرات موجودة في الملفات التالية.
-
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
) - ينفذ علامة التدوير Disable2 (انظر
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