giriş yönlendirme

Android 9 ve önceki sürümlerde, ekranlar ve giriş aygıtları arasında herhangi bir ilişkilendirme mekanizması olmadığından, birden fazla ekranla dokunma yoluyla etkileşim kurmanın bir yolu yoktu. Örneğin, bir dokunmatik ekran, bir HDMI video çıkışı (Android'de bir ekran olarak kaydedilecek) ve dokunmatik ekran için bir USB çıkışı (bir giriş cihazı olarak kaydedilecek) sağlayabilir. Birden fazla cihaz bu şekilde bağlanmış olsaydı, hangi giriş cihazının hangi ekrana ait olduğunu belirlemenin bir yolu olmazdı. Aynı sorun, birden fazla yerleşik ekrana sahip katlanabilir cihazlar için de geçerlidir.

Android 10, hangi giriş cihazlarının hangi ekranlara ait olduğunu belirleyen bir mekanizma ekledi. İlişkilendirme, bağlantı noktasının ekranın bağlı olduğu fiziksel bağlantı noktasını ifade ettiği bağlantı noktası numaralarıyla yapılır.

Örneğin, bir Android aygıtında hdmi1 ve hdmi2 etiketli iki HDMI bağlantı noktası varsa ekran bağlantı noktası değerleri 1 ve 2 olabilir. Aynı fiziksel HDMI bağlantı noktasına farklı bir ekran (farklı bir ekran modeli veya üreticisi gibi) bağlandığında bile bağlantı noktası değerleri aynı kalır. Bu, cihaz üreticilerinin ekranların montajı ve yükseltilmesine yönelik talimatlar sağlamasına olanak tanır.

İlişkilendirme /vendor/etc/input-port-associations.xml dosyasında yapılandırılır. Örneğin:

<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>

Yukarıdaki örnekte display="0" ekranın bağlı olduğu bağlantı noktasını belirtir. input="usb-xhci-hcd.0.auto-1.1/input0" giriş cihazının bağlı olduğu bağlantı noktasını belirtir. Belirli cihazlarla ilişkili bağlantı noktalarını belirlemek için aşağıdaki terminal komutunu kullanın ve ardından bu cihazların Event Hub Durumundaki location özelliğini inceleyin.

adb shell dumpsys input

Çok sayıda cihaz bağlıysa, Giriş Dağıtıcı Durumundaki RecentQueue dizisini incelemek için belirli bir cihaza dokunun. Daha sonra en son olayı oluşturan cihazları tanımlayabilirsiniz. Daha sonra ilgili cihazı Olay Hub'ı Durumunda bulabilirsiniz.

Bağlı ekranlara atanan ekran bağlantı noktalarını belirlemek için adb shell dumpsys display kullanın ve ardından Görüntü Aygıtları altında her ekran için DisplayDeviceInfo address özelliğini arayın. Alternatif olarak, bağlı tüm ekranların kimlik bilgilerini dökmek için adb shell dumpsys SurfaceFlinger --display-id kullanın. Ayrıca bkz. Statik ekran tanımlayıcıları .

Belirli bir giriş cihazı için bir ilişkilendirme belirtirseniz ve ilgili ekran sistemde mevcut değilse, ilgili ekran görünene kadar giriş cihazı devre dışı bırakılır. İlişkilendirme yalnızca dokunmatik cihazlar için gerçekleştirilir.

Dinamik çoklu ekranlar için yönlendirme

Android 10, statik çoklu ekran cihazları kurmanıza olanak tanır. Dinamik ilişkilendirmeler henüz etkinleştirilmedi. Ancak bazı kullanım durumları, her zaman mevcut olmayan ekranlar ve giriş panelleri için yönlendirme bilgileri sağlanarak veya sanal giriş cihazları kullanılarak ve ardından bu sanal cihazlara ek yönlendirme bilgileri sağlanarak çözülebilir. Bir cihaz uygulaması şunları destekliyorsa:

  • Bağlantı istasyonuyla masaüstü benzeri bir deneyim elde edilirse, bağlantı istasyonuna bağlı giriş aksesuarından (bağlantı noktası tarafından benzersiz şekilde tanımlanır) harici ekrana (bağlantı noktasıyla tanımlanır) girişi hedeflemek için bir yönlendirme yapılandırması sağlanabilir.
  • Harici ekrana bağlandığında bir giriş kaynağı (dokunmatik yüzey gibi) görevi gören birincil ekran, ardından sanal dokunmatik panelden (benzersiz sanal kimlikle tanımlanır) harici ekrana (bağlantı noktasıyla tanımlanır) girişi hedeflemek için bir yönlendirme yapılandırması sağlanabilir. .

Uygulama

  • Fiziksel cihazlarda, ekranları dokunmatik ekranlarla eşleştirmek için giriş cihazının bağlı olduğu bağlantı noktası ve ekranın bağlı olduğu bağlantı noktası kullanılır.
  • Eşlemeler InputReaderConfiguration saklanır.
  • TouchInputMapper.mViewport , InputDevice.location için belirtilen bağlantı noktasıyla eşleşen görünüm portuna ayarlanır.
  • Eşleme dosyasında bir giriş aygıtı bağlantı noktası belirtildiyse ve şu anda eşleşen bir ekran bağlantı noktasına sahip bir görünüm kapısı yoksa, o bağlantı noktasındaki giriş aygıtı devre dışı bırakılır.
  • Belirli bir giriş cihazı için bir bağlantı noktası belirtilmemişse görünüm kapısı mevcut kurallara göre ayarlanır.
  • Giriş sürücülerinde çekirdek değişikliği yapılmasına gerek yoktur.
  • Giriş cihazı bağlantı noktaları EVIOCGPHYS ioctl kullanılarak belirlenir.