Katlanabilir cihazlarda, ekran döndürme davranışını cihazın fiziksel durumuna göre uyarlayarak kullanıcı deneyimi optimize edilebilir. Örneğin, cihaz tablet gibi bir duruşta açıldığında ekranın otomatik olarak döndürülmesini, cihaz katlandığında ise dikey yönde kilitlenmesini sağlayabilirsiniz.
Android 13'ten itibaren Android, katlanmış, açılmış veya yarı katlanmış (masaüstü modu) gibi cihaz durumlarına göre otomatik döndürme ayarlarını özelleştirebilir.
Şekil 1: Kullanıcının gördüğü, cihaz durumuna dayalı otomatik döndürme ayarları.
Cihaz durumuna dayalı otomatik döndürme ayarını etkinleştirme
Cihaz durumuna dayalı otomatik döndürmeyi etkinleştirmek ve yapılandırmak için, çerçeveye ait config.xml dosyası için aşağıdaki gibi bir cihaz yerleşimi oluşturun:
Cihazınızın yer paylaşımında
config.xmlconfig_perDeviceStateRotationLockDefaultstamsayı dizisini doldurarak farklı cihaz duruşları için varsayılan otomatik döndürme davranışını yapılandırın:<!-- 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, başka bir cihaz duruşuna referanstır ve bir duruşun değeriSettings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNOREDolduğunda belirtmeniz gerekir. Bir duruş bu şekilde yapılandırıldığında, otomatik döndürme tercihini alma veya ayarlama istekleri yedek duruşa yönlendirilir.Örneğin,
HALF_OPENEDduruşuOPENEDduruşuna geri dönerse:HALF_OPENEDiçin otomatik döndürme ayarını okumak,OPENEDiçin geçerli ayarı döndürür.- Cihaz
HALF_OPENEDdurumundayken yeni bir otomatik döndürme tercihi yazmak,OPENEDduruşu için tercihi günceller.
Kullanıcı tarafından ayarlanabilen her cihaz duruşu için açıklamaları yapılandırın. Cihazınızın Ayarlar uygulaması yer paylaşımında
config_settableAutoRotationDeviceStatesDescriptionsdize dizisini doldurun:<!-- 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>Tutarsız davranışları önlemek için bu ayarları doğrudan ayar sağlayıcılarına yazmak yerine programatik olarak değiştirmek üzere doğru API'leri kullanmanız gerekir:
Mevcut döndürme kilidi durumunu değiştirmek için (
ACCELEROMETER_ROTATIONdeğiştirir):- SystemUI veya Başlatıcı'dan
RotationPolicy#setRotationLock(...)simgesini kullanın. - Pencere Yöneticisi'nde
DisplayRotation#freezeRotation()veyathawRotation()tuşunu kullanın.
- SystemUI veya Başlatıcı'dan
Belirli bir cihaz durumu için döndürme kilidi tercihini değiştirmek üzere (
DEVICE_STATE_ROTATION_LOCKdeğiştirir):RotationPolicyveyaDeviceStateAutoRotateSettingManagerkaynaklırequestDeviceStateAutoRotateSettingChange(...)kullanın.
Uygulama ayrıntıları
Katlanabilir cihazlarda otomatik döndürme davranışını kontrol eden ayarlar ve temel anahtar sınıfları aşağıdaki bölümlerde açıklanmıştır.
Ayarlar
Sistem, otomatik döndürmeyi yönetmek için aşağıdaki iki ayarı kullanır:
Settings.System.ACCELEROMETER_ROTATION: Bu, birincil otomatik döndürme ayarıdır. Katlanabilir cihazlarda bu değer, cihazın mevcut duruşu için otomatik döndürmenin etkin olup olmadığını yansıtır.Settings.Secure.DEVICE_STATE_ROTATION_LOCK: Bu ayar, kullanıcının her cihaz duruşu (ör. katlanmış veya açılmış) için otomatik döndürme tercihini saklar. Bu sayede, cihazın duruşu değiştiğinde sistem doğru tercihi uygulayabilir.Ayar, iki nokta üst üste ile ayrılmış bir dize olarak saklanır. Her değer çifti, cihaz duruşunu ve buna karşılık gelen döndürme ayarını temsil eder. Biçim şöyledir:
<device_posture_0>:<rotation_value_0>:<device_posture_1>:<rotation_value_1>...Dönüş değerleri şunlardır:
0: Yoksayıldı (yedek duruş ayarı kullanılır)1: Kilitli (otomatik döndürme kapalı)2: Kilidi açık (otomatik döndürme açık)
Örneğin,
"0:2:2:1"dizesi şu anlama gelir:- Katlı durumdayken (duruş
0) otomatik döndürme açıktır (2). - Açık durumdayken (duruş
2) otomatik döndürme kilitlenir (1).
Anahtar sınıflar
Cihaz durumuna dayalı otomatik döndürme ayarlarını yönetme mantığı aşağıdaki sınıflar tarafından işlenir:
DeviceStateAutoRotateSettingManagerImpl:DEVICE_STATE_ROTATION_LOCKayarını yönetir. Bu API, ayarı güncellemek, değerini almak ve değişiklikler için dinleyicileri kaydetmek üzere yöntemler sağlar.DeviceStateAutoRotateSettingController(Pencere Yöneticisi):ACCELEROMETER_ROTATIONveDEVICE_STATE_ROTATION_LOCKöğelerini senkronize eder. Cihazın duruşu değiştiğinde, yeni durumdaki kullanıcı tercihine göreACCELEROMETER_ROTATIONgüncellenir.ACCELEROMETER_ROTATION'da yapılan değişikliklerin, mevcut cihaz duruşu içinDEVICE_STATE_ROTATION_LOCK'a geri kaydedilmesini sağlar. Benzer şekilde, mevcut duruş içinDEVICE_STATE_ROTATION_LOCK'da yapılan değişikliklerACCELEROMETER_ROTATION'a yansıtılır.DeviceStateAutoRotateSettingController(Ayarlar uygulaması): Cihaz durumuna dayalı otomatik döndürme ayarları sayfasında kullanıcı arayüzünü kontrol edin.PostureDeviceStateConverter: Genel cihaz durumu tanımlayıcıları ile bu özellik tarafından kullanılan cihaz duruşu tanımlayıcıları arasında dönüşüm yapar.
Doğrulama
Bu özelliğin davranışı OEM'nin yapılandırmasına büyük ölçüde bağlı olduğundan, bu özellik için belirli CTS testleri yoktur. Cihaz, yapılandırdığınız farklı fiziksel durumlar arasında geçiş yaptığında otomatik döndürme ayarlarının beklendiği gibi değiştiğini doğrulamak için manuel test yapmanız gerekir.