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:
- B ekranındaki giriş alanından yeni bir giriş bağlantısı gelir.
InputMethodManagerServicebağlantının onaylanması gerekip gerekmediğini kontrol eder.- 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.
- Seçilen ekran, A ekranı değilse bağlantı yeniden kurulur.
InputMethodServiceyok 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#mInputMethodWindowveDisplayContent#mInputMethodTargetiç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ğlanarakonServiceConnected()'deki harici ekran için yeni IME pencere jetonu yeniden eklenir. - IMS tarafında,
IMS#attachTokenalı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çinViewGroup#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çinWindowProcessControllerkullanarak işleme düzeyinde görüntü yapılandırma değişikliklerini IME işlemine gönderir.InputMethodServiceistemcisi,onConfigurationChanged()veViewGroup#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.