Putar saran

Di Android 8.0, pengguna dapat beralih antara mode putar otomatis dan rotasi potret menggunakan ubin Pengaturan Cepat 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 bila diperlukan dengan menekan tombol baru di bilah navigasi. Kami mengganti nama mode potret menjadi kunci rotasi dan aktif saat rotasi otomatis nonaktif. Tidak ada perubahan pada mode putar otomatis.

Saat perangkat berada dalam mode kunci rotasi, pengguna dapat mengunci layar mereka ke rotasi apa 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 rotasi terkunci, dengan beberapa pengecualian berdasarkan pengaturan screenOrientation Aktivitas.

Mode kunci rotasi berfungsi dengan menampilkan tombol di bilah navigasi pada perubahan rotasi perangkat. Untuk mencapai hal ini, sensor orientasi perangkat harus tetap aktif meskipun rotasi otomatis dimatikan. Mengetuk tombol ini secara efektif mengatur 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 pengguna apakah mereka ingin mengubah orientasi layar ke lanskap.
Gambar 1 . Putar tombol saran dengan gerakan "Geser ke atas pada tombol Beranda" diaktifkan

Preferensi rotasi pengguna harus dipertahankan saat berpindah antar Aktivitas. Namun, karena sebagian besar pengguna ponsel hanya ingin berada dalam lanskap untuk jangka waktu singkat dan sementara, kami menambahkan bias orientasi alami. Preferensi rotasi pengguna disetel 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 kali terjadi saat menggunakan aplikasi potret saja, mengunci ponsel, atau kembali ke ruang kerja peluncur.

Interaksi rotasi untuk pengguna tidak banyak berubah dalam satu dekade terakhir. Pengguna mungkin merasa fitur ini sulit ditemukan mengingat riwayat rotasi dan posisi tombol sebelumnya di bilah navigasi. Karena alasan ini, kami telah menambahkan mode perkenalan ke tombol putar yang menyorotnya saat muncul. Perilaku mode pengenalan hanya terjadi pada beberapa interaksi tombol pertama, setelah itu 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 keluaran WindowOrientationListener ( MyOrientationListener , bertanggung jawab untuk memantau sensor untuk menentukan apakah perangkat telah diputar)
    • Menjaga WindowOrientationListener tetap aktif meskipun putar otomatis dinonaktifkan (lihat needSensorRunningLp() )
    • Menghitung rotasi sistem berdasarkan preferensi rotasi pengguna, pengaturan screenOrientation Aktivitas teratas, dan status sistem (lihat rotationForOrientationLw() )
    • Tentukan apakah Aktivitas teratas dapat diputar ke rotasi tertentu (lihat isRotationChoicePossible() )
  • SystemUI/.../statusbar/phone/NavigationBarFragment :
    • Menentukan apakah tombol navbar harus ditampilkan pada callback saran rotasi dari PhoneWindowManager (lihat onRotationProposal() )
    • Menangani kapan harus menyembunyikan tombol putar bilah navigasi (lihat panggilan ke setRotateSuggestionButtonState(false) )
    • Menangani batas waktu tombol, termasuk kasus khusus ketika bilah navigasi 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 )
    • Mengimplementasikan tanda rotasidisable2 (lihatdisable disable() )
  • SystemUI/.../statusbar/phone/NavigationBarView.java :
    • Animasi ikon tombol gaya untuk mencocokkan 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 :
    • Complex AnimatedVectorDrawable digunakan untuk menganimasikan tombol putar navbar
    • Penataan gaya (dalam SystemUI/res/values/styles.xml ) digunakan untuk mengatur sudut awal dan akhir rotasi sehingga sumber daya dapat digambar 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 pada perangkat yang menggunakan tombol navigasi perangkat lunak (kembali, pulang, dll).

Produsen perangkat yang membuat perangkat dengan tombol navigasi perangkat keras yang ingin menerapkan fitur ini perlu merancang dan mengimplementasikan kemampuan UI Sistem mereka sendiri atau menonaktifkan fitur tersebut. Disarankan agar setiap permukaan yang dimasukkan mudah digunakan saat perangkat dipegang pada suhu 90º atau 180º terhadap rotasi sistem saat ini dan dapat diakses dengan cepat. Oleh karena itu, penggunaan notifikasi (seperti yang dilakukan pada IME/keyboard picker) tidak disarankan.

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

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

Ada tanda baru di StatusBarManager.disable2 untuk mencegah munculnya saran rotasi untuk sementara. 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 hal ini (lihat NavigationBarFragment.disable() ).

Kami sangat menyarankan untuk mengaktifkan fitur tersebut dan mengikuti implementasi AOSP, jika memungkinkan. Kami bertujuan untuk menjaga pengalaman rotasi antar perangkat tetap serupa, 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 nonaktif), Anda dapat 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 defaultnya) melalui ubin putar di Pengaturan Cepat atau pengaturan Tampilan.

Validasi

Untuk pengujian, fitur ini dapat dimatikan dan dihidupkan dengan mengubah nilai Settings.Secure . Hal ini paling mudah dilakukan dengan menjalankan perintah berikut dari instance adb yang memiliki hak istimewa:

adb shell settings put secure show_rotation_suggestions <x>

Setel x ke 0 untuk mati dan 1 untuk hidup.

Untuk pengujian, mode pengenalan dapat diatur ulang dengan mengubah nilai Settings.Secure terkait. Hal ini paling mudah dilakukan dengan menjalankan perintah berikut dari instance adb yang memiliki hak istimewa:

adb shell settings put secure num_rotation_suggestions_accepted 0