دعم محرر أسلوب الإدخال

يتم توفير التحديثات التي تم إجراؤها على هذه المناطق الخاصة بالعرض أدناه:

يدعم Android 10 لوحة مفاتيح البرامج للتطبيقات التي تعمل على شاشة غير افتراضية.

التطبيقات التي تعمل على شاشة غير افتراضية

من حيث العرض الذي يعرض لوحة المفاتيح البرمجية لمحرر أسلوب الإدخال (IME) ، هناك أوضاع مختلفة. تظهر لوحة مفاتيح البرنامج على:

  • نفس الشاشة التي يظهر عليها التطبيق المركّز.
  • العرض الافتراضي أثناء تشغيل التطبيق المركز على شاشة غير افتراضية.
  • لا يوجد عرض على الإطلاق.

يحدد النظام الوضع الذي يجب استخدامه بناءً على إعدادات العرض التي يظهر عليها التطبيق المركز. لمزيد من التفاصيل ، انظر:

  • WindowManager#setDisplayImePolicy()
  • WindowManager#getDisplayImePolicy()

الشكل 1. لوحة مفاتيح برنامج IME كما تظهر على الشاشة الثانوية ، بما في ذلك التطبيق الهدف

يستخدم النظام محرر أسلوب إدخال واحد ، ولكن يمكنه التبديل بين شاشات العرض لمتابعة تركيز المستخدم. يتوقع Android 10 تلقائيًا أن يقوم جميع محرري أسلوب الإدخال من الطرف الأول والثالث بمراجعة التخطيط وتغيير الحجم وفقًا لحجم العرض الجديد عند إنشائه.

إذا كان هناك اتصال نشط على الشاشة A ، وكان حقل الإدخال يطلب تركيز الإدخال على الشاشة B ، فسيحدث التدفق التالي:

  1. يأتي اتصال الإدخال الجديد من حقل الإدخال المعروض على الشاشة B.
  2. يتحقق InputMethodManagerService مما إذا كان ينبغي الموافقة على الاتصال.
  3. يتم تحديد عرض لمحرر أسلوب الإدخال (IME). إذا كان العرض B يدعم إظهار محرر أسلوب الإدخال ويسمح بعرضه ، فسيتم استخدام B. خلاف ذلك ، يتم تحديد عرض الجهاز الأساسي.
  4. إذا لم تكن الشاشة المختارة من العرض A ، فسيتم إعادة الاتصال. تم إتلاف InputMethodService ثم إنشائه مرة أخرى.

قيود أمنية

لن يعرض النظام محرر أسلوب الإدخال (IME) على شاشات العرض الافتراضية التي لا يمتلكها النظام. ويرجع ذلك إلى مخاوف أمنية من أن أحد التطبيقات الضارة يمكن أن ينشئ شاشة افتراضية مع دعم زخارف النظام الممكّنة وقراءة المعلومات الحساسة للمستخدم من السطح ، مثل كتابة التنبؤات والخلفيات المخصصة.

تطبيق

في Android 9 (والإصدارات الأقدم) ، كان محرر أسلوب الإدخال متاحًا فقط على الشاشة الافتراضية ، كما هو موضح في طرق الإدخال على الشاشة . في Android 10 (والإصدارات الأحدث) ، يمكن للمستخدم التبديل بين حقول نص الإدخال المختلفة على شاشات مختلفة عن طريق تبديل التركيز ، وتنتقل نافذة محرر أسلوب الإدخال إلى شاشات العرض الثانوية.

يتتبع التنفيذ في WindowManager نافذة أسلوب الإدخال (نافذة محرر أسلوب الإدخال حيث يتم رسم لوحة المفاتيح الناعمة) وهدف أسلوب الإدخال (النافذة حيث ينتقل إدخال محرر أسلوب الإدخال) لإدارة حالة محرر أسلوب الإدخال.

بالنسبة لـ InputMethodManagerService (IMMS) ، لا توجد آلية مضمنة أخرى يمكنها نشر تغيير العرض إلى InputMethodService (IMS) وإعادة تكوين تخطيط لوحة المفاتيح في وقت التشغيل عند نقل التركيز إلى شاشة عرض أخرى.

لتحقيق تبديل نافذة محرر أسلوب الإدخال (IME) بين شاشات العرض ، ينفذ Android 10 ما يلي:

  • يتم الآن تعقب نافذة IME والإدخال الهدف لكل عرض في DisplayContent#mInputMethodWindow و DisplayContent#mInputMethodTarget ، بحيث يمكن لـ WindowManager (WM) إدارة حالة تركيز محرر أسلوب الإدخال بشكل مستقل عن كل شاشة عرض.
  • على جانب 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() لإعادة تهيئة عرض الإدخال.