Untuk perangkat foldable, pengalaman pengguna dapat dioptimalkan dengan menyesuaikan perilaku rotasi layar dengan status fisik perangkat. Misalnya, Anda dapat menyetel layar untuk berputar secara otomatis saat perangkat dibuka dalam postur seperti tablet, tetapi terkunci ke mode potret saat perangkat dilipat.
Mulai Android 13, Android memiliki kemampuan untuk menyesuaikan setelan putar otomatis berdasarkan status perangkat, seperti dilipat, dibuka, atau dilipat sebagian (mode tabletop).
Gambar 1. Setelan putar otomatis berbasis status perangkat seperti yang dilihat oleh pengguna.
Mengaktifkan setelan putar otomatis berbasis status perangkat
Untuk mengaktifkan dan mengonfigurasi putar otomatis berbasis status perangkat, buat overlay perangkat untuk file config.xml framework, sebagai berikut:
Konfigurasi perilaku putar otomatis default untuk postur perangkat yang berbeda dengan mengisi array bilangan bulat
config_perDeviceStateRotationLockDefaultsdi overlayconfig.xmlperangkat Anda:<!-- 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-keyadalah referensi ke postur perangkat lain dan Anda harus menentukan kapan nilai untuk postur adalahSettings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNORED. Jika postur dikonfigurasi dengan cara ini, semua permintaan untuk mendapatkan atau menetapkan preferensi putar otomatisnya akan dialihkan ke postur penggantian.Misalnya, jika postur
HALF_OPENEDkembali ke posturOPENED- Membaca setelan putar otomatis untuk
HALF_OPENEDakan menampilkan setelan saat ini untukOPENED. - Menulis preferensi putar otomatis baru saat perangkat
HALF_OPENEDakan memperbarui preferensi untuk posturOPENED.
- Membaca setelan putar otomatis untuk
Konfigurasi deskripsi untuk setiap postur perangkat yang dapat ditetapkan pengguna. Isi array string
config_settableAutoRotationDeviceStatesDescriptionsdi overlay aplikasi Setelan perangkat Anda:<!-- 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>Gunakan API yang benar untuk mengubah setelan ini secara terprogram, bukan menulis ke penyedia setelan secara langsung, untuk mencegah perilaku yang tidak konsisten:
Untuk mengubah status kunci rotasi saat ini (mengubah
ACCELEROMETER_ROTATION):- Dari SystemUI atau Peluncur, gunakan
RotationPolicy#setRotationLock(...). - Dari Pengelola Jendela, gunakan
DisplayRotation#freezeRotation()atauthawRotation().
- Dari SystemUI atau Peluncur, gunakan
Untuk mengubah preferensi kunci rotasi untuk status perangkat tertentu (mengubah
DEVICE_STATE_ROTATION_LOCK):- Gunakan
requestDeviceStateAutoRotateSettingChange(...)dari eitherRotationPolicyatauDeviceStateAutoRotateSettingManager.
- Gunakan
Detail implementasi
Setelan dan class kunci inti yang mengontrol perilaku putar otomatis untuk perangkat foldable dijelaskan di bagian berikut.
Setelan
Sistem menggunakan dua setelan berikut untuk mengelola putar otomatis:
Settings.System.ACCELEROMETER_ROTATION: Ini adalah setelan putar otomatis utama. Untuk perangkat foldable, nilainya mencerminkan apakah putar otomatis diaktifkan untuk postur perangkat saat ini.Settings.Secure.DEVICE_STATE_ROTATION_LOCK: Setelan ini menyimpan preferensi putar otomatis pengguna untuk setiap postur perangkat (misalnya, dilipat atau dibuka). Hal ini memungkinkan sistem menerapkan preferensi yang benar saat postur perangkat berubah.Setelan disimpan sebagai string yang dibatasi titik dua. Setiap pasangan nilai mewakili postur perangkat dan setelan rotasi yang sesuai. Formatnya adalah:
<device_posture_0>:<rotation_value_0>:<device_posture_1>:<rotation_value_1>...Nilai untuk rotasi adalah:
0: Diabaikan (setelan untuk postur penggantian digunakan)1: Terkunci (putar otomatis nonaktif)2: Tidak terkunci (putar otomatis aktif)
Misalnya, string
"0:2:2:1"berarti:- Untuk status dilipat (postur
0), putar otomatis tidak terkunci (2). - Untuk status dibuka (postur
2), putar otomatis terkunci (1).
Class utama
Logika untuk mengelola setelan putar otomatis berbasis status perangkat ditangani oleh class berikut:
DeviceStateAutoRotateSettingManagerImpl: Mengelola setelanDEVICE_STATE_ROTATION_LOCK. Class ini menyediakan metode untuk memperbarui setelan, mengambil nilainya, dan mendaftarkan pemroses untuk perubahan.DeviceStateAutoRotateSettingController(Pengelola Jendela): MenyinkronkanACCELEROMETER_ROTATIONdanDEVICE_STATE_ROTATION_LOCK. Saat postur perangkat berubah, setelan ini akan memperbaruiACCELEROMETER_ROTATIONberdasarkan preferensi pengguna untuk status baru. Setelan ini memastikan bahwa setiap perubahan padaACCELEROMETER_ROTATIONdisimpan kembali keDEVICE_STATE_ROTATION_LOCKuntuk postur perangkat saat ini dan dengan cara yang sama, perubahan padaDEVICE_STATE_ROTATION_LOCKuntuk postur saat ini akan ditampilkan diACCELEROMETER_ROTATION.DeviceStateAutoRotateSettingController(aplikasi Setelan): Mengontrol UI di halaman setelan putar otomatis berbasis status perangkat.PostureDeviceStateConverter: Mengonversi antara ID status perangkat generik dan ID postur perangkat yang digunakan oleh fitur ini.
Validasi
Karena perilaku fitur ini sangat bergantung pada konfigurasi OEM, tidak ada pengujian CTS khusus untuk fitur ini. Anda harus melakukan pengujian manual untuk memverifikasi bahwa setelan putar otomatis berubah seperti yang diharapkan saat perangkat bertransisi antara status fisik yang berbeda yang telah Anda konfigurasi.