Giriş yöntemi düzenleyici desteği

Görüntülü reklamlara özgü 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üzenleyici'nin (IME) yazılım klavyesini hangi ekranın gösterdiğine göre farklı modlar vardır. Yazılım klavyesi şu cihazlarda gösterilir:

  • Odaklanmış uygulamanın gösterildiği aynı ekran.
  • Odaklanan uygulama varsayılan olmayan bir ekranda çalışırken varsayılan ekran.
  • Hiç gösterilmez.

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

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

Şekil 1. Hedef uygulama dahil olmak üzere ikincil ekranda görünen IME yazılım klavyesi

Sistem tek bir IME kullanır ancak kullanıcının odağını takip etmek için ekranlar arasında geçiş yapabilir. Android 10, tüm birinci ve üçüncü taraf IME'lerin oluşturulurken düzeni düzeltmesini 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ğını isterse 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 onaylanıp onaylanmayacağını kontrol eder.
  3. IME için bir ekran seçilir. B ekranı IME'yi göstermeyi 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 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üsleme desteği etkinleştirilmiş bir sanal ekran oluşturarak kullanıcının hassas bilgilerini (ör. yazma tahminleri ve özel arka planlar) ekrandan okuyabileceğiyle ilgili güvenlik endişesidir.

Uygulama

Android 9 (ve önceki sürümler)'de İYS, Ekran Girişi Yöntemleri bölümünde açıklandığı gibi yalnızca varsayılan ekranda kullanılabilirdi. Android 10 (ve sonraki sürümler) kullanıcıları, odak noktasını değiştirerek farklı ekranlardaki farklı giriş metin alanları arasında geçiş yapabilir. Bu durumda IME penceresi ikincil ekranlara taşınır.

WindowManager'teki uygulama, IME durumunu yönetmek için giriş yöntemi penceresini (sanal klavyenin çizildiği IME penceresi) ve giriş yöntemi hedefini (IME girişinin gittiği pencere) izler.

InputMethodManagerService (IMMS) için başka hiçbir yerleşik mekanizma, ekran değişikliğini InputMethodService'e (IMS) iletemez ve odak başka bir ekrana taşınırken klavye düzenini çalışma zamanında yeniden yapılandıramaz.

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

  • IME ve giriş hedef penceresi artık DisplayContent#mInputMethodWindow ve DisplayContent#mInputMethodTarget'te ekran başına izlenir. Böylece, WindowManager (WM), IME odak durumunu her ekrandan bağımsız olarak yönetebilir.
  • IMMS tarafında, bir uygulama istemcisinin harici ekrandan gelen odak isteği ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus üzerinden alındığında, önce mevcut giriş yöntemi hizmetinin bağlaması kaldırılır ve ardından onServiceConnected()'te harici ekran için yeni IME pencere jetonunu yeniden eklemek üzere hizmet yeniden bağlanır.
  • IMS tarafında, IMS#attachToken alındıktan sonra aşağıdaki akış gerçekleşir:
    • ContextImpl#updateDisplay, InputMethodService#attachToken()'teki hizmet bağlamının görüntüsünü güncellemek için çağrılır. Bu, ViewGroup#addView()'ü çağırır ve klavyenin düzenini gözden geçirip mevcut bağlamı kontrol ederek hedef ekrana uyarlar.
    • DisplayContent#setInputMethodWindowLocked() çağrıldıktan sonra uygulama, kaynakları ve görüntüleme metriklerini geçersiz kılmak için WindowProcessController'ü kullanarak işlem düzeyinde görüntüleme yapılandırması değişikliklerini IME işlemine gönderir.
    • InputMethodService istemcisi, onConfigurationChanged() ve giriş görünümünü yeniden başlatma ViewGroup#addView() çağrısından sonra doğru görüntüleme metrikleriyle doğru yapılandırmayı alır.