Pembaruan yang dilakukan pada area khusus tampilan ini disediakan di bawah:
Android 10 mendukung keyboard perangkat lunak untuk aplikasi yang berjalan pada tampilan non-default.
Aplikasi berjalan pada tampilan non-default
Dalam hal tampilan yang menunjukkan keyboard perangkat lunak dari Input Method Editor (IME), ada mode yang berbeda. Keyboard perangkat lunak ditampilkan di:
- Tampilan yang sama tempat aplikasi yang difokuskan muncul.
- Tampilan default saat aplikasi yang difokuskan berjalan pada tampilan non-default.
- Tidak ada tampilan sama sekali.
Sistem menentukan mode mana yang akan digunakan berdasarkan pengaturan tampilan tempat aplikasi yang difokuskan muncul. Untuk lebih jelasnya, lihat:
-
WindowManager#setDisplayImePolicy()
-
WindowManager#getDisplayImePolicy()
Gambar 1. Keyboard perangkat lunak IME seperti yang muncul pada tampilan sekunder, termasuk aplikasi target
Sistem menggunakan satu IME, namun dapat berpindah antar tampilan untuk mengikuti fokus pengguna. Android 10 secara otomatis mengharapkan semua IME pihak pertama dan ketiga merevisi tata letak dan mengubah ukuran sesuai dengan ukuran tampilan baru saat dibuat.
Jika ada koneksi aktif pada tampilan A, dan bidang masukan meminta fokus masukan pada tampilan B, maka alur berikut akan terjadi:
- Koneksi input baru berasal dari kolom input pada tampilan B.
-
InputMethodManagerService
memeriksa apakah koneksi harus disetujui. - Sebuah tampilan dipilih untuk IME. Jika tampilan B mendukung tampilan IME dan diperbolehkan menampilkannya, maka B digunakan. Jika tidak, tampilan perangkat utama akan dipilih.
- Jika tampilan yang dipilih bukan dari tampilan A, maka sambungan dibuat kembali.
InputMethodService
dimusnahkan dan kemudian dibuat lagi.
Pembatasan keamanan
Sistem tidak akan menampilkan IME pada tampilan virtual yang bukan milik sistem. Hal ini disebabkan oleh kekhawatiran keamanan bahwa aplikasi jahat dapat membuat tampilan virtual dengan dukungan dekorasi sistem yang diaktifkan dan membaca informasi sensitif pengguna dari permukaan, seperti prediksi pengetikan dan latar belakang khusus.
Penerapan
Di Android 9 (dan lebih rendah), IME hanya tersedia di layar default, seperti yang dijelaskan dalam Metode Input di Layar . Di Android 10 (dan lebih tinggi), pengguna dapat beralih di antara kolom teks masukan yang berbeda pada tampilan berbeda dengan mengalihkan fokus, dan jendela IME berpindah ke tampilan sekunder.
Implementasi di WindowManager
melacak jendela metode masukan (jendela IME tempat keyboard lunak digambar) dan target metode masukan (jendela tempat masukan IME masuk) untuk mengelola status IME.
Untuk InputMethodManagerService
(IMMS), tidak ada mekanisme bawaan lain yang dapat menyebarkan perubahan tampilan ke InputMethodService
(IMS) dan mengonfigurasi ulang tata letak keyboard saat runtime saat memindahkan fokus ke tampilan lain.
Untuk mencapai peralihan jendela IME antar tampilan, Android 10 mengimplementasikan hal berikut:
- Jendela IME dan target masukan kini dilacak per tampilan di
DisplayContent#mInputMethodWindow
danDisplayContent#mInputMethodTarget
, sehingga WindowManager (WM) dapat mengelola status fokus IME secara independen pada setiap tampilan. - Di sisi IMMS, ketika permintaan fokus klien aplikasi dari layar eksternal diterima melalui
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus
, pertama-tama ia akan melepaskan layanan metode masukan saat ini dan kemudian mengikat kembali layanan untuk memasang kembali IME baru token jendela untuk tampilan eksternal dionServiceConnected()
. - Di sisi IMS, setelah
IMS#attachToken
diterima, alur berikut terjadi:-
ContextImpl#updateDisplay
dipanggil untuk memperbarui tampilan konteks layanan diInputMethodService#attachToken()
. Ini memanggilViewGroup#addView()
untuk merevisi tata letak keyboard dan beradaptasi dengan tampilan target dengan memeriksa konteks saat ini. - Setelah
DisplayContent#setInputMethodWindowLocked()
dipanggil, implementasi mengirimkan perubahan konfigurasi tampilan tingkat proses menggunakan prosesWindowProcessController
ke IME untuk mengganti sumber daya dan menampilkan metrik. - Klien
InputMethodService
mendapatkan konfigurasi yang benar dengan metrik tampilan yang benar setelah panggilanonConfigurationChanged()
danViewGroup#addView()
untuk menginisialisasi ulang tampilan input.
-