Önerileri döndür

Android 8.0'da kullanıcılar, Hızlı ayarlar kutucuğu veya Ekran ayarlarını kullanarak otomatik döndürme ve dikey döndürme modları arasında geçiş yapabiliyordu. Android 9'da, cihazın konumu değişse bile mevcut ekran dönüşünü sabitleyerek istenmeyen dönüşleri ortadan kaldırmak için dikey döndürme modunu güncelledik. Kullanıcılar, gerektiğinde gezinme çubuğundaki yeni bir düğmeye basarak döndürmeyi manuel olarak tetikleyebilir. Portre modunu döndürme kilidi olarak yeniden adlandırdık ve otomatik döndürme kapalıyken etkinleşiyor. Otomatik döndürme modunda herhangi bir değişiklik yoktur.

Cihaz dönüş kilidi modundayken, kullanıcılar ekranlarını üstteki görünür Etkinlik tarafından desteklenen herhangi bir dönüşe kilitleyebilir (mevcut sistem kısıtlamaları göz önüne alındığında). Üstteki Etkinlik, otomatik döndürme modunda birden fazla dönüşle oluşturulabiliyorsa, aynı seçeneklerin, Etkinliğin screenOrientation ayarına bağlı bazı istisnalar dışında, dönüş kilitli modunda da mevcut olması gerekir.

Döndürme kilidi modu, cihazın döndürme değişikliklerinde gezinme çubuğundaki bir düğmeyi göstererek çalışır. Bunu başarmak için cihazın yön sensörünün otomatik döndürme kapalı olsa bile aktif kalması gerekir. Bu düğmeye dokunulması, kullanıcı döndürme tercihini etkili bir şekilde ayarlar ( Settings.System.USER_ROTATION ). WindowManager, sistemin dönüşünü değiştirmek için bu tercihi üst Etkinlik ve sistem durumu hakkındaki 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ı rotasyon tercihini kullanmaya devam eder.

Bu gif, ekranı dikey yönde olan bir telefonu yatay yönde gösterir. Kullanıcıya ekran yönünü yatay olarak değiştirmek isteyip istemediğini soran bir simge görünür.
Şekil 1 . "Ana Sayfa düğmesini yukarı kaydırın" hareketi etkinken öneri düğmesini döndürün

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 manzarada olmak istediğinden, doğal yönelim eğilimini ekledik. Sistem dönüşü cihazın doğal yönüne değiştiğinde, kullanıcı döndürme tercihi cihazın doğal yönüne sıfırlanır . Çoğu telefon için cihazın doğal yönü dikeydir (0°). Kullanıcı döndürme tercihinin sıfırlanması genellikle yalnızca portre uygulaması kullanırken, telefonu kilitlerken veya başlatıcı çalışma alanına dönerken gerçekleşir.

Kullanıcılar için rotasyon etkileşimleri son on yılda pek değişmedi. Gezinme çubuğundaki döndürme ve düğme konumlandırma ile ilgili önceki geçmişleri göz önüne alındığında, kullanıcılar bu özelliği keşfetmeyi zor bulabilirler. Bu nedenle döndürme düğmesine, göründüğünde onu vurgulayan bir giriş modu ekledik. Giriş modu davranışı yalnızca ilk birkaç düğme etkileşiminde gerçekleşir ve sonrasında giriş modu devre dışı bırakılır.

Kaynak

Android 9'a döndürme önerileri desteği eklendi. Değişikliklerin çoğu aşağıdaki dosyalarda bulunmaktadır.

  • services/.../server/policy/PhoneWindowManager.java :
    • WindowOrientationListener çıktısını tüketen kancalar ( MyOrientationListener , cihazın döndürülüp döndürülmediğini belirlemek için sensörlerin izlenmesinden sorumludur)
    • Otomatik döndürme devre dışı bırakıldığında bile WindowOrientationListener aktif tutar (bkz. needSensorRunningLp() )
    • Kullanıcı döndürme tercihi, üst Etkinlik screenOrientation ayarları ve sistem durumu verilen sistem dönüşünü hesaplar (bkz. rotationForOrientationLw() )
    • Üst Faaliyetin belirli bir dönüşe dönüp dönemeyeceğini belirleyin (bkz. isRotationChoicePossible() )
  • SystemUI/.../statusbar/phone/NavigationBarFragment :
    • PhoneWindowManager gelen döndürme önerisi geri çağrılarında gezinme çubuğu düğmesinin gösterilip gösterilmeyeceğini belirler (bkz. onRotationProposal() )
    • Gezinme çubuğu döndürme düğmesinin ne zaman gizleneceğini yönetir ( setRotateSuggestionButtonState(false) çağrılarına bakın)
    • Gezinme çubuğunun gizlendiği özel durum da dahil olmak üzere düğme zaman aşımlarını yönetir (genellikle tam ekranda)
    • Cihazın doğal yönüne döndüğünüzde kullanıcı tercihini sıfırlar ( mRotationWatcher )
    • NavigationBarView uygulanan gezinme çubuğu düğmesi animasyonu için uygun stili seçer (bkz. onRotationProposal() )
    • Özel animasyon da dahil olmak üzere giriş modu mantığını ekler ( Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED referanslarına bakın)
    • Disable2 döndürme bayrağını uygular (bkz. disable() )
  • SystemUI/.../statusbar/phone/NavigationBarView.java :
    • Bekleyen rotasyonla eşleşecek stil düğmesi simgesi animasyonu (bkz. updateRotateSuggestionButtonStyle() )
    • Belirli Erişilebilirlik hizmetleri etkinse (en sağdaki gezinme çubuğu düğme yığını sıralamasını hesaba katarak) döndürme düğmesini gizleme mantığı da dahil olmak üzere düğme görünürlüğü değişikliklerini yönetir (bkz setRotateButtonVisibility() ) )
  • SystemUI/res/layout/menu_ime.xml :
    • Döndürme düğmesi için menünün ve IME/klavye seçicinin üzerinde ancak Erişilebilirlik düğmesinin altında yer alan yeni bir KeyButtonView içerir
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml :
    • Gezinme çubuğunu döndürme düğmesini canlandırmak için kullanılan Karmaşık AnimatedVectorDrawable
    • Şekillendirme ( SystemUI/res/values/styles.xml dosyasında) dönmenin başlangıç ​​ve bitiş açılarını ayarlamak için kullanılır, böylece aynı çizilebilir öğe çeşitli başlangıç ​​ve bitiş dönüşlerini canlandırmak için kullanılabilir
    • Simge renklendirme TintedKeyButtonDrawable aracılığıyla ayarlanır

