Giriş yöntemi düzenleyici desteği

Bu görüntüleme alanlarında 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 ekran.
  • Hiçbir şekilde gösterilmez.

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()

Şekil 1. 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 görüntü 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 (ekran klavyesinin ç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) üzerinde 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 bir 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 onServiceConnected()'deki harici ekran için yeni IME pencere jetonu 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, klavyenin düzenini gözden geçirmek ve mevcut bağlamı kontrol ederek hedef ekrana uyarlamak için ViewGroup#addView()çağrıViewGroup#addView() yapar.
    • 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 yapılandırmayı doğru görüntüleme metrikleriyle alır.