في ما يلي التعديلات التي تم إجراؤها على هذه المناطق الخاصة بالشاشة:
يتيح نظام التشغيل Android 10 استخدام لوحة المفاتيح البرمجية للتطبيقات التي تعمل على شاشة غير تلقائية.
التطبيقات التي تعمل على شاشة غير تلقائية
هناك أوضاع مختلفة لشاشة عرض لوحة المفاتيح البرمجية في "أداة تعديل طريقة الإدخال" (IME). تظهر لوحة المفاتيح على الشاشة في:
- الشاشة نفسها التي يظهر عليها التطبيق المُركّز عليه
- شاشة العرض التلقائية عندما يكون التطبيق الذي تم التركيز عليه قيد التشغيل على شاشة عرض غير تلقائية
- لا يتم عرض أي محتوى.
يحدّد النظام الوضع الذي سيتم استخدامه استنادًا إلى إعدادات الشاشة التي يظهر عليها التطبيق الذي يتم التركيز عليه. لمزيد من التفاصيل، يُرجى الاطّلاع على:
WindowManager#setDisplayImePolicy()
WindowManager#getDisplayImePolicy()
الشكل 1: لوحة المفاتيح البرمجية لنظام IME كما تظهر على الشاشة الثانوية، بما في ذلك التطبيق المستهدَف
يستخدم النظام معالجًا متعدّد اللغات واحدًا، ولكن يمكنه التبديل بين الشاشات لمتابعة تركيز المستخدم. يتوقّع نظام التشغيل Android 10 تلقائيًا أن تراجع جميع تطبيقات IME التابعة للجهات الخارجية والتطبيقات المضمّنة في الجهاز التنسيق وتغيّر حجمه وفقًا لحجم الشاشة الجديد عند إنشائه.
إذا كان هناك اتصال نشط على الشاشة "أ"، وطلب حقل إدخال التركيز على الإدخال على الشاشة "ب"، يحدث المسار التالي:
- تأتي عملية ربط إدخال جديدة من حقل الإدخال على الشاشة "ب".
- يتحقق
InputMethodManagerService
مما إذا كان يجب الموافقة على عملية الربط. - يتم اختيار شاشة لنظام IME. إذا كان العرض "ب" يتيح عرض IME ويُسمح له بعرضه، يتم استخدام العرض "ب". بخلاف ذلك، يتم اختيار شاشة الجهاز الأساسية.
- إذا لم تكن الشاشة المحدّدة من الشاشة "أ"، تتم إعادة تأسيس الاتصال. يتمّ إتلاف
InputMethodService
ثمّ إنشاؤه مرّة أخرى.
قيود الأمان
لن يعرض النظام IME على الشاشات الافتراضية التي لا يملكها النظام. ويعود السبب في ذلك إلى مخاوف أمنية من أنّه يمكن لتطبيق ضار إنشاء سطح شاشة افتراضي مع تفعيل دعم زخارف النظام قراءة معلومات حساسة للمستخدم من الشاشة، مثل اقتراحات الكتابة والخلفيات المخصّصة.
التنفيذ
في الإصدار 9 من نظام Android (والإصدارات الأقدم)، كان أسلوب إدخال النصوص متاحًا فقط على الشاشة التلقائية، كما هو описан في طرق الإدخال على الشاشة. في Android 10 (والإصدارات الأحدث)، يمكن للمستخدم التبديل بين حقول نص الإدخال المختلفة على شاشات مختلفة من خلال تبديل التركيز، وتتم نقل نافذة IME إلى الشاشات الثانوية.
يتتبّع التنفيذ في WindowManager
نافذة أسلوب الإدخال (نافذة أسلوب الإدخال التي يتم فيها رسم لوحة المفاتيح المتوفّرة على الشاشة) وهدف أسلوب الإدخال (النافذة التي يتم فيها إدخال أسلوب الإدخال) لإدارة حالة أسلوب الإدخال.
بالنسبة إلى InputMethodManagerService
(IMMS)، لا يمكن لأي آلية مدمجة أخرى
نشر تغيير الشاشة إلى InputMethodService
(IMS) و
إعادة ضبط تنسيق لوحة المفاتيح أثناء التشغيل عند نقل التركيز إلى شاشة أخرى.
لتنفيذ عملية تبديل نافذة IME بين الشاشات، ينفِّذ نظام التشغيل Android 10 ما يلي:
- يتم الآن تتبُّع IME ونافذة استهداف الإدخال لكل شاشة في
DisplayContent#mInputMethodWindow
وDisplayContent#mInputMethodTarget
، حتى يتمكّن WindowManager (WM) من إدارة حالة تركيز IME بشكل مستقل عن كل شاشة. - من جانب IMMS، عند تلقّي طلب تركيز عميل التطبيق من الشاشة الخارجية
من خلال
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus
، يتم أولاً إلغاء ربط خدمة أسلوب الإدخال الحالية ثم إعادة ربط الخدمة لإعادة إرفاق رمز علامة تبويب نافذة IME الجديد للشاشة الخارجية فيonServiceConnected()
. - من جانب IMS، بعد استلام
IMS#attachToken
، يتم تنفيذ الخطوات التالية:- يتمّ استدعاء
ContextImpl#updateDisplay
لتعديل عرض سياق الخدمة فيInputMethodService#attachToken()
. يؤدي ذلك إلى استدعاءViewGroup#addView()
لمراجعة تنسيق لوحة المفاتيح والتكيّف مع الشاشة المستهدَفة من خلال التحقّق من السياق الحالي. - بعد استدعاء
DisplayContent#setInputMethodWindowLocked()
، يُرسِل التنفيذ تغييرات إعدادات العرض على مستوى العملية باستخدامWindowProcessController
إلى عملية IME لإلغاء الموارد ومقاييس العرض. - يحصل برنامج
InputMethodService
على الإعداد الصحيح مع مقاييس العرض الصحيحة بعدonConfigurationChanged()
و طلبViewGroup#addView()
لإعادة بدء عرض الإدخال.
- يتمّ استدعاء