Suggestions de rotation

Sous Android 8.0, les utilisateurs pouvaient basculer entre la rotation automatique et la rotation en mode portrait. à l'aide d'un bloc Réglages rapides ou des paramètres d'affichage. Sur Android 9, nous avons mis à jour pour éliminer les rotations involontaires en épinglant la rotation actuelle de l'écran même si la position de l'appareil change. Les utilisateurs peuvent déclencher manuellement en cas de besoin en appuyant sur un nouveau bouton dans la barre de navigation. Le mode Portrait a été renommé "Verrouillage de la rotation", qui s'active lors de la rotation automatique. est désactivé. Aucune modification n'a été apportée au mode de rotation automatique.

Lorsque l'appareil est en mode de verrouillage de la rotation, les utilisateurs peuvent verrouiller leur écran sur rotation prise en charge par l'activité visible supérieure (compte tenu du système actuel contraintes). Si l'activité principale peut être affichée en plusieurs rotations dans le mode rotation automatique, les mêmes options devraient être disponibles en mode rotation verrouillée, à quelques exceptions près, selon l'objet screenOrientation de l'activité .

Le mode verrouillé de la rotation fonctionne en affichant un bouton dans la barre de navigation lors de la rotation de l'appareil des modifications. Pour ce faire, le capteur d'orientation de l'appareil doit rester actif. même si la rotation automatique est désactivée. Appuyer sur ce bouton permet de configurer efficacement la rotation des utilisateurs (Settings.System.USER_ROTATION). WindowManager utilise cette la préférence, ainsi que d'autres informations sur l'activité principale et l'état du système, pour changer la rotation du système. WindowManager continue à utiliser la rotation des utilisateurs pour choisir la rotation dans laquelle afficher le système une autre activité.

Ce GIF montre un téléphone en mode paysage avec l'écran affiché
       en mode portrait. Une icône s'affiche pour demander à l'utilisateur s'il souhaite
       changer l'orientation de son écran en paysage ;
Figure 1. Bouton de suggestion de rotation avec "Balayer" sur le bouton d'accueil » geste activé

La préférence de rotation des utilisateurs doit être maintenue lorsque vous passez d'une activité à une autre. Cependant, comme la plupart des utilisateurs de téléphones ne veulent rester en mode paysage que pendant un court instant, temporaire, nous avons ajouté un biais d'orientation naturelle. Rotation des utilisateurs préférence est rdéfinie sur l'orientation naturelle de l'appareil chaque fois que la rotation du système change en fonction de l'orientation naturelle de l'appareil. Pour la plupart des téléphones, l'orientation naturelle de l'appareil est le mode portrait (0o). Réinitialisation de la rotation des utilisateurs... une préférence est souvent accordée lors de l'utilisation d'une application en mode portrait, du verrouillage du téléphone retour à l'espace de travail du lanceur d'applications.

Les interactions de rotation des utilisateurs n'ont pas beaucoup changé au cours de la dernière décennie. Utilisateurs peuvent avoir du mal à découvrir cette caractéristique, compte tenu de leur historique de rotation et le positionnement des boutons dans la barre de navigation. C'est pourquoi nous avons ajouté d'introduction au bouton de rotation qui le met en surbrillance lorsqu'il apparaît. Introduction du mode ne se produit que lors des premières interactions avec le bouton. le mode introduction est désactivé.

Source

