Giriş yöntemi düzenleyici desteği

Bu ekrana özel 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 klavyesinin hangi ekranda gösterildiğine bağlı olarak farklı modlar vardır. Yazılım klavyesi şu şekilde gösterilir:

  • Odaklanılan uygulamanın göründüğü ekranın aynısı .
  • Odaklanılan uygulama varsayılan olmayan bir ekranda çalışırken varsayılan ekran.
  • Hiç görüntü yok .

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:

  • 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ı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şturulduklarında düzeni gözden geçirmesini 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ğı talep ediyorsa 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'yi göstermeyi destekliyorsa ve gösterilmesine 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 yeniden oluşturulur.

Güvenlik kısıtlaması

Sistem, kendisine ait olmayan sanal ekranlarda IME'yi göstermez. Bunun nedeni, kötü amaçlı bir uygulamanın sistem dekorasyon desteği etkinleştirilmiş sanal bir ekran oluşturabileceği ve yazma tahminleri ve özel arka planlar gibi kullanıcı açısından hassas bilgileri yüzeyden okuyabileceği yönündeki güvenlik endişesidir.

Uygulama

Android 9'da (ve daha eski sürümlerde) IME, Ekrandan Giriş yöntemleri bölümünde açıklandığı gibi yalnızca varsayılan ekranda kullanılabiliyordu. Android 10'da (ve üzeri), kullanıcı odağı değiştirerek farklı ekranlardaki farklı giriş metni alanları arasında geçiş yapabilir ve IME penceresi ikincil ekranlara taşınır.

WindowManager uygulama, IME durumunu yönetmek için giriş yöntemi penceresini (yazılım klavyesinin ç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 (IMS) yayabilir ve odağı başka bir ekrana taşırken çalışma zamanında klavye düzenini yeniden yapılandıramaz.

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

  • IME ve giriş hedefi penceresi artık DisplayContent#mInputMethodWindow ve DisplayContent#mInputMethodTarget ekran başına izleniyor, böylece WindowManager (WM) IME odak durumunu her ekrandan bağımsız olarak yönetebiliyor.
  • IMMS tarafında, bir uygulama istemcisinin harici ekrandan odaklanma isteği ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus , önce mevcut giriş yöntemi hizmetinin bağlantısını kaldırır ve ardından yeni IME'yi yeniden eklemek için hizmeti yeniden bağlar. onServiceConnected() içindeki harici ekran için pencere belirteci.
  • IMS tarafında, IMS#attachToken alındıktan sonra aşağıdaki akış gerçekleşir:
    • ContextImpl#updateDisplay InputMethodService#attachToken() içindeki hizmet bağlamının görüntüsü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 uyum sağlamak için ViewGroup#addView() işlevini çağırır.
    • DisplayContent#setInputMethodWindowLocked() çağrıldıktan sonra uygulama, kaynakları geçersiz kılmak ve ölçümleri görüntülemek için WindowProcessController kullanarak IME işlemine işlem düzeyindeki görüntü yapılandırma değişikliklerini gönderir.
    • InputMethodService istemcisi, giriş görünümünü yeniden başlatmak için onConfigurationChanged() ve ViewGroup#addView() çağrısından sonra doğru ekran ölçümleriyle doğru yapılandırmayı alır.