بالنسبة إلى الأجهزة القابلة للطي، يمكن تحسين تجربة المستخدم من خلال تعديل سلوك دوران الشاشة بما يتناسب مع الحالة المادية للجهاز. على سبيل المثال، يمكنك ضبط الشاشة على التدوير تلقائيًا عند فتح الجهاز في وضع يشبه وضع الجهاز اللوحي، ولكن يمكنك ضبطها على الوضع العمودي عند طي الجهاز.
بدءًا من نظام التشغيل Android 13، يتيح لك نظام Android إمكانية تخصيص إعدادات التدوير التلقائي استنادًا إلى حالات الجهاز، مثل الطي أو الفتح أو الطي جزئيًا (وضع سطح الطاولة).
الشكل 1: إعدادات التدوير التلقائي المستندة إلى حالة الجهاز كما يراها المستخدم
تفعيل إعداد التدوير التلقائي المستند إلى حالة الجهاز
لتفعيل ميزة التدوير التلقائي المستندة إلى حالة الجهاز وضبطها، أنشئ طبقة عرض على الجهاز لملف config.xml في إطار العمل، كما يلي:
اضبط السلوك التلقائي لميزة التدوير التلقائي لأوضاع الجهاز المختلفة من خلال ملء مصفوفة الأعداد الصحيحة
config_perDeviceStateRotationLockDefaultsفيconfig.xmlتراكب الجهاز:<!-- In your device overlay, for example, device/generic/goldfish/phone/overlay/frameworks/base/core/res/res/values/config.xml --> <resources> <!-- Map of device posture to rotation lock setting. Each entry must be in the format "key:value", or "key:value:fallback_key" for example: "0:1" or "2:0:1". The keys are one of Settings.Secure.DeviceStateRotationLockKey, and the values are one of Settings.Secure.DeviceStateRotationLockSetting. --> <integer-array name="config_perDeviceStateRotationLockDefaults"> <item>0:1</item> <!-- CLOSED -> LOCKED --> <item>1:0:2</item> <!-- HALF_OPENED -> IGNORED and fallback to device posture OPENED --> <item>2:2</item> <!-- OPENED -> UNLOCKED --> <item>3:0:0</item> <!-- REAR_DISPLAY -> IGNORED and fallback to device posture CLOSED --> </integer-array> </resources>fallback-keyهو مرجع إلى وضع جهاز آخر، ويجب تحديد متى تكون قيمة الوضعSettings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNORED. عند ضبط وضعية بهذه الطريقة، تتم إعادة توجيه أي طلبات للحصول على إعدادات التدوير التلقائي أو ضبطها إلى وضعية احتياطية.على سبيل المثال، إذا تم الرجوع من وضعية
HALF_OPENEDإلى وضعيةOPENED:- تؤدي قراءة إعداد التدوير التلقائي
HALF_OPENEDإلى عرض الإعداد الحاليOPENED. - تؤدي كتابة إعدادات مفضّلة جديدة للتدوير التلقائي أثناء
HALF_OPENEDتحديث الجهاز إلى تعديل الإعدادات المفضّلة لوضعيةOPENED.
- تؤدي قراءة إعداد التدوير التلقائي
ضبط أوصاف لكل وضع من أوضاع الجهاز التي يمكن للمستخدم ضبطها املأ مصفوفة السلاسل النصية
config_settableAutoRotationDeviceStatesDescriptionsفي تراكب تطبيق "الإعدادات" على جهازك:<!-- In your device's Settings app overlay --> <resources> <!-- The settings/preference description for each settable device posture defined in the array "config_perDeviceStateRotationLockDefaults". The item in position "i" describes the auto-rotation setting for the device posture also in position "i" in the array "config_perDeviceStateRotationLockDefaults". --> <string-array name="config_settableAutoRotationDeviceStatesDescriptions"> <item>Auto-rotate when folded</item> <item>@null</item> <!-- No description for state in position 1 (it is not settable by the user) --> <item>Auto-rotate when unfolded</item> </string-array> </resources>استخدِم واجهات برمجة التطبيقات الصحيحة لتعديل هذه الإعدادات آليًا، بدلاً من الكتابة إلى موفّري الإعدادات مباشرةً، وذلك لتجنُّب السلوك غير المتسق:
لتغيير حالة قفل الدوران الحالية (يعدّل
ACCELEROMETER_ROTATION):- من SystemUI أو Launcher، استخدِم
RotationPolicy#setRotationLock(...). - من "مدير النوافذ"، استخدِم
DisplayRotation#freezeRotation()أوthawRotation().
- من SystemUI أو Launcher، استخدِم
لتغيير إعدادات قفل دوران الشاشة لحالة جهاز معيّنة (يعدّل
DEVICE_STATE_ROTATION_LOCK):- استخدِم
requestDeviceStateAutoRotateSettingChange(...)منRotationPolicyأوDeviceStateAutoRotateSettingManager.
- استخدِم
تفاصيل التنفيذ
في الأقسام التالية، يتم توضيح الإعدادات وفئات المفاتيح الأساسية التي تتحكّم في سلوك التدوير التلقائي على الأجهزة القابلة للطي.
الإعدادات
يستخدم النظام الإعدادَين التاليَين لإدارة ميزة التدوير التلقائي:
Settings.System.ACCELEROMETER_ROTATION: هذا هو الإعداد الأساسي الخاص بالتدوير التلقائي. بالنسبة إلى الأجهزة القابلة للطي، تشير القيمة إلى ما إذا كان التدوير التلقائي مفعَّلاً لوضع الجهاز الحالي.
Settings.Secure.DEVICE_STATE_ROTATION_LOCK: يخزِّن هذا الإعداد الإعداد المفضّل للمستخدم بشأن التدوير التلقائي لكل وضعية للجهاز (على سبيل المثال، مطوي أو غير مطوي). ويسمح ذلك للنظام بتطبيق الإعدادات المفضّلة الصحيحة عند تغيير وضع الجهاز.يتم تخزين الإعداد كسلسلة مفصولة بنقطتين رأسيتين. يمثّل كل زوج من القيم وضع الجهاز وإعداد التدوير المقابل له. يكون التنسيق كما يلي:
<device_posture_0>:<rotation_value_0>:<device_posture_1>:<rotation_value_1>...قيم التدوير هي:
-
0: تم تجاهله (يتم استخدام إعداد الوضع الاحتياطي) -
1: مقفل (التدوير التلقائي غير مفعَّل) -
2: غير مقفل (التدوير التلقائي مفعّل)
على سبيل المثال، تعني السلسلة
"0:2:2:1"ما يلي:- في وضع الطي (الوضع
0)، يكون التدوير التلقائي غير مقفل (2). - في الوضع غير المطوي (الوضع
2)، يكون التدوير التلقائي مقفلًا (1).
-
الفئات الرئيسية
تتولّى الفئات التالية منطق إدارة إعدادات التدوير التلقائي المستندة إلى حالة الجهاز:
DeviceStateAutoRotateSettingManagerImpl: يدير إعدادDEVICE_STATE_ROTATION_LOCK. ويوفّر طرقًا لتعديل الإعداد واسترداد قيمته وتسجيل أدوات معالجة للتغييرات.DeviceStateAutoRotateSettingController(مدير النوافذ): تتم مزامنةACCELEROMETER_ROTATIONوDEVICE_STATE_ROTATION_LOCK. عندما تتغير وضعية الجهاز، يتم تعديلACCELEROMETER_ROTATIONاستنادًا إلى الإعدادات المفضّلة للمستخدم في الحالة الجديدة. ويضمن هذا الإعداد حفظ أي تغييرات فيACCELEROMETER_ROTATIONمرة أخرى فيDEVICE_STATE_ROTATION_LOCKلوضع الجهاز الحالي، وبطريقة مشابهة، يتم عرض التغييرات فيDEVICE_STATE_ROTATION_LOCKللوضع الحالي فيACCELEROMETER_ROTATION.DeviceStateAutoRotateSettingController(تطبيق الإعدادات): يتحكّم في واجهة المستخدم في صفحة إعدادات التدوير التلقائي استنادًا إلى حالة الجهاز.
PostureDeviceStateConverter: تحويل المعرّفات العامة لحالة الجهاز إلى معرّفات وضع الجهاز المستخدَمة في هذه الميزة
التحقق من صحة البيانات
وبما أنّ سلوك هذه الميزة يعتمد بشكل كبير على إعدادات الشركة المصنّعة للجهاز الأصلي، لا تتوفّر اختبارات CTS محدّدة لها. عليك إجراء اختبار يدوي للتأكّد من أنّ إعدادات التدوير التلقائي تتغيّر على النحو المتوقّع عند انتقال الجهاز بين الحالات المادية المختلفة التي ضبطتها.