Les suggestions de rotation sont maintenant disponibles dans Android 9. La plupart des modifications sont contenues dans les fichiers suivants.

  • services/.../server/policy/PhoneWindowManager.java: <ph type="x-smartling-placeholder">
      </ph>
    • Hooks qui consomment la sortie de WindowOrientationListener (MyOrientationListener, responsable de la surveillance capteurs pour déterminer si l'appareil a été pivoté)
    • Le WindowOrientationListener reste actif même lorsque la rotation automatique est désactivée (voir needSensorRunningLp())
    • Calcule la rotation du système en fonction de la préférence de rotation de l'utilisateur, en haut Paramètres de l'activité screenOrientation et état du système (voir rotationForOrientationLw())
    • Déterminez si l'activité principale peut effectuer une rotation selon une rotation donnée (voir isRotationChoicePossible()).
  • SystemUI/.../statusbar/phone/NavigationBarFragment: <ph type="x-smartling-placeholder">
      </ph>
    • Détermine si le bouton de la barre de navigation doit s'afficher lors d'une rotation suggestions de rappels de PhoneWindowManager (voir onRotationProposal())
    • Permet de gérer quand masquer le bouton de rotation de la barre de navigation (voir les appels à setRotateSuggestionButtonState(false)).
    • Gère les délais d'inactivité des boutons, y compris le cas particulier lorsque le La barre de navigation est masquée (généralement en plein écran)
    • Réinitialise les préférences de l'utilisateur lorsqu'il revient à la configuration orientation (mRotationWatcher)
    • Choisit le style approprié pour l'animation du bouton de la barre de navigation appliqué dans NavigationBarView (voir onRotationProposal())
    • Ajout d'une logique pour le mode d'introduction, y compris une animation spécialisée (voir les références Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED).
    • Implémente l'indicateur de rotationdisable2 (voir disable()).
  • SystemUI/.../statusbar/phone/NavigationBarView.java: <ph type="x-smartling-placeholder">
      </ph>
    • Animation de l'icône du bouton "Styles" pour correspondre à la rotation en attente (voir updateRotateSuggestionButtonStyle()).
    • Gère les changements de visibilité des boutons (voir setRotateButtonVisibility()), y compris la logique de masquage Bouton de rotation si certains services d'accessibilité sont actifs (en tenant compte du classement de la pile de boutons la plus à droite de la barre de navigation)
  • SystemUI/res/layout/menu_ime.xml: <ph type="x-smartling-placeholder">
      </ph>
    • Inclut un nouveau KeyButtonView pour le bouton de rotation empilés au-dessus du menu et du sélecteur IME/clavier, mais en dessous Bouton Accessibilité
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml: <ph type="x-smartling-placeholder">
      </ph>
    • Élément AnimatedVectorDrawable complexe utilisé pour animer le bouton de rotation de la barre de navigation
    • Le style (dans SystemUI/res/values/styles.xml) permet de définissez les angles de départ et de fin de rotation afin que le même drawable puisse être utilisé pour animer différentes rotations de début et de fin
    • Les teintes des icônes sont définies via TintedKeyButtonDrawable

Implémentation

Android 9 inclut toutes les modifications nécessaires pour obtenir suggestions de rotation fonctionnent pour les appareils qui utilisent des touches de navigation logicielles (retour, domicile, etc.).

Fabricants d'appareils qui créent des appareils avec des touches de navigation matérielles pour implémenter cette fonctionnalité devront concevoir et implémenter leur propre UI système. l' affordance ou la désactivation de la fonction. Il est recommandé d'intégrer Être faciles à utiliser lorsque l'appareil est tenu à 90 ou 180° par rapport au système actuel et est rapidement accessible. C'est pourquoi l'utilisation des notifications (comme pour l'IME/le sélecteur de clavier) n'est pas recommandée.

La configuration matérielle requise pour utiliser cette fonctionnalité est identique à celle requise pour utiliser la rotation automatique.

Pour assurer la cohérence de l'implémentation, il est nécessaire que la préférence de rotation des utilisateurs (Settings.System.USER_ROTATION) est réinitialisée selon la configuration lorsque le système passe à la rotation naturelle de l'appareil pour une raison quelconque lorsque la rotation automatique est désactivée. L'implémentation fournie effectue cette opération (voir NavigationBarFragment.mRotationWatcher).

Il y a un nouvel indicateur dans StatusBarManager.disable2 pour empêcher l'affichage des suggestions de rotation. Voir StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS Cet indicateur doit être respecté dans toutes les implémentations, comme c'est le cas par les applications système critiques, y compris Assistant de configuration. L'implémentation fournie le permet (voir NavigationBarFragment.disable()).

Nous vous recommandons vivement d'activer la fonctionnalité et de suivre l'AOSP. si possible. Notre but est que l'expérience de rotation reste entre appareils, reflétant l'uniformité de l'expérience sur la plupart des téléphones aujourd'hui entre la rotation automatique et le verrouillage en mode portrait.

Personnalisation

Comme les suggestions de rotation ne s'affichent qu'en mode verrouillage de la rotation (rotation automatique désactivée), vous pouvez choisir d'activer ou non cette fonctionnalité par défaut pour les nouvelles installations la rotation automatique doit être désactivée par défaut. Voir def_accelerometer_rotation po SettingsProvider/res/values/defaults.xml pour apporter des modifications par défaut.

Les utilisateurs peuvent facilement modifier si la rotation automatique est activée ou non (quelle que soit la valeur par défaut). via la rotation du bloc dans les réglages rapides ou les paramètres d'affichage.

Validation

À des fins de test, il est possible d'activer et de désactiver cette fonctionnalité en modifiant un contrôle. Valeur Settings.Secure. Le plus simple est d'exécuter à partir d'une instance adb privilégiée:

adb shell settings put secure show_rotation_suggestions <x>

Définissez x sur 0 pour désactiver et 1 pour l'activer.

Pour les tests, vous pouvez réinitialiser le mode introduction en modifiant les paramètres Valeur Settings.Secure. Le plus simple est d'exécuter à partir d'une instance adb privilégiée:

adb shell settings put secure num_rotation_suggestions_accepted 0