Android 8.0'da kullanıcılar, Hızlı Ayarlar karosunu veya Ekran ayarlarını kullanarak otomatik döndürme ve dikey döndürme modları arasında geçiş yapabiliyordu. Android 9'da, cihaz konumu değişse bile mevcut ekran döndürme ayarını sabitleyerek istenmeyen döndürmeleri ortadan kaldırmak için dikey döndürme modunu güncelledik. Kullanıcılar, gezinme çubuğundaki yeni bir düğmeye basarak gerektiğinde dönüşümü manuel olarak tetikleyebilir. Dikey modu, otomatik döndürme kapalıyken etkinleşen "döndürme kilidi" olarak yeniden adlandırdık. Otomatik döndürme modunda herhangi bir değişiklik yapılmadı.
Cihaz döndürme kilidi modundayken kullanıcılar ekranlarını, üstteki görünür Etkinlik tarafından desteklenen herhangi bir döndürme moduna kilitleyebilir (mevcut sistem kısıtlamaları göz önünde bulundurularak). Üst etkinlik, otomatik döndürme modunda birden fazla rotasyonda oluşturulabiliyorsa etkinlik screenOrientation
ayarına bağlı bazı istisnalar dışında aynı seçenekler, döndürme kilitli modda da kullanılabilir.
Döndürme kilidi modu, cihaz döndürüldüğünde gezinme çubuğunda bir düğme göstererek çalışır. Bunun için cihazın yön sensörü, otomatik döndürme kapalıyken bile etkin kalmalıdır. Bu düğmeye dokunulduğunda kullanıcının döndürme tercihi (Settings.System.USER_ROTATION
) etkin bir şekilde ayarlanır. WindowManager, sistemin döndürülmesini değiştirmek için bu tercihi, en üstteki etkinlik ve sistem durumuyla ilgili diğer ayrıntılarla birlikte kullanır. WindowManager, başka bir etkinliğe geçerken sistemi hangi rotasyonda oluşturacağına karar verirken kullanıcının rotasyon tercihini kullanmaya devam eder.

