Suggerimenti di rotazione

In Android 8.0, gli utenti potevano passare dalla rotazione automatica alla rotazione verticale e viceversa utilizzando un riquadro Impostazioni rapide o Impostazioni del display. Su Android 9, abbiamo aggiornato rotazione verticale per evitare rotazioni involontarie fissando rotazione dello schermo corrente anche se la posizione del dispositivo cambia. Gli utenti possono attivare manualmente la rotazione premendo un nuovo pulsante nella barra di navigazione. La modalità Ritratto è stata rinominata in blocco della rotazione e si attiva quando si ruota automaticamente è disattivata. La modalità di rotazione automatica non viene modificata.

Quando il dispositivo è in modalità di blocco della rotazione, gli utenti possono bloccare lo schermo su qualsiasi rotazione supportata dall'attività superiore visibile (in base al sistema attuale . Se l'attività principale può essere visualizzata in più rotazioni in rotazione automatica, le stesse opzioni saranno disponibili in modalità di rotazione bloccata, con alcune eccezioni in base all'screenOrientation dell'attività dell'ambientazione.

La modalità di blocco della rotazione funziona mostrando un pulsante nella barra di navigazione quando viene ruotato il dispositivo modifiche. A tale scopo, il sensore di orientamento del dispositivo deve rimanere attivo anche quando la rotazione automatica è disattivata. La possibilità di toccare questo pulsante imposta in modo efficace la rotazione degli utenti preferenza (Settings.System.USER_ROTATION). WindowManager utilizza questa la preferenza, insieme ad altri dettagli sull'attività principale e sullo stato del sistema, per cambiare la rotazione del sistema. WindowManager continua a utilizzare la rotazione degli utenti preferenza quando decidi in quale rotazione eseguire il rendering del sistema un'altra attività.

Questa GIF mostra un telefono in orientamento orizzontale e schermo in
       orientamento verticale. Viene visualizzata un'icona per chiedere all'utente se vuole
       modificare l'orientamento dello schermo in orizzontale.
Figura 1. Ruota il pulsante dei suggerimenti con "Scorri su sul pulsante Home" gesto abilitato
.

La preferenza di rotazione degli utenti deve essere mantenuta quando si passa da un'attività all'altra. Tuttavia, poiché la maggior parte degli utenti di telefoni desidera visualizzare la modalità orizzontale per un breve breve, temporaneo, abbiamo aggiunto un bias di orientamento naturale. Rotazione utenti l'impostazione viene reimpostata all'orientamento naturale del dispositivo ogni volta che la rotazione del sistema cambia in base all'orientamento naturale del dispositivo. Per la maggior parte degli smartphone, l'orientamento naturale del dispositivo è verticale (0o). Reimpostazione della rotazione degli utenti si verifica quando si utilizza un'app solo in modalità verticale, si blocca il telefono o e tornare all'area di lavoro Avvio app.

Le interazioni di rotazione per gli utenti non sono cambiate molto nell'ultimo decennio. Utenti potrebbe trovare difficile trovare questa funzionalità data la sua cronologia precedente con la rotazione e il posizionamento dei pulsanti nella barra di navigazione. Per questo motivo, abbiamo aggiunto modalità introduzione al pulsante di rotazione che lo evidenzia quando viene visualizzato. Introduzione si verifica solo per le prime interazioni con il pulsante, dopodiché la modalità introduzione è disabilitata.

Origine

