في ما يلي التعديلات التي تم إجراؤها على هذه المناطق الخاصة بالشاشة:
يتيح نظام التشغيل Android 10 استخدام لوحة المفاتيح البرمجية للتطبيقات التي تعمل على شاشة غير تلقائية.
التطبيقات التي تعمل على شاشة غير تلقائية
هناك أوضاع مختلفة من حيث الشاشة التي تعرض لوحة المفاتيح البرمجية لـ "أداة التعديل لطريقة الإدخال" (IME). تظهر لوحة المفاتيح على الشاشة في:
- الشاشة نفسها التي يظهر عليها التطبيق محل التركيز.
- شاشة العرض التلقائية عندما يكون التطبيق الذي تم التركيز عليه قيد التشغيل على شاشة عرض غير تلقائية
- لا يتم عرض أي محتوى.
يحدّد النظام الوضع الذي سيتم استخدامه استنادًا إلى إعدادات الشاشة التي يظهر عليها التطبيق الذي يتم التركيز عليه. لمزيد من التفاصيل، يُرجى الاطّلاع على:
WindowManager#setDisplayImePolicy()
WindowManager#getDisplayImePolicy()
الشكل 1: لوحة مفاتيح برنامج IME كما تظهر على الشاشة الثانوية، بما في ذلك التطبيق المستهدف
يستخدم النظام معالجًا واحدًا للغة، ولكن يمكنه التبديل بين الشاشات لمتابعة تركيز المستخدم. يتوقّع نظام التشغيل Android 10 تلقائيًا أن تراجع جميع تطبيقات IME التابعة للجهات الخارجية والتطبيقات المضمّنة في الجهاز التنسيق وتعيد ضبط حجمه وفقًا لحجم الشاشة الجديد عند إنشائه.
إذا كان هناك اتصال نشط على الشاشة "أ"، وطلب حقل إدخال التركيز على الإدخال على الشاشة "ب"، يحدث المسار التالي:
- تأتي عملية ربط إدخال جديدة من حقل الإدخال على الشاشة "ب".
- يتحقق
InputMethodManagerService
مما إذا كان يجب الموافقة على عملية الربط. - يتم اختيار شاشة لنظام IME. إذا كان العرض "ب" يتيح عرض IME ويُسمح له بعرضه، يتم استخدام "ب". بخلاف ذلك، يتم اختيار شاشة الجهاز الأساسية.
- إذا لم تكن الشاشة المحدّدة من الشاشة "أ"، تتم إعادة تأسيس الربط. يتمّ إتلاف
InputMethodService
ثمّ إنشاؤه مرّة أخرى.
قيود الأمان
ولن يعرض النظام أداة IME على الشاشات الافتراضية التي لا يملكها النظام. ويعود السبب في ذلك إلى مخاوف أمنية من أنّه يمكن لتطبيق ضار إنشاء سطح شاشة افتراضي مع تفعيل دعم زخارف النظام قراءة معلومات حساسة للمستخدم من الشاشة، مثل اقتراحات الكتابة والخلفيات المخصّصة.
التنفيذ
في الإصدار 9 من نظام Android (الإصدارات الأقدم)، كانت أداة IME متاحة على الشاشة التلقائية فقط، كما هو موضّح في طرق الإدخال على الشاشة. في نظام التشغيل Android 10 (والإصدارات الأحدث)، يمكن للمستخدم التبديل بين حقول نص الإدخال المختلفة على شاشات مختلفة من خلال تبديل التركيز، وتتم نقل نافذة IME إلى الشاشات الثانوية.
يؤدي التنفيذ في WindowManager
إلى تتبُّع نافذة أسلوب الإدخال (نافذة أداة IME التي يتم فيها رسم لوحة المفاتيح الافتراضية) واستهداف أسلوب الإدخال (النافذة التي ينتقل إليها إدخال أداة IME) لإدارة حالة أداة IME.
بالنسبة إلى InputMethodManagerService
(IMMS)، لا يمكن لأي آلية مدمجة أخرى
نشر تغيير الشاشة إلى InputMethodService
(IMS) و
إعادة ضبط تنسيق لوحة المفاتيح في وقت التشغيل عند نقل التركيز إلى شاشة أخرى.
لتنفيذ عملية تبديل نافذة واجهة معالجة الإدخال بين الشاشات، ينفِّذ نظام التشغيل 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()
لإعادة بدء عرض الإدخال.
- يتم استدعاء