Dukungan editor metode masukan

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:

  1. Koneksi input baru berasal dari kolom input pada tampilan B.
  2. InputMethodManagerService memeriksa apakah koneksi harus disetujui.
  3. Sebuah tampilan dipilih untuk IME. Jika tampilan B mendukung tampilan IME dan diperbolehkan menampilkannya, maka B digunakan. Jika tidak, tampilan perangkat utama akan dipilih.
  4. 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 dan DisplayContent#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 di onServiceConnected() .
  • Di sisi IMS, setelah IMS#attachToken diterima, alur berikut terjadi:
    • ContextImpl#updateDisplay dipanggil untuk memperbarui tampilan konteks layanan di InputMethodService#attachToken() . Ini memanggil ViewGroup#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 proses WindowProcessController ke IME untuk mengganti sumber daya dan menampilkan metrik.
    • Klien InputMethodService mendapatkan konfigurasi yang benar dengan metrik tampilan yang benar setelah panggilan onConfigurationChanged() dan ViewGroup#addView() untuk menginisialisasi ulang tampilan input.