Di Android 9 dan yang lebih lama, tidak ada cara untuk berinteraksi dengan beberapa layar melalui sentuhan, karena tidak ada mekanisme pengaitan antara layar dan perangkat input. Misalnya, layar sentuh dapat memberikan output video HDMI (yang akan terdaftar sebagai tampilan di Android) dan output USB untuk layar sentuh (yang akan terdaftar sebagai perangkat input). Jika beberapa perangkat terhubung dengan cara ini, tidak akan ada cara untuk menentukan perangkat input mana yang merupakan milik layar mana. Masalah yang sama berlaku untuk perangkat foldable dengan beberapa layar bawaan.
Android 10 menambahkan mekanisme untuk menentukan perangkat input mana yang termasuk dalam tampilan mana. Pengaitan dilakukan oleh nomor port dengan 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 berupa 1
dan
2
. Nilai port tetap sama meskipun layar yang berbeda
terhubung (seperti model tampilan atau produsen yang berbeda) ke port HDMI
fisik yang sama. Hal ini memungkinkan produsen perangkat memberikan petunjuk untuk merakit
dan mengupgrade layar.
Pengaitan 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 yang
terhubung dengan layar. input="usb-xhci-hcd.0.auto-1.1/input0"
menentukan port tempat perangkat input terhubung. Untuk menentukan port
yang terkait dengan perangkat tertentu, gunakan perintah terminal berikut, lalu
tinjau propertilocation
perangkat tersebut di Status Event Hub.
adb shell dumpsys input
Jika banyak perangkat terhubung, ketuk perangkat tertentu untuk memeriksa
array RecentQueue
di Status Input Dispatcher. Kemudian, Anda dapat mengidentifikasi
perangkat yang menghasilkan peristiwa terbaru. Kemudian, Anda 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 properti address
DisplayDeviceInfo
untuk setiap layar di bagian Perangkat Layar.
Atau, gunakan adb shell dumpsys SurfaceFlinger --display-id
untuk membuang
informasi identifikasi untuk semua layar yang terhubung. Lihat juga
ID tampilan statis.
Jika Anda menentukan pengaitan untuk perangkat input tertentu dan layar yang sesuai tidak ada di sistem, perangkat input akan dinonaktifkan hingga layar tersebut muncul. Pengaitan hanya dilakukan untuk perangkat sentuh.
Pemilihan rute untuk multi-tampilan dinamis
Android 10 memungkinkan Anda menyiapkan perangkat multi-tampilan statis. Penautan dinamis belum diaktifkan. Namun, beberapa kasus penggunaan dapat ditangani dengan memberikan informasi pemilihan rute untuk layar dan panel input yang tidak selalu ada atau menggunakan perangkat input virtual, lalu memberikan informasi pemilihan rute tambahan ke perangkat virtual tersebut. Jika penerapan perangkat mendukung:
- Pengalaman seperti desktop dengan docking station, maka konfigurasi pemilihan rute dapat disediakan untuk menargetkan input dari aksesori input yang terhubung ke dok (diidentifikasi secara unik berdasarkan port) ke layar eksternal (yang diidentifikasi berdasarkan port).
- Layar utama bertindak sebagai sumber input (seperti touchpad) saat terhubung ke layar eksternal, lalu konfigurasi pemilihan rute dapat disediakan untuk menargetkan input dari panel sentuh virtual (diidentifikasi oleh ID virtual unik) ke layar eksternal (diidentifikasi oleh port).
Implementasi
- Untuk perangkat fisik, port tempat terhubungnya perangkat input dan port yang terhubung dengan layar, digunakan untuk mencocokkan tampilan dengan layar sentuh.
- Pemetaan disimpan di
InputReaderConfiguration
. TouchInputMapper.mViewport
ditetapkan ke area pandang yang cocok dengan port yang ditentukan untukInputDevice.location
.- Jika port perangkat input ditentukan dalam file pemetaan, dan saat ini tidak ada area tampilan yang memiliki port tampilan yang cocok, perangkat input di port tersebut akan dinonaktifkan.
- Jika port tidak ditentukan untuk perangkat input tertentu, area pandang akan ditetapkan sesuai dengan aturan yang ada.
- Tidak ada perubahan kernel yang diperlukan di driver input.
- Port perangkat input ditentukan menggunakan ioctl EVIOCGPHYS.