Giriş yöntemi düzenleyici desteği

Görüntüleme ağına özel bu alanlarda yapılan güncellemeler aşağıda verilmiştir:

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

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

Giriş Yöntemi Düzenleyicisi'nin (IME) yazılım klavyesini hangi ekranın göstereceği konusunda farklı modlar vardır. Yazılım klavyesi şu cihazlarda gösterilir:

  • Odaklanılan uygulamanın göründüğü aynı ekranda gösterilir.
  • Odaklanılan uygulama varsayılan olmayan bir ekranda çalışırken varsayılan görüntüleme.
  • Hiçbir şekilde görüntülenmez.

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

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

1. şekil. Hedef uygulama da dahil olmak üzere, ikincil ekranda görünen 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, oluşturulduklarında tüm birinci ve üçüncü taraf IME'lerin düzeni revize etmesini ve yeni ekran boyutuna göre yeniden boyutlandırmasını otomatik olarak bekler.

A ekranında etkin bir bağlantı varsa ve bir giriş alanı B ekranında giriş odağı istiyorsa aşağıdaki akış gerçekleşir:

  1. B ekranındaki giriş alanından yeni bir giriş bağlantısı gelir.
  2. InputMethodManagerService bağlantının onaylanması gerekip gerekmediğini kontrol eder.
  3. IME için bir ekran seçilir. B ekranı IME'nin gösterilmesini destekliyorsa ve IME'nin gösterilmesine izin veriliyorsa B kullanılır. Aksi takdirde birincil cihaz ekranı seçilir.
  4. Seçilen ekran, A ekranı değilse bağlantı yeniden kurulur. InputMethodService yok edilir ve tekrar oluşturulur.

Güvenlik kısıtlaması

Sistem, kendisine ait olmayan sanal ekranlarda IME göstermez. Bunun nedeni, kötü amaçlı bir uygulamanın sistem süslemeleri desteği etkinleştirilmiş bir sanal ekran oluşturup yüzeydeki kullanıcıya ait hassas bilgileri (ör. yazma tahminleri ve özel arka planlar) okuyabilmesiyle ilgili güvenlik endişesidir.

Uygulama

Android 9 ve önceki sürümlerde, IME yalnızca varsayılan ekranda kullanılabilir. Bu durum, Ekrandaki giriş yöntemleri bölümünde açıklanmıştır. Android 10 (ve sonraki sürümlerde) kullanıcılar, odağı değiştirerek farklı ekranlardaki farklı giriş metni alanları arasında geçiş yapabilir. IME penceresi de ikincil ekranlara taşınır.

WindowManager uygulamasında, IME durumunu yönetmek için giriş yöntemi penceresi (sanal klavyenin çizildiği IME penceresi) ve giriş yöntemi hedefi (IME girişinin yapıldığı pencere) izlenir.

InputMethodManagerService (IMMS) için, ekran değişikliğini InputMethodService (IMS) öğesine yayacak ve odak başka bir ekrana taşındığında klavye düzenini çalışma zamanında yeniden yapılandıracak başka bir yerleşik mekanizma yoktur.

Android 10, IME penceresinin ekranlar arasında geçiş yapmasını sağlamak için aşağıdakileri uygular:

  • IME ve giriş hedef penceresi artık DisplayContent#mInputMethodWindow ve DisplayContent#mInputMethodTarget içinde ekran başına izleniyor. Böylece WindowManager (WM), IME odak durumunu her ekrandan bağımsız olarak yönetebiliyor.
  • IMMS tarafında, harici ekrandan gelen uygulama istemcisinin odaklanma isteği ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus üzerinden alındığında önce mevcut giriş yöntemi hizmetinin bağlantısı kaldırılır, ardından hizmet yeniden bağlanarak harici ekrandaki yeni IME pencere jetonu onServiceConnected()'ye yeniden eklenir.
  • IMS tarafında, IMS#attachToken alındıktan sonra aşağıdaki akış gerçekleşir:
    • ContextImpl#updateDisplay, InputMethodService#attachToken() içinde hizmet bağlamının ekranını güncellemek için çağrılır. Bu, mevcut bağlamı kontrol ederek klavyenin düzenini gözden geçirmeyi ve hedef ekranı kontrol ederek uyarlamayı ViewGroup#addView() gerektirir.
    • DisplayContent#setInputMethodWindowLocked() çağrıldıktan sonra uygulama, kaynakları geçersiz kılmak ve metrikleri görüntülemek için WindowProcessController kullanarak işleme düzeyinde görüntü yapılandırma değişikliklerini IME işlemine gönderir.
    • InputMethodService istemcisi, onConfigurationChanged() ve ViewGroup#addView() giriş görünümünü yeniden başlatma çağrısından sonra doğru görüntüleme metrikleriyle doğru yapılandırmayı alır.