Giriş Yöntemi Düzenleyici Desteği

Bu ekrana özel alanlarda yapılan güncellemeler aşağıda verilmiştir:

Android 10 destekler yazılım klavyesi varsayılan olmayan bir ekranda çalışan uygulamalar için.

Varsayılan olmayan bir ekranda çalışan uygulamalar

Giriş Yöntemi Düzenleyicisi'nin (IME) yazılım klavyesini gösteren ekran açısından, iki farklı mod vardır. Yazılım klavyesi şurada gösterilir:

  • Aynı ekran üzerinde odaklanmış uygulama görünür.
  • Odaklanmış uygulaması varsayılan olmayan bir ekranda çalışırken Varsayılan ekran.

Sistem, odaklanılan uygulamanın göründüğü ekranın ayarlarına göre hangi modun kullanılacağını belirler. Daha fazla ayrıntı için bkz.

  • DisplayWindowSettings#shouldShowImeLocked()
  • DisplayWindowSettings#setShouldShowImeLocked()

Hedef uygulaması da dahil, ikincil ekranda göründüğü gibi Şekil 1. IME yazılım klavyesi

Sistem tek bir IME kullanır, ancak kullanıcı odağını takip etmek için ekranlar arasında geçiş yapabilir. Android 10, tüm birinci ve üçüncü taraf IME'lerin düzeni otomatik olarak gözden geçirmesini ve oluşturulduğunda yeni ekran boyutuna göre yeniden boyutlandırmasını bekler.

A ekranında aktif bir bağlantı varsa ve bir giriş alanı, B ekranına giriş odağını talep ederse, aşağıdaki akış gerçekleşir:

  1. B ekranındaki giriş alanından yeni bir giriş bağlantısı gelir.
  2. InputMethodManagerService çek bağlantı onaylanmış olması gerekir eğer.
  3. IME için bir ekran seçilir. B ekranı IME'nin gösterilmesini destekliyorsa ve göstermesine izin veriliyorsa, B kullanılır. Aksi takdirde, birincil cihaz ekranı seçilir.
  4. Seçilen ekran A ekranından değilse, bağlantı yeniden kurulur. InputMethodService tahrip ve yeniden oluşturulur.

Güvenlik kısıtlaması

Sistem, sisteme ait olmayan sanal ekranlarda bir IME göstermez. Bu kötü niyetli bir uygulama etkin olan sanal bir görüntü oluşturmak verebilecek bir güvenlik endişesi nedeniyle Sistemi Süsleri Destek ve böyle yazarak tahminleri ve özel arka olarak yüzeyden kullanıcı hassas bilgileri okuyun.

uygulama

Açıklandığı gibi Android 9 (ve daha düşük) olarak, IME, varsayılan ekranda sadece sunulmuştu Ekran Girdi yöntemlerle . Android 10'da (ve sonraki sürümlerde), bir kullanıcı odağı değiştirerek farklı ekranlardaki farklı giriş metin alanları arasında geçiş yapabilir ve IME penceresi ikincil ekranlara geçer.

İçinde uygulanması WindowManager giriş yöntemi penceresini (yumuşak klavye çizilir IME pencere) ve IME durumunu yönetmek için giriş yöntemi hedef (IME giriş gider pencere) izler.

For InputMethodManagerService (IMMS), başka hiçbir yerleşik Ekran değişikliği yaymak olabilir mekanizması InputMethodService başka ekrana odağı taşırken zamanında (IMS) ve yeniden yapılandırmak klavye düzeni.

