Putar Saran

Di Android 8.0, pengguna dapat beralih antara mode putar otomatis dan rotasi potret menggunakan ubin Quicksettings atau pengaturan 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 dibutuhkan dengan menekan tombol baru di bilah navigasi. Kami mengganti nama mode potret menjadi kunci rotasi dan itu aktif saat putar otomatis mati. Tidak ada perubahan pada mode putar otomatis.

Saat perangkat dalam mode kunci rotasi, pengguna dapat mengunci layar mereka ke rotasi mana pun yang didukung oleh Aktivitas teratas yang terlihat (mengingat batasan sistem saat ini). Jika Aktivitas teratas dapat dirender dalam beberapa rotasi dalam mode putar otomatis, opsi yang sama harus tersedia dalam mode terkunci rotasi, dengan beberapa pengecualian berdasarkan pengaturan screenOrientation layar Aktivitas.

Mode kunci rotasi bekerja dengan menunjukkan tombol di navbar pada perubahan rotasi perangkat. Untuk mencapai hal ini, sensor orientasi perangkat harus tetap aktif meskipun rotasi otomatis mati. Mengetuk tombol ini secara efektif menetapkan preferensi rotasi pengguna ( Settings.System.USER_ROTATION ). WindowManager menggunakan preferensi ini, bersama dengan detail lainnya tentang Aktivitas teratas dan status sistem, untuk mengubah rotasi sistem. WindowManager terus menggunakan preferensi rotasi pengguna saat memutuskan rotasi apa yang akan digunakan untuk merender sistem saat berpindah ke Aktivitas lain.

Gif ini menunjukkan ponsel dalam orientasi lanskap dengan layar dalam orientasi potret. Sebuah ikon muncul untuk menanyakan kepada pengguna apakah mereka ingin mengubah orientasi layar mereka ke lanskap.
Gambar 1 . Putar tombol saran dengan gerakan "Gesek ke atas pada tombol Beranda" diaktifkan

Preferensi rotasi pengguna harus dipertahankan saat berpindah di antara Aktivitas. Namun, karena sebagian besar pengguna ponsel hanya ingin berada di lanskap untuk jangka waktu yang singkat dan sementara, kami menambahkan bias orientasi alami. Preferensi rotasi pengguna diatur ulang ke orientasi alami perangkat setiap kali rotasi sistem berubah ke orientasi alami perangkat. Untuk sebagian besar ponsel, orientasi alami perangkat adalah potret (0º). Menyetel ulang preferensi rotasi pengguna sering terjadi saat menggunakan aplikasi khusus potret, mengunci ponsel, atau kembali ke ruang kerja peluncur.

Interaksi rotasi untuk pengguna tidak banyak berubah dalam dekade terakhir. Pengguna mungkin menemukan fitur ini sulit ditemukan mengingat riwayat mereka sebelumnya dengan rotasi dan posisi tombol di bilah navigasi. Untuk alasan ini, kami telah menambahkan mode pengenalan ke tombol putar yang menyorotnya saat muncul. Perilaku mode perkenalan hanya terjadi untuk beberapa interaksi tombol pertama setelah mode pengenalan dinonaktifkan.

Sumber