Etkinlikler arasında geçiş yaparken kullanıcı rotasyonu tercihi korunmalıdır. Ancak çoğu telefon kullanıcısı yalnızca kısa ve geçici bir süre için yatay modda olmak istediğinden doğal yönde eğilim ekledik. Sistem dönme yönü cihazın doğal yönüne değiştiğinde kullanıcı dönme tercihi de cihazın doğal yönüne sıfırlanır. Çoğu telefonda cihazın doğal yönü dikeydir (0º). Kullanıcının döndürme tercihi genellikle yalnızca dikey bir uygulama kullanırken, telefonu kilitlerken veya başlatıcı çalışma alanına dönerken sıfırlanır.
Kullanıcılar için rotasyon etkileşimleri son on yılda pek değişmedi. Kullanıcılar, gezinme çubuğunda döndürme ve düğme konumlandırmayla ilgili önceki deneyimleri nedeniyle bu özelliği keşfetmekte zorlanabilir. Bu nedenle, döndürme düğmesine, göründüğünde düğmeyi vurgulayan bir tanıtım modu ekledik. Giriş modu davranışı yalnızca ilk birkaç düğme etkileşimi için gerçekleşir. Ardından giriş modu devre dışı bırakılır.
Kaynak
Android 9'a döndürme önerileri için destek eklendi. Çoğu değişiklik aşağıdaki dosyalarda bulunur.
services/.../server/policy/PhoneWindowManager.java
:WindowOrientationListener
çıkışını tüketen kancalar (MyOrientationListener
, cihazın döndürülüp döndürülmediğini belirlemek için sensörleri izlemekten sorumludur)- Otomatik döndürme devre dışıyken bile
WindowOrientationListener
'ü etkin tutar (needSensorRunningLp()
'e bakın) - Kullanıcı rotasyon tercihi, en çok kullanılan etkinlik
screenOrientation
ayarları ve sistem durumuna göre sistem rotasyonunu hesaplar (rotationForOrientationLw()
bölümüne bakın) - Üst etkinliğin belirli bir rotasyona dönüp dönemeyeceğini belirleme (
isRotationChoicePossible()
bölümüne bakın)
SystemUI/.../statusbar/phone/NavigationBarFragment
:PhoneWindowManager
kaynağından gelen döndürme önerisi geri çağrılarında gezinme çubuğu düğmesinin gösterilip gösterilmeyeceğini belirler (onRotationProposal()
bölümüne bakın)- Döndürme gezinme çubuğu düğmesinin ne zaman gizleneceğini yönetir (
setRotateSuggestionButtonState(false)
çağrılarına bakın) - Gezinme çubuğunun gizli olduğu özel durum (genellikle tam ekranda) da dahil olmak üzere düğme zaman aşımlarını yönetir
- Cihazın doğal yönüne (
mRotationWatcher
) dönüldüğünde kullanıcı tercihini sıfırlar NavigationBarView
bölümünde uygulanan gezinme çubuğu düğmesi animasyonuna uygun stili seçer (onRotationProposal()
bölümüne bakın)- Özel animasyon dahil olmak üzere giriş modu mantığını ekler (
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
ile ilgili referanslara bakın) - disable2 rotasyon işaretini uygular (
disable()
bölümüne bakın)
SystemUI/.../statusbar/phone/NavigationBarView.java
:- Beklemedeki rotasyonla eşleşen stiller düğmesi simgesi animasyonu (bkz.
updateRotateSuggestionButtonStyle()
) - Belirli Erişilebilirlik hizmetleri etkinse döndürme düğmesini gizleme mantığı da dahil olmak üzere düğme görünürlüğü değişikliklerini yönetir (
setRotateButtonVisibility()
bölümüne bakın) (en sağdaki gezinme çubuğu düğme grubu sıralaması dikkate alınır)
- Beklemedeki rotasyonla eşleşen stiller düğmesi simgesi animasyonu (bkz.
SystemUI/res/layout/menu_ime.xml
:- Döndür düğmesi için menü ve IME/klavye seçicinin üstüne, ancak erişilebilirlik düğmesinin altına yerleştirilmiş yeni bir
KeyButtonView
içerir
- Döndür düğmesi için menü ve IME/klavye seçicinin üstüne, ancak erişilebilirlik düğmesinin altına yerleştirilmiş yeni bir
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
:- Gezinme menüsünü döndürme düğmesini canlandırmak için kullanılan karmaşık
AnimatedVectorDrawable
- Biçimlendirme (
SystemUI/res/values/styles.xml
içinde), aynı çizilebilir öğenin çeşitli başlangıç ve bitiş rotasyonlarını animasyonlu olarak göstermek için kullanılabilmesi amacıyla, rotasyonun başlangıç ve bitiş açılarını ayarlamak için kullanılır. - Simge tonu
TintedKeyButtonDrawable
üzerinden ayarlanıyor
- Gezinme menüsünü döndürme düğmesini canlandırmak için kullanılan karmaşık
Uygulama
Android 9, yazılım gezinme tuşlarını (geri, ana sayfa vb.) kullanan cihazlarda döndürme önerilerinin çalışması için gerekli tüm değişiklikleri içerir.
Donanım gezinme tuşlarına sahip cihazlar üreten ve bu özelliği uygulamak isteyen cihaz üreticilerinin kendi sistem kullanıcı arayüzü kolaylaştırmalarını tasarlayıp uygulamaları veya özelliği devre dışı bırakmaları gerekir. Eklenecek yüzeylerin, cihaz mevcut sistem dönüşümüne göre 90º veya 180º açıyla tutulduğunda kolayca kullanılabilmesi ve hızlıca erişilebilmesi önerilir. Bu nedenlerle, bildirimlerin kullanılması (IME/klavye seçici için yapıldığı gibi) önerilmez.
Bu özelliği kullanmak için gereken donanım koşulları, otomatik döndürme özelliğini kullanma koşullarıyla aynıdır.
Otomatik döndürme kapalıyken sistem herhangi bir nedenle cihazın doğal dönme ayarına geçtiğinde kullanıcının döndürme tercihinin (Settings.System.USER_ROTATION
) cihazın doğal dönme ayarına sıfırlanması, uygulama tutarlılığı için gereklidir. Sağlanan uygulama bunu yapar (NavigationBarFragment.mRotationWatcher
bölümüne bakın).
Döndürme önerilerinin geçici olarak gösterilmesini engellemek için StatusBarManager.disable2
'te yeni bir işaret var. StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
sayfasına göz atın. Kurulum Sihirbazı da dahil olmak üzere kritik sistem uygulamaları tarafından kullanıldığı için bu işarete tüm uygulamalarda uyulmalıdır. Sağlanan uygulama bunu destekler (NavigationBarFragment.disable()
bölümüne bakın).
Mümkünse özelliği etkinleştirmenizi ve AOSP uygulamasını izlemenizi önemle tavsiye ederiz. Döndürme deneyimini cihazlar arasında benzer tutmayı amaçlıyoruz. Bu, günümüzde çoğu telefonda otomatik döndürme ve dikey kilit arasında bulunan deneyimdeki tekdüzeliği yansıtır.
Özelleştirme
Rotasyon önerileri yalnızca rotasyon kilitli modda (otomatik rotasyon kapalı) göründüğü için, otomatik rotasyonu varsayılan olarak kapalı tutarak özelliğin yeni yüklemeler için varsayılan olarak etkin olup olmayacağını seçebilirsiniz. Varsayılan değişiklikler yapmak için SettingsProvider/res/values/defaults.xml
bölümündeki def_accelerometer_rotation
bölümüne bakın.
Kullanıcılar, Hızlı Ayarlar veya Ekran ayarları'ndaki döndürme kutusu aracılığıyla otomatik döndürmenin etkin olup olmadığını (varsayılan ayardan bağımsız olarak) kolayca değiştirebilir.
Doğrulama
Test için, bir Settings.Secure
değerini değiştirerek özellik devre dışı bırakılabilir ve etkinleştirilebilir. Bu işlem, ayrıcalıklı bir adb örneğinden aşağıdaki komutu çalıştırarak en kolay şekilde gerçekleştirilebilir:
adb shell settings put secure show_rotation_suggestions <x>
x değerini kapalı için 0
, açık için 1
olarak ayarlayın.
Test için, ilişkili Settings.Secure
değeri değiştirilerek tanıtım modu sıfırlanabilir. Bu işlem, ayrıcalıklı bir adb örneğinden aşağıdaki komutu çalıştırarak en kolay şekilde gerçekleştirilebilir:
adb shell settings put secure num_rotation_suggestions_accepted 0