به روز رسانی های انجام شده در این مناطق ویژه نمایشگر در زیر ارائه شده است:
اندروید 10 از صفحه کلید نرم افزاری برای برنامه هایی که روی صفحه نمایش غیر پیش فرض اجرا می شوند، پشتیبانی می کند.
برنامههایی که روی نمایشگر غیر پیشفرض اجرا میشوند
از نظر اینکه صفحه کلید نرم افزار Input Method Editor (IME) را نمایش می دهد، حالت های مختلفی وجود دارد. صفحه کلید نرم افزار در زیر نشان داده شده است:
- همان صفحه نمایشی که برنامه متمرکز روی آن ظاهر می شود.
- نمایش پیشفرض در حالی که برنامه متمرکز بر روی یک نمایشگر غیر پیشفرض اجرا میشود.
- اصلا نمایشی نداره
سیستم بر اساس تنظیمات صفحه نمایشی که برنامه متمرکز روی آن ظاهر می شود، تعیین می کند که از کدام حالت استفاده کند. برای جزئیات بیشتر، نگاه کنید به:
-
WindowManager#setDisplayImePolicy()
-
WindowManager#getDisplayImePolicy()
شکل 1. صفحه کلید نرم افزار IME همانطور که در صفحه نمایش ثانویه ظاهر می شود، از جمله برنامه هدف
این سیستم از یک IME واحد استفاده می کند، اما می تواند بین نمایشگرها جابجا شود تا تمرکز کاربر را دنبال کند. اندروید 10 به طور خودکار انتظار دارد که همه IME های شخص اول و ثالث هنگام ایجاد طرح بندی و اندازه نمایشگر جدید را تغییر دهند.
اگر یک اتصال فعال در نمایشگر A وجود داشته باشد و یک فیلد ورودی فوکوس ورودی را روی نمایشگر B درخواست کند، جریان زیر رخ می دهد:
- یک اتصال ورودی جدید از قسمت ورودی در صفحه نمایش B می آید.
-
InputMethodManagerService
بررسی می کند که آیا اتصال باید تأیید شود. - یک نمایشگر برای IME انتخاب شده است. اگر نمایشگر B از نمایش IME پشتیبانی کند و اجازه نمایش آن را داشته باشد، از B استفاده می شود. در غیر این صورت، نمایشگر اصلی دستگاه انتخاب می شود.
- اگر نمایشگر انتخاب شده از صفحه نمایش A نباشد، اتصال مجدد برقرار می شود.
InputMethodService
از بین می رود و دوباره ایجاد می شود.
محدودیت امنیتی
سیستم IME را در نمایشگرهای مجازی که متعلق به سیستم نیستند نشان نمی دهد. این به دلیل یک نگرانی امنیتی است که یک برنامه مخرب می تواند یک نمایشگر مجازی با پشتیبانی از تزئینات سیستم فعال ایجاد کند و اطلاعات حساس کاربر را از روی سطح بخواند، مانند پیش بینی های تایپ و پس زمینه های سفارشی.
پیاده سازی
در Android 9 (و پایینتر)، IME فقط در صفحه پیشفرض موجود بود، همانطور که در روشهای ورودی روی صفحه توضیح داده شده است. در اندروید 10 (و بالاتر)، کاربر میتواند با تغییر فوکوس بین فیلدهای متن ورودی مختلف در نمایشگرهای مختلف جابهجا شود و پنجره IME به نمایشگرهای ثانویه منتقل میشود.
پیاده سازی در WindowManager
پنجره روش ورودی (پنجره IME که در آن صفحه کلید نرم ترسیم شده است) و هدف روش ورودی (پنجره ای که ورودی IME در آن می رود) را برای مدیریت وضعیت IME ردیابی می کند.
برای InputMethodManagerService
(IMMS)، هیچ مکانیزم داخلی دیگری نمی تواند تغییر صفحه نمایش را به InputMethodService
(IMS) منتشر کند و هنگام انتقال فوکوس به نمایشگر دیگری، طرح صفحه کلید را در زمان اجرا پیکربندی مجدد کند.
برای دستیابی به سوئیچ پنجره IME بین نمایشگرها، Android 10 موارد زیر را اجرا می کند:
- IME و پنجره هدف ورودی اکنون در هر نمایشگر در
DisplayContent#mInputMethodWindow
وDisplayContent#mInputMethodTarget
ردیابی می شوند، به طوری که WindowManager (WM) می تواند وضعیت فوکوس IME را مستقل از هر نمایشگر مدیریت کند. - در سمت IMMS، هنگامی که درخواست فوکوس مشتری برنامه از صفحه نمایش خارجی از طریق
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus
دریافت می شود، ابتدا سرویس متد ورودی فعلی را مجدداً به ME باز می کند. رمز پنجره برای خارجی نمایش درonServiceConnected()
. - در سمت IMS، پس از دریافت
IMS#attachToken
، جریان زیر رخ می دهد:-
ContextImpl#updateDisplay
برای به روز رسانی صفحه نمایش زمینه سرویس درInputMethodService#attachToken()
فراخوانی می شود. اینViewGroup#addView()
فراخوانی میکند تا طرحبندی صفحهکلید را اصلاح کند و با صفحهنمایش مورد نظر سازگار شود و زمینه فعلی را بررسی کند. - پس از فراخوانی
DisplayContent#setInputMethodWindowLocked()
، پیاده سازی تغییرات پیکربندی نمایشگر در سطح فرآیند را با استفاده ازWindowProcessController
به فرآیند IME ارسال می کند تا منابع و معیارهای نمایش را لغو کند. - سرویس گیرنده
InputMethodService
پیکربندی صحیح را با معیارهای نمایش صحیح پس ازonConfigurationChanged()
و فراخوانیViewGroup#addView()
برای شروع مجدد نمای ورودی دریافت می کند.
-