في Android 9 والإصدارات الأقدم، لم يكن من الممكن التفاعل مع شاشات عرض متعددة من خلال اللمس، لأنه لم تكن هناك آلية ربط بين شاشات العرض وأجهزة الإدخال. على سبيل المثال، يمكن أن توفّر شاشة اللمس مخرج فيديو HDMI (يتم تسجيله كشاشة عرض على Android) ومخرج USB لشاشة اللمس (يتم تسجيله كجهاز إدخال). إذا تم توصيل أجهزة متعددة بهذه الطريقة، لن يكون من الممكن تحديد جهاز الإدخال الذي ينتمي إلى شاشة العرض. تنطبق المشكلة نفسها على الأجهزة القابلة للطي التي تتضمّن شاشات عرض متعددة مدمَجة.
أضاف Android 10 آلية لتحديد أجهزة الإدخال التي تنتمي إلى شاشات العرض. يتم الربط من خلال أرقام المنافذ، حيث يشير المنفذ إلى المنفذ الفعلي الذي يتم توصيل شاشة العرض به.
على سبيل المثال، إذا كان جهاز Android يتضمّن منفذَي HDMI يحملان التصنيفين hdmi1
وhdmi2، يمكن أن تكون قيم منفذ العرض 1 و
2. تظل قيم المنفذ كما هي حتى عند توصيل شاشة عرض مختلفة (مثل طراز أو مصنّع مختلف) بمنفذ HDMI الفعلي نفسه. يتيح ذلك لمصنّعي الأجهزة تقديم تعليمات لتجميع شاشات العرض وترقيتها.
يتم ضبط الربط في /vendor/etc/input-port-associations.xml.
على سبيل المثال:
<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>في المثال أعلاه، يشير display="0" إلى المنفذ الذي تم توصيل شاشة العرض به. يشير input="usb-xhci-hcd.0.auto-1.1/input0" إلى المنفذ الذي تم توصيل جهاز الإدخال به. لتحديد المنافذ المرتبطة بأجهزة معيّنة، استخدِم أمر المحطة الطرفية التالي، ثم راجِع السمة location لتلك الأجهزة في "حالة مركز الأحداث".
adb shell dumpsys input
إذا كانت هناك أجهزة متعددة متصلة، انقر على جهاز معيّن لفحص مصفوفة RecentQueue في "حالة أداة توزيع الإدخال". يمكنك بعد ذلك تحديد الأجهزة التي أنشأت الحدث الأخير. يمكنك بعد ذلك العثور على الجهاز المقابل في "حالة مركز الأحداث".
لتحديد منافذ العرض المخصّصة لشاشات العرض المتصلة، استخدِم adb shell dumpsys display ثم ابحث عن السمة address في DisplayDeviceInfo لكل شاشة عرض ضمن "أجهزة العرض".
بدلاً من ذلك، استخدِم adb shell dumpsys SurfaceFlinger --display-id لعرض معلومات التعريف لجميع شاشات العرض المتصلة. راجِع أيضًا
معرّفات شاشات العرض الثابتة.
إذا حدّدت ربطًا لجهاز إدخال معيّن ولم تكن شاشة العرض المقابلة متوفرة في النظام، يتم إيقاف جهاز الإدخال إلى أن تظهر شاشة العرض المعنيّة. لا يتم الربط إلا لأجهزة اللمس.
تحديد أفضل مسار لشاشات العرض المتعددة الديناميكية
يتيح لك Android 10 إعداد أجهزة ثابتة متعددة شاشات العرض. لم يتم تفعيل عمليات الربط الديناميكية بعد. مع ذلك، يمكن معالجة بعض حالات الاستخدام من خلال توفير معلومات التوجيه لشاشات العرض ولوحات الإدخال التي لا تكون متوفرة دائمًا أو باستخدام أجهزة إدخال افتراضية ثم توفير معلومات توجيه إضافية لتلك الأجهزة الافتراضية. إذا كان تنفيذ الجهاز يتيح ما يلي:
- تجربة مشابهة لتجربة الكمبيوتر المكتبي باستخدام محطة إرساء، يمكن توفير إعداد توجيه لاستهداف الإدخال من جهاز إدخال ملحق متصل بمحطة الإرساء (يتم تعريفه بشكل فريد من خلال المنفذ) إلى شاشة العرض الخارجية (يتم تعريفها من خلال المنفذ).
- شاشة رئيسية تعمل كمصدر إدخال (مثل لوحة اللمس) عند توصيلها بشاشة العرض الخارجية، يمكن توفير إعداد توجيه لاستهداف الإدخال من لوحة اللمس الافتراضية (يتم تعريفها من خلال معرّف افتراضي فريد) إلى شاشة العرض الخارجية (يتم تعريفها من خلال المنفذ).
التنفيذ
- بالنسبة إلى الأجهزة الفعلية، يتم استخدام المنفذ الذي تم توصيل جهاز الإدخال به والمنفذ الذي تم توصيل شاشة العرض به لمطابقة شاشات العرض مع شاشات اللمس.
- يتم تخزين عمليات الربط في
InputReaderConfiguration. - يتم ضبط
TouchInputMapper.mViewportعلى إطار العرض الذي يتطابق مع المنفذ المحدّد لـInputDevice.location. - إذا تم تحديد منفذ جهاز إدخال في ملف الربط، ولم يكن هناك حاليًا إطار عرض يتضمّن منفذ عرض مطابقًا، يتم إيقاف جهاز الإدخال على هذا المنفذ.
- إذا لم يتم تحديد منفذ لجهاز إدخال معيّن، يتم ضبط إطار العرض وفقًا للقواعد الحالية.
- لا يلزم إجراء أي تغييرات على النواة في برامج تشغيل الإدخال.
- يتم تحديد منافذ جهاز الإدخال باستخدام الأمر ioctl EVIOCGPHYS.