Uygulama

Android 9, yazılım gezinme tuşlarını kullanan cihazlarda (geri, ev vb.) çalışan döndürme önerileri almak için gerekli tüm değişiklikleri içerir.

Bu özelliği uygulamak isteyen donanım gezinme tuşlarına sahip cihazlar oluşturan cihaz üreticilerinin, kendi Sistem Kullanıcı Arayüzü uygunluğunu tasarlaması ve uygulaması veya özelliği devre dışı bırakması gerekecektir. Cihaz mevcut sistem dönüşüne göre 90° veya 180° açıda tutulduğunda ve hızla erişilebilir olduğunda, tanıtılan herhangi bir yüzeyin kullanımının kolay olması önerilir. Bu nedenlerden dolayı bildirimlerin kullanılması (IME/klavye seçicide yapıldığı gibi) önerilmez.

Bu özelliği kullanmak için gereken donanım gereksinimleri, otomatik döndürmeyi kullanma gereksinimleriyle aynıdır.

Uygulama tutarlılığı için, otomatik döndürme kapalıyken sistem herhangi bir nedenle cihazın doğal dönüşüne geçtiğinde, kullanıcı döndürme tercihinin ( Settings.System.USER_ROTATION ) cihazın doğal dönüşüne sıfırlanması gerekir. Sağlanan uygulama bunu yapar (bkz. NavigationBarFragment.mRotationWatcher ).

Döndürme önerilerinin görünmesini geçici olarak engellemek için StatusBarManager.disable2 yeni bir işaret var. Bkz. StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS . Bu bayrağa, Kurulum Sihirbazı da dahil olmak üzere kritik sistem uygulamaları tarafından kullanıldığı için tüm uygulamalarda saygı gösterilmelidir. Sağlanan uygulama bunu desteklemektedir (bkz. NavigationBarFragment.disable() ).

Özelliği etkinleştirmenizi ve mümkünse AOSP uygulamasını takip etmenizi önemle öneririz. Döndürme deneyimini cihazlar arasında benzer tutmayı amaçlıyoruz; bu, günümüzde çoğu telefondaki otomatik döndürme ve portre kilidi arasındaki deneyimdeki tekdüzeliği yansıtıyor.

Özelleştirme

Döndürme önerileri yalnızca döndürme kilitli modda (otomatik döndürme kapalı) göründüğünden, otomatik döndürmeyi varsayılan olarak kapalı olarak seçerek özelliğin yeni yüklemeler için varsayılan olarak açık olup olmayacağını seçmek mümkündür. Varsayılan değişiklikleri yapmak için SettingsProvider/res/values/defaults.xml dosyasındaki def_accelerometer_rotation bakın.

Kullanıcılar, Otomatik döndürmenin etkin olup olmadığını (varsayılandan bağımsız olarak) Hızlı ayarlar veya Ekran ayarlarındaki döndürme kutucuğu aracılığıyla kolayca değiştirebilirler.

Doğrulama

Test amacıyla, bir geçit Settings.Secure değeri değiştirilerek bu özellik kapatılıp açılabilir. Bu, aşağıdaki komutu ayrıcalıklı bir adb örneğinden çalıştırarak en kolay şekilde gerçekleştirilir:

adb shell settings put secure show_rotation_suggestions <x>

Kapalı için x'i 0 ve açık için 1 ayarlayın.

Test amacıyla, ilgili Settings.Secure değeri değiştirilerek giriş modu sıfırlanabilir. Bu, aşağıdaki komutu ayrıcalıklı bir adb örneğinden çalıştırarak en kolay şekilde gerçekleştirilir:

adb shell settings put secure num_rotation_suggestions_accepted 0