Di Android 8.0, pengguna dapat beralih antara rotasi otomatis dan rotasi potret menggunakan kotak Setelan Cepat atau setelan Tampilan. Di Android 9, kami memperbarui mode rotasi potret untuk menghilangkan rotasi yang tidak disengaja dengan menyematkan rotasi layar saat ini meskipun posisi perangkat berubah. Pengguna dapat memicu rotasi secara manual saat diperlukan dengan menekan tombol baru di bilah navigasi. Kami mengganti nama mode potret menjadi kunci rotasi dan berfungsi saat memutar otomatis nonaktif. Tidak ada perubahan pada mode putar otomatis.
Saat perangkat berada dalam mode kunci rotasi, pengguna dapat mengunci layar ke berbagai
rotasi yang didukung oleh Aktivitas teratas yang terlihat (berdasarkan sistem saat ini
tertentu). Jika Aktivitas teratas dapat dirender dalam beberapa rotasi di
mode putar otomatis, opsi yang sama
seharusnya tersedia dalam mode rotasi terkunci,
dengan beberapa pengecualian berdasarkan screenOrientation
Aktivitas
deskripsi tempat.
Mode kunci rotasi bekerja dengan menampilkan tombol di menu navigasi saat perangkat diputar
perubahan. Untuk melakukannya, sensor orientasi perangkat harus tetap aktif
meskipun putar otomatis nonaktif. Mengetuk tombol ini akan mengatur rotasi pengguna secara efektif
preferensi (Settings.System.USER_ROTATION
). WindowManager menggunakan data ini
beserta detail lain tentang Aktivitas teratas dan status sistem,
untuk mengubah rotasi sistem. WindowManager terus menggunakan rotasi pengguna
preferensi saat memutuskan rotasi mana yang akan
dirender sistem saat berpindah ke
Aktivitas lain.
Preferensi rotasi pengguna harus dipertahankan saat berpindah di antara Aktivitas. Namun, karena sebagian besar pengguna ponsel hanya ingin menggunakan orientasi lanskap untuk jangka pendek, periode waktu sementara, kita menambahkan bias orientasi alami. Rotasi pengguna preferensi adalah reset ke orientasi alami perangkat setiap kali rotasi sistem berubah ke orientasi alami perangkat. Untuk sebagian besar ponsel, orientasi alami perangkat adalah potret (0o). Mereset rotasi pengguna preferensi sering terjadi ketika menggunakan aplikasi khusus potret, mengunci ponsel, atau kembali ke ruang kerja peluncur.
Interaksi rotasi untuk pengguna tidak banyak berubah dalam satu dekade terakhir. Pengguna mungkin fitur ini sulit ditemukan mengingat riwayat sebelumnya dengan rotasi dan penempatan tombol di bilah navigasi. Oleh karena itu, kami telah menambahkan mode pengenalan tombol putar yang menyorotinya saat muncul. Pengantar perilaku mode hanya terjadi untuk beberapa interaksi tombol pertama. Setelahnya, mode pengantar dinonaktifkan.
Sumber
Dukungan untuk saran rotasi telah ditambahkan ke Android 9. Sebagian besar perubahan dimuat dalam file berikut.
services/.../server/policy/PhoneWindowManager.java
:- Hook yang menggunakan output
WindowOrientationListener
(MyOrientationListener
, bertanggung jawab untuk memantau sensor untuk menentukan apakah perangkat telah diputar) - Membuat
WindowOrientationListener
tetap aktif bahkan saat putar otomatis dinonaktifkan (lihatneedSensorRunningLp()
) - Menghitung rotasi sistem berdasarkan preferensi rotasi pengguna, atas
Setelan aktivitas
screenOrientation
dan status sistem (lihatrotationForOrientationLw()
) - Tentukan apakah Aktivitas teratas dapat berotasi ke rotasi tertentu (lihat
isRotationChoicePossible()
)
- Hook yang menggunakan output
SystemUI/.../statusbar/phone/NavigationBarFragment
:- Menentukan apakah tombol navbar akan ditampilkan saat rotasi
callback saran dari
PhoneWindowManager
(lihatonRotationProposal()
) - Menangani waktu untuk menyembunyikan tombol putar navigasi (lihat panggilan untuk
setRotateSuggestionButtonState(false)
) - Menangani waktu tunggu tombol, termasuk kasus khusus saat navbar disembunyikan (biasanya dalam layar penuh)
- Mereset preferensi pengguna saat kembali ke setelan alami perangkat
orientasi (
mRotationWatcher
) - Memilih gaya yang sesuai untuk animasi tombol navigasi,
diterapkan di
NavigationBarView
(lihatonRotationProposal()
) - Menambahkan logika mode pengantar, termasuk animasi khusus
(lihat referensi untuk
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
) - Mengimplementasikan tanda rotasi Disable2 (lihat
disable()
)
- Menentukan apakah tombol navbar akan ditampilkan saat rotasi
callback saran dari
SystemUI/.../statusbar/phone/NavigationBarView.java
:- Menata gaya animasi ikon tombol agar cocok dengan rotasi yang tertunda (lihat
updateRotateSuggestionButtonStyle()
) - Menangani perubahan visibilitas tombol (lihat
setRotateButtonVisibility()
), termasuk logika untuk disembunyikan tombol putar jika layanan Aksesibilitas tertentu aktif (dengan memperhitungkan peringkat tumpukan tombol navigasi paling kanan)
- Menata gaya animasi ikon tombol agar cocok dengan rotasi yang tertunda (lihat
SystemUI/res/layout/menu_ime.xml
:- Menyertakan
KeyButtonView
baru untuk tombol putar, ditumpuk di atas menu dan pemilih IME/keyboard tetapi di bawah Tombol aksesibilitas
- Menyertakan
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
:AnimatedVectorDrawable
kompleks yang digunakan untuk menganimasikan putar tombol menu navigasi- Penataan gaya (di
SystemUI/res/values/styles.xml
) digunakan untuk mengatur sudut awal dan akhir rotasi sehingga drawable yang sama dapat digunakan untuk menganimasikan berbagai rotasi awal dan akhir - Penambahan tint ikon disetel melalui
TintedKeyButtonDrawable
Implementasi
Android 9 menyertakan semua perubahan yang diperlukan untuk saran rotasi yang berfungsi untuk perangkat yang menggunakan tombol navigasi software (kembali, layar utama, dll.).
Produsen perangkat yang membuat perangkat dengan tombol navigasi perangkat keras yang ingin untuk menerapkan fitur ini perlu mendesain dan menerapkan UI Sistem mereka sendiri {i>affordance<i} atau menonaktifkan fitur. Disarankan agar setiap platform yang diperkenalkan mudah digunakan ketika perangkat dipegang pada 90 ° atau 180 ° untuk sistem saat ini dan dapat diakses dengan cepat. Oleh karena itu, penggunaan notifikasi (seperti yang dilakukan untuk pemilih IME/keyboard) tidak disarankan.
Persyaratan perangkat keras untuk menggunakan fitur ini sama dengan persyaratan menggunakan putar otomatis.
Untuk konsistensi implementasi, kita perlu memprioritaskan rotasi pengguna
(Settings.System.USER_ROTATION
) direset ke setelan alami perangkat
rotasi ketika sistem berubah ke rotasi alami perangkat karena alasan apa pun
saat putar otomatis nonaktif. Implementasi yang disediakan melakukan hal ini (lihat
NavigationBarFragment.mRotationWatcher
).
Ada tanda baru di StatusBarManager.disable2
untuk sementara
mencegah saran rotasi muncul. Lihat
StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
. Penanda ini harus
diterapkan dalam semua implementasi karena digunakan oleh aplikasi sistem penting, termasuk
Wizard Penyiapan. Implementasi yang disediakan mendukung hal ini (lihat
NavigationBarFragment.disable()
).
Kami sangat merekomendasikan untuk mengaktifkan fitur ini dan mengikuti langkah-langkah AOSP implementasi yang tepat, jika memungkinkan. Kami ingin agar pengalaman rotasi tetap serupa antar perangkat, yang mencerminkan keseragaman pengalaman di kebanyakan ponsel saat ini antara kunci putar otomatis dan potret.
Penyesuaian
Karena saran rotasi hanya muncul dalam mode rotasi terkunci (putar otomatis nonaktif),
Anda dapat memilih apakah fitur ini aktif secara default untuk penginstalan baru dengan
memilih menonaktifkan putar otomatis secara default. Lihat
def_accelerometer_rotation
inci
SettingsProvider/res/values/defaults.xml
untuk membuat perubahan default.
Pengguna dapat dengan mudah mengubah apakah putar otomatis aktif atau tidak (terlepas dari setelan default) melalui ubin putar di Setelan Cepat atau Setelan tampilan.
Validasi
Untuk pengujian, fitur dapat dinonaktifkan dan diaktifkan dengan mengubah gating
Nilai Settings.Secure
. Hal ini paling mudah dilakukan dengan menjalankan
perintah berikut dari instance adb dengan hak istimewa:
adb shell settings put secure show_rotation_suggestions <x>
Setel x ke 0
untuk nonaktif dan 1
untuk aktif.
Untuk pengujian, mode pengantar bisa direset dengan mengubah
Nilai Settings.Secure
. Hal ini paling mudah dilakukan dengan menjalankan
perintah berikut dari instance adb dengan hak istimewa:
adb shell settings put secure num_rotation_suggestions_accepted 0