การอัปเดตที่ทํากับพื้นที่เฉพาะของจอแสดงผลมีดังนี้
Android 10 รองรับแป้นพิมพ์ซอฟต์แวร์สำหรับแอปที่ทำงานบนจอแสดงผลที่ไม่ใช่ค่าเริ่มต้น
แอปที่ทำงานบนจอแสดงผลที่ไม่ใช่ค่าเริ่มต้น
จอแสดงผลที่แสดงแป้นพิมพ์ซอฟต์แวร์ของเครื่องมือแก้ไขวิธีการป้อนข้อมูล (IME) มีโหมดต่างๆ แป้นพิมพ์ของซอฟต์แวร์ปรากฏบนอุปกรณ์ต่อไปนี้
- จอแสดงผลเดียวกันกับที่แอปที่โฟกัสปรากฏขึ้น
- ส่วนค่าเริ่มต้นจะแสดงขณะที่แอปที่โฟกัสกำลังทำงานบนจอแสดงผลที่ไม่ใช่ค่าเริ่มต้น
- ไม่มีการแสดงผลเลย
ระบบจะกำหนดโหมดที่จะใช้ตามการตั้งค่าของจอแสดงผลที่แอปที่โฟกัสปรากฏอยู่ โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อต่อไปนี้
WindowManager#setDisplayImePolicy()
WindowManager#getDisplayImePolicy()
รูปที่ 1 แป้นพิมพ์ซอฟต์แวร์ IME ตามที่ปรากฏในจอแสดงผลสำรอง รวมถึงแอปเป้าหมาย
ระบบจะใช้ IME รายการเดียว แต่สามารถสลับระหว่างจอแสดงผลเพื่อติดตามโฟกัสของผู้ใช้ Android 10 จะคาดหวังโดยอัตโนมัติว่า IME ของบุคคลที่หนึ่งและบุคคลที่สามทั้งหมดจะแก้ไขเลย์เอาต์และปรับขนาดตามขนาดการแสดงผลใหม่เมื่อสร้าง
หากมีการเชื่อมต่อที่ใช้งานอยู่ในจอแสดงผล A และช่องป้อนข้อมูลขอโฟกัสการป้อนข้อมูลในจอแสดงผล B ระบบจะดำเนินการตามขั้นตอนต่อไปนี้
- การเชื่อมต่ออินพุตใหม่มาจากช่องป้อนข้อมูลบนหน้าจอ B
InputMethodManagerService
จะตรวจสอบว่าการเชื่อมต่อควรได้รับการอนุมัติหรือไม่- เลือกการแสดงผลสำหรับ IME หากจอแสดงผล ข รองรับการแสดง IME และได้รับอนุญาตให้แสดง IME ระบบจะใช้ ข มิฉะนั้น ระบบจะเลือกจอแสดงผลของอุปกรณ์หลัก
- หากจอแสดงผลที่เลือกไม่ได้มาจากจอแสดงผล ก ระบบจะสร้างการเชื่อมต่ออีกครั้ง
InputMethodService
จะถูกทำลายแล้วจึงสร้างอีกครั้ง
ข้อจำกัดด้านความปลอดภัย
ระบบจะไม่แสดง IME ในจอแสดงผลเสมือนที่ไม่ได้เป็นของระบบ เนื่องด้วยข้อกังวลด้านความปลอดภัยที่ว่าแอปที่เป็นอันตรายอาจสร้างจอแสดงผลเสมือนจริงที่เปิดใช้การรองรับการตกแต่งระบบ และอ่านข้อมูลที่ละเอียดอ่อนของผู้ใช้จากแพลตฟอร์ม เช่น การคาดคะเนการพิมพ์และพื้นหลังที่กำหนดเอง
การใช้งาน
ใน Android 9 (และต่ำกว่า) IME จะใช้งานได้ในหน้าจอเริ่มต้นเท่านั้น ตามที่อธิบายไว้ในวิธีการป้อนข้อมูลบนหน้าจอ ใน Android 10 (และเวอร์ชันที่ใหม่กว่า) ผู้ใช้สามารถสลับไปมาระหว่างช่องป้อนข้อความต่างๆ ในจอแสดงผลต่างๆ ได้โดยการเปลี่ยนโฟกัส และหน้าต่าง IME จะย้ายไปยังจอแสดงผลรอง
การติดตั้งใช้งานใน WindowManager
จะติดตามหน้าต่างวิธีการป้อนข้อมูล (หน้าต่าง IME ที่วาดแป้นพิมพ์บนหน้าจอ) และเป้าหมายวิธีการป้อนข้อมูล (หน้าต่างที่ป้อนข้อมูล IME) เพื่อจัดการสถานะ IME
สำหรับ InputMethodManagerService
(IMMS) ไม่มีกลไกอื่นๆ ในตัวที่จะนำไปใช้กับ InputMethodService
(IMS) และกำหนดค่าเลย์เอาต์แป้นพิมพ์ใหม่ในรันไทม์เมื่อย้ายโฟกัสไปยังจอแสดงผลอื่นได้
Android 10 ใช้สิ่งต่อไปนี้เพื่อให้หน้าต่าง IME สลับไปมาระหว่างจอแสดงผล
- ตอนนี้ระบบจะติดตาม 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()
เพื่อเริ่มต้นใหม่มุมมองอินพุต