Dukungan editor metode input

Update yang dilakukan pada area khusus tampilan ini disediakan di bawah:

Android 10 mendukung keyboard virtual untuk aplikasi yang berjalan di tampilan non-default.

Aplikasi yang berjalan di tampilan non-default

Terkait tampilan yang menampilkan keyboard virtual Editor Metode Input (IME), ada berbagai mode. Keyboard virtual ditampilkan di:

  • Tampilan yang sama dengan tampilan aplikasi yang difokuskan.
  • Tampilan default saat aplikasi yang difokuskan berjalan di tampilan non-default.
  • Tidak ada tampilan sama sekali.

Sistem menentukan mode yang akan digunakan berdasarkan setelan tampilan tempat aplikasi yang difokuskan muncul. Untuk mengetahui detail selengkapnya, lihat:

  • WindowManager#setDisplayImePolicy()
  • WindowManager#getDisplayImePolicy()

Gambar 1. Keyboard virtual IME seperti yang muncul di tampilan sekunder, termasuk aplikasi target

Sistem menggunakan satu IME, tetapi dapat beralih 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 di tampilan A, dan kolom input meminta fokus input di tampilan B, alur berikut akan terjadi:

  1. Koneksi input baru berasal dari kolom input di tampilan B.
  2. InputMethodManagerService memeriksa apakah koneksi harus disetujui.
  3. Tampilan dipilih untuk IME. Jika tampilan B mendukung tampilan IME dan diizinkan untuk menampilkannya, B akan digunakan. Jika tidak, tampilan perangkat utama akan dipilih.
  4. Jika tampilan yang dipilih bukan dari tampilan A, koneksi akan dibuat ulang. InputMethodService dihancurkan, lalu dibuat lagi.

Batasan keamanan

Sistem tidak akan menampilkan IME di tampilan virtual yang bukan milik sistem. Hal ini disebabkan oleh masalah keamanan bahwa aplikasi berbahaya dapat membuat tampilan virtual dengan dukungan dekorasi sistem yang diaktifkan dan membaca informasi sensitif pengguna dari platform, seperti prediksi pengetikan dan latar belakang kustom.

Penerapan

Di Android 9 (dan yang lebih lama), IME hanya tersedia di layar default, seperti yang dijelaskan dalam Metode Input di Layar. Di Android 10 (dan yang lebih baru), pengguna dapat beralih antar-kolom teks input yang berbeda di tampilan yang berbeda dengan beralih fokus, dan jendela IME akan berpindah ke tampilan sekunder.

Implementasi di WindowManager melacak jendela metode input (jendela IME tempat keyboard virtual digambar) dan target metode input (jendela tempat input 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 menerapkan hal berikut:

  • Jendela target IME dan input kini dilacak per tampilan di DisplayContent#mInputMethodWindow dan DisplayContent#mInputMethodTarget, sehingga WindowManager (WM) dapat mengelola status fokus IME secara independen dari setiap tampilan.
  • Di sisi IMMS, saat permintaan fokus klien aplikasi dari tampilan eksternal diterima melalui ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus, layanan metode input saat ini akan dilepas terlebih dahulu, lalu layanan akan diikat kembali untuk melampirkan token jendela IME baru untuk tampilan eksternal di onServiceConnected().
  • Di sisi IMS, setelah IMS#attachToken diterima, alur berikut akan terjadi:
    • ContextImpl#updateDisplay dipanggil untuk memperbarui tampilan konteks layanan di InputMethodService#attachToken(). Tindakan ini memanggil ViewGroup#addView() untuk merevisi tata letak keyboard dan beradaptasi dengan tampilan target yang memeriksa konteks saat ini.
    • Setelah DisplayContent#setInputMethodWindowLocked() dipanggil, implementasi akan mengirimkan perubahan konfigurasi tampilan tingkat proses menggunakan WindowProcessController ke proses IME untuk mengganti metrik resource dan tampilan.
    • Klien InputMethodService mendapatkan konfigurasi yang benar dengan metrik tampilan yang benar setelah onConfigurationChanged() dan panggilan ViewGroup#addView() untuk menginisialisasi ulang tampilan input.