Ekranlar arasında IME penceresi geçişini sağlamak için Android 10 aşağıdakileri uygular:

  • IME ve giriş hedef penceresi şimdi sergileniyor başına izlenir DisplayContent#mInputMethodWindow ve DisplayContent#mInputMethodTarget WindowManager (WM) bağımsız olarak her ekranın IME odağı durumuna yönetebilmesi için bu.
  • Harici ekranda yaptığınız bir uygulama müşterinin odak isteği ile alınan IMMS tarafında, ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus , ilk geçerli giriş yöntemi hizmetini keser ve sonra yeni IME takın hizmet rebinds harici görüntü için belirteci pencere onServiceConnected() .
  • Sonra IMS tarafında, IMS#attachToken alındığında, aşağıdaki akış oluşur:
    • ContextImpl#updateDisplay hizmet bağlam ekranını güncellemek için denir InputMethodService#attachToken() . Bu çağrılar ViewGroup#addView() klavyenin düzenini gözden geçirilmesi ve güncel içerik denetimi hedef ekrana adapte.
    • Sonra DisplayContent#setInputMethodWindowLocked() denir, uygulama süreci düzeyinde görüntülü yapılandırma kullanarak değiştirir gönderir WindowProcessController geçersiz kılma kaynakları ve ekran ölçümlerine IME süreci.
    • InputMethodService istemci sonra doğru görünen ölçümlerle doğru yapılandırmayı alır onConfigurationChanged() ve ViewGroup#addView() giriş görünümü yeniden başlatmak çağrısı.

Çok oturumlu Giriş Yöntemi Düzenleyici desteği

Uygun giriş kaynakları sağlamak için birden çok kullanıcı tarafından aynı anda kullanılması beklenen birden çok ekrana sahip cihaz uygulamaları, ekran başına en fazla bir tane olmak üzere birden çok giriş yöntemi düzenleyicisini (IME) aynı anda görüntüleyecek şekilde yapılandırılabilir. Aşağıdaki iki şekil, iki ekranda örnek bir çok oturumlu IME gösterir:

Şekil 2. çoklu oturum IME

Şekil 3. Örnek çoklu oturum IME

Destek Başına ekran odak bu özellik için bir ön koşuldur. Değilse, bu özellik etkinleştirilemez. Güvenlik kısıtlamaları nedeniyle, ekran başına odak sınırlaması bu özelliği küçük bir cihaz alt kümesiyle sınırladı.

Android 10'da, çok oturumlu IME'ler için destek, farklı bir API kümesi ve azaltılmış işlevsellik içeren ayrı sistem hizmetleriyle uygulanır. Çok oturumlu IME, mevcut IME'lerle uyumlu değildir. Çok oturumlu veya tek oturumlu hizmet kullanılabilir, ancak ikisi birden kullanılamaz.

En tepesinde yer almaktadır Android IME'ler mevcut kullanmak mümkün değildir InputMethodService tek IME istemci aynı anda odaklanmış edilebileceği varsayımı Android 1.5 ve birçok kamu API'ler tanıtıldı Android IME API'leri önce yapıldığı için sınıfın InputMethodService var zaten bu varsayıma büyük ölçüde güveniyordu. Ancak güncelleme InputMethodService sınıfını çok müşterili senaryosu nedeniyle meydan okuyor desteklemek için:

  1. Aksi içine karmaşıklık kabul edilemez bir miktarda getirecek InputMethodService zaten korumak zor.
  2. IME geliştiricilerinin, birden fazla odaklanmış IME istemcisinden gelen paralel istekleri destekleyebilmek için uygulamalarını güncellemeleri gerekir; bu, kendi taraflarında önemsiz olmayan bir yeniden tasarım gerektirebilir (giriş kod çözücü ve yazma geçmişi veritabanı gibi).
  3. Çoklu IME istemcileri için gerçek kullanım durumlarının hızla gelişmesi bekleniyor, bu nedenle yeni protokol kararlı değil ve genel API'ler olarak kullanıma hazır değil.

Tek oturumda olduğu gibi (düzenli) IME, bireysel ekranlarda IME gösteren üzerinde kontrolü kullanılarak gerçekleştirilir DisplayWindowSettings .

Bulunan bir numune çoklu oturum IME yoktur development/samples/MultiClientInputMethod .

Çok oturumlu IME'yi test etmek için:

  1. Set config_perDisplayFocusEnabled için true .
  2. Bu komutları çalıştırın:
    1. $ make -j MultiClientInputMethod
    2. $ adb install -r $OUT/system/priv-app/MultiClientInputMethod/MultiClientInputMethod.apk
    3. $ adb root
    4. $ adb shell setprop persist.debug.multi_client_ime \
      com.example.android.multiclientinputmethod/.MultiClientInputMethod
    5. $ adb reboot
  3. Birden çok metin girişi senaryosu deneyin.

uygulama

Bkz MultiClientInputMethodManagerService uygulama ayrıntıları için.