Di Android 9 dan yang lebih rendah, tidak ada cara untuk berinteraksi dengan beberapa layar melalui sentuhan, karena tidak ada mekanisme pengaitan antara layar dan input perangkat. Misalnya, layar sentuh dapat menghasilkan output video HDMI (yang akan terdaftar sebagai tampilan di Android) dan output USB untuk layar sentuh (yang akan didaftarkan sebagai perangkat input). Jika beberapa perangkat terhubung dalam dengan cara ini, tidak akan ada cara untuk menentukan perangkat input mana yang memiliki yang ditampilkan. Masalah yang sama berlaku untuk perangkat foldable dengan beberapa layar.
Android 10 menambahkan mekanisme untuk menentukan input perangkat yang termasuk dalam layar tertentu. Pengaitan dilakukan oleh nomor porta di mana port mengacu pada port fisik yang terhubung dengan layar.
Misalnya, jika perangkat Android memiliki dua port HDMI berlabel hdmi1
dan hdmi2
, nilai port tampilan dapat menjadi 1
dan
2
. Nilai porta tetap sama meskipun tampilan yang berbeda
tersambung (seperti model tampilan atau produsen yang berbeda) ke perangkat
Port HDMI. Hal ini memungkinkan produsen perangkat memberikan petunjuk untuk merakit
dan meningkatkan versi layar.
Pengaitan tersebut dikonfigurasi di /vendor/etc/input-port-associations.xml
.
Contoh:
<ports>
<port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
<port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>
Pada contoh di atas, display="0"
menentukan port tempat
layar terhubung. input="usb-xhci-hcd.0.auto-1.1/input0"
menentukan porta yang terhubung dengan perangkat input. Untuk menentukan porta
yang terkait dengan perangkat tertentu, gunakan
perintah terminal berikut, lalu
tinjau properti location
perangkat tersebut di Status Event Hub.
adb shell dumpsys input
Jika banyak perangkat yang terhubung, ketuk perangkat tertentu untuk memeriksa
Array RecentQueue
dalam Status Input Dispatcher. Anda kemudian dapat mengidentifikasi
perangkat yang menghasilkan peristiwa terbaru. Anda kemudian dapat menemukan
perangkat yang sesuai di Status Event Hub.
Untuk menentukan port tampilan yang ditetapkan ke layar yang terhubung, gunakan
adb shell dumpsys display
, lalu cari address
DisplayDeviceInfo
untuk setiap
tampilan pada Perangkat Display.
Atau, gunakan adb shell dumpsys SurfaceFlinger --display-id
untuk membuang
informasi identifikasi untuk semua layar yang tersambung. Lihat juga
ID tampilan statis.
Jika Anda menetapkan pengaitan untuk perangkat input tertentu dan objek tidak ada dalam sistem, perangkat input dinonaktifkan sampai masing-masing akan muncul. Pengaitan hanya dilakukan untuk perangkat sentuh.
Pemilihan rute untuk multi-tampilan dinamis
Android 10 memungkinkan Anda menyiapkan multi-tampilan statis perangkat. Pengaitan dinamis belum diaktifkan. Namun, beberapa kasus penggunaan dapat ditangani dengan memberikan informasi {i>routing<i} untuk layar dan panel input yang selalu ada atau menggunakan perangkat input virtual dan kemudian menyediakan {i>routing<i} tambahan informasi ke perangkat virtual tersebut. Jika implementasi perangkat mendukung:
- Pengalaman seperti {i>desktop<i} dengan stasiun dok, maka konfigurasi perutean bisa yang disediakan untuk input target dari aksesori input yang terhubung ke dok (diidentifikasi secara unik menurut port) ke layar eksternal (diidentifikasi berdasarkan port).
- Layar utama yang berfungsi sebagai sumber input (seperti touchpad) saat terhubung ke layar eksternal, konfigurasi pemilihan rute dapat diberikan ke input target dari panel sentuh virtual (diidentifikasi oleh ID virtual unik) ke layar eksternal (yang diidentifikasi berdasarkan port).
Implementasi
- Untuk perangkat fisik, porta tempat perangkat input terhubung dan porta tempat layar terhubung, digunakan untuk mencocokkan tampilan dengan layar sentuh.
- Pemetaan disimpan di
InputReaderConfiguration
. TouchInputMapper.mViewport
disetel ke area pandang yang cocok port yang ditentukan untukInputDevice.location
.- Jika porta perangkat input ditentukan dalam file pemetaan, dan ada saat ini bukan area pandang yang memiliki porta tampilan yang cocok, maka input perangkat di porta tersebut akan dinonaktifkan.
- Jika porta tidak ditentukan untuk perangkat input tertentu, maka area pandang ditetapkan sesuai dengan aturan yang ada.
- Tidak ada perubahan {i>kernel<i} yang diperlukan di driver input.
- Port perangkat input ditentukan menggunakan EVIOCGPHYS ioctl.