תמיכה בעורך שיטת קלט

עדכונים שבוצעו לאזורים הספציפיים האלה לתצוגה מסופקים להלן:

אנדרואיד 10 תומך במקלדת תוכנה עבור אפליקציות הפועלות על צג שאינו ברירת מחדל.

אפליקציות הפועלות על צג שאינו ברירת מחדל

מבחינת איזו תצוגה מציגה את מקלדת התוכנה של עורך שיטת הקלט (IME), ישנם מצבים שונים. מקלדת התוכנה מוצגת ב:

  • אותה תצוגה שבה מופיעה האפליקציה הממוקדת.
  • תצוגת ברירת מחדל בזמן שהאפליקציה הממוקדת פועלת בתצוגה שאינה ברירת מחדל.
  • אין תצוגה בכלל.

המערכת קובעת באיזה מצב להשתמש בהתבסס על הגדרות התצוגה עליה מופיעה האפליקציה הממוקדת. לפרטים נוספים, ראה:

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

איור 1. מקלדת תוכנת IME כפי שהיא מופיעה בתצוגה המשנית, כולל אפליקציית יעד

המערכת משתמשת ב-IME בודד, אך יכולה לעבור בין תצוגות כדי לעקוב אחר מיקוד המשתמש. אנדרואיד 10 מצפה אוטומטית מכל IME של צד ראשון ושליש לשנות את הפריסה ולשנות את הגודל בהתאם לגודל התצוגה החדש בעת יצירתם.

אם יש חיבור פעיל בתצוגה A, ושדה קלט מבקש מיקוד קלט בתצוגה B, אז מתרחשת הזרימה הבאה:

  1. חיבור קלט חדש מגיע משדה הקלט בתצוגה ב'.
  2. InputMethodManagerService בודק אם יש לאשר את החיבור.
  3. נבחר תצוגה עבור ה-IME. אם תצוגה B תומכת בהצגת ה-IME ומותר לה להציג אותו, אזי נעשה שימוש ב-B. אחרת, תצוגת ההתקן הראשית נבחרה.
  4. אם התצוגה שנבחרה אינה מתצוגה A, החיבור נוצר מחדש. InputMethodService נהרס ואז נוצר שוב.

הגבלת אבטחה

המערכת לא תציג IME בתצוגות וירטואליות שאינן בבעלות המערכת. זה נובע מחשש אבטחה שאפליקציה זדונית עלולה ליצור תצוגה וירטואלית עם תמיכה בעיטורי מערכת מופעלת ולקרוא מידע רגיש למשתמש מהמשטח, כגון תחזיות הקלדה ורקעים מותאמים אישית.

יישום

באנדרואיד 9 (ומטה), ה-IME היה זמין רק במסך ברירת המחדל, כמתואר בשיטות קלט על המסך . באנדרואיד 10 (ומעלה), משתמש יכול לעבור בין שדות טקסט קלט שונים בתצוגות שונות על ידי החלפת מיקוד, וחלון ה-IME עובר לצגים המשניים.

היישום ב- WindowManager עוקב אחר חלון שיטת הקלט (חלון ה-IME שבו מצוירת המקלדת הרכה) ומיעד שיטת הקלט (החלון אליו עובר קלט ה-IME) כדי לנהל את מצב ה-IME.

עבור InputMethodManagerService (IMMS), שום מנגנון מובנה אחר לא יכול להפיץ את שינוי התצוגה ל- InputMethodService (IMS) ולהגדיר מחדש את פריסת המקלדת בזמן ריצה בעת העברת הפוקוס לתצוגה אחרת.

כדי להשיג את מעבר חלון ה-IME בין צגים, אנדרואיד 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() כדי לאתחל מחדש את תצוגת הקלט.