Dukungan editor metode input

Pembaruan yang dilakukan pada area khusus tampilan tersebut tercantum di bawah:

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

Aplikasi yang berjalan di layar non-default

Dalam hal layar yang menampilkan keyboard software Input Method Editor (IME), ada berbagai mode. Keyboard software ditampilkan di:

  • Tampilan sama tempat aplikasi yang difokuskan muncul.
  • Tampilan Default saat aplikasi yang difokuskan berjalan di layar non-default.
  • Tidak ada tampilan sama sekali.

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

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

Gambar 1. Keyboard software IME seperti yang muncul di layar sekunder, termasuk aplikasi target

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

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

Pembatasan keamanan

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

Implementasi

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 tinggi), pengguna dapat beralih di antara kolom teks input yang berbeda pada tampilan yang berbeda dengan beralih fokus, dan jendela IME 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 ditempatkan) untuk mengelola status IME.

Untuk InputMethodManagerService (IMMS), tidak ada mekanisme bawaan lain yang dapat menerapkan perubahan tampilan ke InputMethodService (IMS) dan mengonfigurasi ulang tata letak keyboard saat runtime saat memindahkan fokus ke tampilan lain.

Untuk mencapai peralihan jendela IME di antara layar, Android 10 menerapkan hal berikut:

  • Jendela target input dan IME 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 layar eksternal diterima melalui ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus, klien akan terlebih dahulu membatalkan pengikatan layanan metode input saat ini, lalu mengikat ulang layanan untuk memasang kembali token jendela IME baru untuk layar 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 proses WindowProcessController ke IME guna mengganti resource dan metrik tampilan.
    • Klien InputMethodService mendapatkan konfigurasi yang benar dengan metrik tampilan yang benar setelah onConfigurationChanged() dan panggilan ViewGroup#addView() untuk melakukan inisialisasi ulang tampilan input.