Dukungan untuk saran rotasi telah ditambahkan ke Android 9. Sebagian besar perubahan terdapat dalam file berikut.

  • services/.../server/policy/PhoneWindowManager.java :
    • Kait yang menggunakan output WindowOrientationListener ( MyOrientationListener , bertanggung jawab untuk memantau sensor untuk menentukan apakah perangkat telah diputar)
    • Menjaga WindowOrientationListener aktif bahkan ketika auto-rotate dinonaktifkan (lihat needSensorRunningLp() )
    • Menghitung rotasi sistem berdasarkan preferensi rotasi pengguna, pengaturan Orientasi layar Aktivitas teratas, dan status sistem (lihat screenOrientation rotationForOrientationLw() )
    • Tentukan apakah Aktivitas teratas dapat berputar ke rotasi tertentu (lihat isRotationChoicePossible() )
  • SystemUI/.../statusbar/phone/NavigationBarFragment :
    • Menentukan apakah tombol navbar harus ditampilkan pada panggilan balik saran rotasi dari PhoneWindowManager (lihat onRotationProposal() )
    • Menangani kapan harus menyembunyikan tombol navbar rotate (lihat panggilan ke setRotateSuggestionButtonState(false) )
    • Menangani batas waktu tombol, termasuk kasus khusus ketika navbar disembunyikan (biasanya di layar penuh)
    • Menyetel ulang preferensi pengguna saat kembali ke orientasi alami perangkat ( mRotationWatcher )
    • Memilih gaya yang sesuai untuk animasi tombol navbar, diterapkan di NavigationBarView (lihat onRotationProposal() )
    • Menambahkan logika mode pengenalan, termasuk animasi khusus (lihat referensi ke Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED )
    • Menerapkan flag rotasi disable2 (lihat disable() )
  • SystemUI/.../statusbar/phone/NavigationBarView.java :
    • Animasi ikon tombol gaya agar sesuai dengan rotasi yang tertunda (lihat updateRotateSuggestionButtonStyle() )
    • Menangani perubahan visibilitas tombol (lihat setRotateButtonVisibility() ), termasuk logika untuk menyembunyikan tombol putar jika layanan Aksesibilitas tertentu aktif (dengan memperhitungkan peringkat tumpukan tombol navbar paling kanan)
  • SystemUI/res/layout/menu_ime.xml :
    • Termasuk KeyButtonView baru untuk tombol putar, ditumpuk di atas menu dan pemilih IME/keyboard tetapi di bawah tombol Aksesibilitas
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml :
    • Kompleks AnimatedVectorDrawable digunakan untuk menganimasikan tombol putar navbar
    • Penataan gaya (dalam 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
    • Pewarnaan ikon diatur melalui TintedKeyButtonDrawable

Penerapan

Android 9 menyertakan semua perubahan yang diperlukan agar saran rotasi berfungsi untuk perangkat yang menggunakan tombol navigasi perangkat lunak (kembali, beranda, dll).

Produsen perangkat yang membuat perangkat dengan tombol navigasi perangkat keras yang ingin mengimplementasikan fitur ini perlu merancang dan mengimplementasikan kemampuan UI Sistem mereka sendiri atau menonaktifkan fitur tersebut. Disarankan agar setiap permukaan yang diperkenalkan mudah digunakan saat perangkat dipegang pada 90º atau 180º ke rotasi sistem saat ini dan dapat diakses dengan cepat. Karena alasan ini, penggunaan notifikasi (seperti yang dilakukan untuk IME/pemilih keyboard) tidak disarankan.

Persyaratan perangkat keras untuk menggunakan fitur ini sama dengan persyaratan untuk menggunakan rotasi otomatis.

Hal ini diperlukan untuk konsistensi implementasi bahwa preferensi rotasi pengguna ( Settings.System.USER_ROTATION ) disetel ulang ke rotasi alami perangkat saat sistem berubah ke rotasi alami perangkat karena alasan apa pun saat rotasi otomatis mati. Implementasi yang disediakan melakukan ini (lihat NavigationBarFragment.mRotationWatcher ).

Ada tanda baru di StatusBarManager.disable2 untuk mencegah sementara saran rotasi muncul. Lihat StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS . Tanda ini harus dipatuhi di semua implementasi karena digunakan oleh aplikasi sistem penting, termasuk Wizard Penyiapan. Implementasi yang disediakan mendukung ini (lihat NavigationBarFragment.disable() ).

Kami sangat menyarankan untuk mengaktifkan fitur dan mengikuti implementasi AOSP, jika memungkinkan. Kami bertujuan untuk menjaga agar pengalaman rotasi tetap serupa di antara perangkat, mencerminkan keseragaman pengalaman di sebagian besar ponsel saat ini antara putar otomatis dan kunci potret.

Kustomisasi

Karena saran rotasi hanya muncul dalam mode rotasi terkunci (putar otomatis mati), dimungkinkan untuk memilih apakah fitur tersebut diaktifkan secara default untuk pemasangan baru dengan memilih untuk menonaktifkan rotasi otomatis secara default. Lihat def_accelerometer_rotation di SettingsProvider/res/values/defaults.xml untuk membuat perubahan default.

Pengguna dapat dengan mudah mengubah apakah putar otomatis aktif atau tidak (terlepas dari default) melalui ubin putar di Pengaturan Cepat atau pengaturan Tampilan.

Validasi

Untuk pengujian, fitur dapat dimatikan dan dihidupkan dengan mengubah nilai Settings.Secure gating. Ini paling mudah dilakukan dengan menjalankan perintah berikut dari instance adb yang diistimewakan:

adb shell settings put secure show_rotation_suggestions <x>

Atur x ke 0 untuk mati dan 1 untuk hidup.

Untuk pengujian, mode pengenalan dapat diatur ulang dengan mengubah nilai Settings.Secure . Aman yang terkait. Ini paling mudah dilakukan dengan menjalankan perintah berikut dari instance adb yang diistimewakan:

adb shell settings put secure num_rotation_suggestions_accepted 0