Perutean Masukan

Di Android 9 dan yang lebih rendah, tidak ada cara untuk berinteraksi dengan beberapa layar melalui sentuhan, karena tidak ada mekanisme asosiasi antara layar dan perangkat input. Misalnya, tampilan layar sentuh dapat menyediakan output video HDMI (yang akan didaftarkan sebagai tampilan di Android) dan output USB untuk layar sentuh (yang akan didaftarkan sebagai perangkat input). Jika beberapa perangkat terhubung dengan cara ini, tidak akan ada cara untuk menentukan perangkat input mana yang termasuk dalam tampilan mana. Masalah yang sama berlaku untuk perangkat yang dapat dilipat dengan beberapa layar bawaan.

Android 10 menambahkan mekanisme untuk menentukan perangkat input mana yang termasuk dalam tampilan mana. Asosiasi dilakukan dengan nomor port di mana port mengacu pada port fisik tempat layar terhubung.

Misalnya, jika perangkat Android memiliki dua port HDMI berlabel hdmi1 dan hdmi2 , maka nilai port tampilan bisa menjadi 1 dan 2 . Nilai port tetap sama meskipun layar yang berbeda tersambung (seperti model layar atau pabrikan yang berbeda) ke port HDMI fisik yang sama. Hal ini memungkinkan produsen perangkat memberikan instruksi untuk merakit dan meningkatkan tampilan.

Asosiasi dikonfigurasi di /vendor/etc/input-port-associations.xml . Sebagai 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>

Dalam contoh di atas, display="0" menentukan port yang terhubung dengan layar. input="usb-xhci-hcd.0.auto-1.1/input0" menentukan port yang terhubung dengan perangkat input. Untuk menentukan port yang terkait dengan perangkat tertentu, gunakan perintah terminal berikut ini, lalu tinjau properti location perangkat tersebut di Status Hub Peristiwa.

adb shell dumpsys input

Jika banyak perangkat yang terhubung, ketuk perangkat tertentu untuk memeriksa larik RecentQueue di Status Dispatcher Input. Anda kemudian dapat mengidentifikasi perangkat yang menghasilkan peristiwa terbaru. Anda kemudian dapat menemukan perangkat yang sesuai di Status Hub Acara.

Untuk menentukan port tampilan yang ditetapkan ke tampilan yang terhubung, gunakan adb shell dumpsys display dan kemudian cari properti address DisplayDeviceInfo untuk setiap tampilan di bawah Display Devices. Atau, gunakan adb shell dumpsys SurfaceFlinger --display-id untuk membuang informasi identifikasi untuk semua layar yang terhubung. Lihat juga Pengidentifikasi tampilan statis .

Jika Anda menentukan asosiasi untuk perangkat input tertentu dan tampilan terkait tidak ada di sistem, perangkat input dinonaktifkan hingga tampilan terkait muncul. Asosiasi dilakukan hanya untuk perangkat sentuh.

Perutean untuk multi-tampilan dinamis

Android 10 memungkinkan Anda menyiapkan perangkat multi-display statis. Asosiasi dinamis belum diaktifkan. Namun, beberapa kasus penggunaan dapat diatasi dengan memberikan informasi perutean untuk tampilan dan panel input yang tidak selalu ada atau menggunakan perangkat input virtual dan kemudian memberikan informasi perutean tambahan ke perangkat virtual tersebut. Jika implementasi perangkat mendukung:

  • Pengalaman seperti desktop dengan stasiun dok, kemudian konfigurasi perutean dapat diberikan untuk menargetkan input dari aksesori input yang terhubung ke dok (diidentifikasi secara unik oleh port) ke layar eksternal (diidentifikasi oleh port).
  • Layar utama bertindak sebagai sumber input (seperti touchpad) saat terhubung ke layar eksternal, kemudian konfigurasi perutean dapat diberikan untuk menargetkan input dari panel sentuh virtual (diidentifikasi dengan ID virtual unik) ke layar eksternal (diidentifikasi oleh port) .

Penerapan

  • Untuk perangkat fisik, port yang terhubung dengan perangkat input dan port yang terhubung dengan layar, digunakan untuk mencocokkan layar dengan layar sentuh.
  • Pemetaan disimpan di InputReaderConfiguration .
  • TouchInputMapper.mViewport diatur ke viewport yang cocok dengan port yang ditentukan untuk InputDevice.location .
  • Jika port perangkat input ditentukan dalam file pemetaan, dan saat ini tidak ada area pandang yang memiliki port tampilan yang cocok, maka perangkat input pada port tersebut dinonaktifkan.
  • Jika port tidak ditentukan untuk perangkat input tertentu, maka viewport diatur sesuai dengan aturan yang ada.
  • Tidak ada perubahan kernel yang diperlukan dalam driver input.
  • Port perangkat input ditentukan menggunakan EVIOCGPHYS ioctl.