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:
- B ekranındaki giriş alanından yeni bir giriş bağlantısı gelir.
InputMethodManagerService
bağ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.
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
veDisplayContent#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 jetonuonServiceConnected()
'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çinWindowProcessController
kullanarak işleme düzeyinde görüntü yapılandırma değişikliklerini IME işlemine gönderir.InputMethodService
istemcisi,onConfigurationChanged()
veViewGroup#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.