Il supporto per i suggerimenti di rotazione è stato aggiunto a Android 9. La maggior parte delle modifiche si trova all'interno seguenti file.

  • services/.../server/policy/PhoneWindowManager.java:
    • Hook che utilizzano l'output di WindowOrientationListener (MyOrientationListener, responsabile del monitoraggio per determinare se il dispositivo è stato ruotato)
    • Mantiene attivo WindowOrientationListener anche quando la rotazione automatica è disabilitata (vedi needSensorRunningLp())
    • Calcola la rotazione del sistema in base alla preferenza di rotazione dell'utente, in alto Impostazioni e stato del sistema dell'attività screenOrientation (vedi rotationForOrientationLw())
    • Determina se l'attività principale può ruotare in base a una determinata rotazione (consulta isRotationChoicePossible()
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • Determina se il pulsante della barra di navigazione deve essere visualizzato durante la rotazione callback di suggerimenti da PhoneWindowManager (vedi onRotationProposal())
    • Gestisce quando nascondere il pulsante di rotazione della barra di navigazione (vedi le chiamate a setRotateSuggestionButtonState(false)
    • Gestisce i timeout del pulsante, incluso il caso speciale quando la barra di navigazione è nascosta (di solito a schermo intero)
    • Reimposta le preferenze dell'utente quando torna alle impostazioni naturali del dispositivo orientamento (mRotationWatcher)
    • Sceglie lo stile appropriato per l'animazione del pulsante della barra di navigazione. applicata in NavigationBarView (vedi onRotationProposal())
    • Aggiunge una logica della modalità introduttiva, inclusa un'animazione specializzata (vedi i riferimenti a Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
    • Implementa il flag di rotazionedisable2 (vedi disable())
  • SystemUI/.../statusbar/phone/NavigationBarView.java:
    • Animazione dell'icona del pulsante Stili corrispondente alla rotazione in attesa (vedi updateRotateSuggestionButtonStyle()
    • Gestisce le modifiche alla visibilità dei pulsanti (vedi setRotateButtonVisibility()), inclusa la logica per nascondere il pulsante di rotazione se alcuni servizi di accessibilità sono attivi (considerando la classificazione della pila di pulsanti della barra di navigazione più a destra)
  • SystemUI/res/layout/menu_ime.xml:
    • Include un nuovo KeyButtonView per il pulsante di rotazione, sopra il menu e il selettore IME/tastiera, ma sotto Pulsante Accessibilità
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml:
    • Il complesso AnimatedVectorDrawable utilizzato per animare il pulsante ruota barra di navigazione
    • Lo stile (in SystemUI/res/values/styles.xml) è utilizzato per imposta gli angoli inizio e fine della rotazione in modo che possa essere utilizzata per animare varie rotazioni di inizio e fine
    • Colorazione delle icone impostata tramite TintedKeyButtonDrawable

Implementazione

Android 9 include tutte le modifiche necessarie per ottenere dei suggerimenti di rotazione dispositivi che usano i tasti di navigazione del software (torna indietro, home e così via).

I produttori di dispositivi che creano dispositivi con tasti di navigazione hardware che desiderano per implementare questa funzionalità dovrà progettare e implementare la propria interfaccia utente di sistema, invito o disabilitare la funzionalità. È consigliabile che qualsiasi piattaforma introdotta essere facile da usare quando il dispositivo è tenuto a 90o o 180o rispetto al sistema attuale ed è rapidamente accessibile. Per questi motivi, l'utilizzo delle notifiche (come per l'IME/selettore da tastiera) non è consigliato.

I requisiti hardware per l'utilizzo di questa funzionalità coincidono con i requisiti per utilizzare la rotazione automatica.

Per garantire la coerenza dell'implementazione, è necessario che la preferenza di rotazione dell'utente (Settings.System.USER_ROTATION) viene reimpostato al naturale rotazione quando, per qualsiasi motivo, il sistema passa alla rotazione naturale del dispositivo quando la rotazione automatica è disattivata. L'implementazione fornita esegue questa operazione (vedi NavigationBarFragment.mRotationWatcher).

Nuova segnalazione in StatusBarManager.disable2 da temporaneamente Impedire la visualizzazione dei suggerimenti di rotazione. Consulta StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS. Questo flag deve essere rispettato in tutte le implementazioni in quanto usato da app di sistema fondamentali, tra cui configurazione guidata. L'implementazione fornita supporta questa funzione (vedi NavigationBarFragment.disable()).

Ti consigliamo vivamente di attivare la funzionalità e seguire l'AOSP implementazione, se possibile. Il nostro obiettivo è mantenere l'esperienza di rotazione simile da un dispositivo all'altro, rispecchiando l'uniformità dell'esperienza sulla maggior parte degli smartphone di oggi. tra la rotazione automatica e il blocco verticale.

Personalizzazione

Poiché i suggerimenti di rotazione vengono visualizzati solo in modalità di rotazione bloccata (rotazione automatica disattivata), è possibile scegliere se la funzionalità è attiva per impostazione predefinita per le nuove installazioni e scegliere di disattivare la rotazione automatica per impostazione predefinita. Consulta def_accelerometer_rotation pollici SettingsProvider/res/values/defaults.xml per apportare modifiche predefinite.

Gli utenti possono cambiare facilmente se la rotazione automatica è attiva o meno (indipendentemente dall'impostazione predefinita) tramite il riquadro di rotazione in Impostazioni rapide o Impostazioni display.

Convalida

Per i test, la funzionalità può essere disattivata e attivata modificando un blocco Valore Settings.Secure. Ciò è stato reso più semplice eseguendo il seguente comando da un'istanza adb con privilegi:

adb shell settings put secure show_rotation_suggestions <x>

Imposta x su 0 per disattivare e 1 per on.

Per i test, la modalità introduttiva può essere reimpostata modificando il valore associato Valore Settings.Secure. Ciò è stato reso più semplice eseguendo il seguente comando da un'istanza adb con privilegi:

adb shell settings put secure num_rotation_suggestions_accepted 0