Saran rotasi

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.

GIF ini menampilkan ponsel dalam orientasi lanskap dengan layar dalam
       orientasi potret. Sebuah ikon muncul untuk menanyakan kepada pengguna apakah mereka ingin
       mengubah orientasi layarnya menjadi lanskap.
Gambar 1. Tombol saran putar dengan "Geser atas tombol Beranda" gestur diaktifkan

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 (lihat needSensorRunningLp())
    • Menghitung rotasi sistem berdasarkan preferensi rotasi pengguna, atas Setelan aktivitas screenOrientation dan status sistem (lihat rotationForOrientationLw())
    • Tentukan apakah Aktivitas teratas dapat berotasi ke rotasi tertentu (lihat isRotationChoicePossible())
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • Menentukan apakah tombol navbar akan ditampilkan saat rotasi callback saran dari PhoneWindowManager (lihat onRotationProposal())
    • 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 (lihat onRotationProposal())
    • Menambahkan logika mode pengantar, termasuk animasi khusus (lihat referensi untuk Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED)
    • Mengimplementasikan tanda rotasi Disable2 (lihat disable())
  • 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)
  • 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
  • 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