Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Rotar sugerencias

En Android 8.0, los usuarios podían alternar entre los modos de rotación automática y vertical utilizando un mosaico de Configuración rápida o la configuración de pantalla. En Android 9, actualizamos el modo de rotación vertical para eliminar las rotaciones involuntarias al fijar la rotación actual de la pantalla incluso si cambia la posición del dispositivo. Los usuarios pueden activar la rotación manualmente cuando sea necesario presionando un nuevo botón en la barra de navegación. Cambiamos el nombre del modo retrato a bloqueo de rotación y se activa cuando la rotación automática está desactivada. No hay cambios en el modo de rotación automática.

Cuando el dispositivo está en modo de bloqueo de rotación, los usuarios pueden bloquear su pantalla en cualquier rotación admitida por la actividad visible superior (dadas las limitaciones actuales del sistema). Si la actividad de la parte superior se puede representar en múltiples rotaciones en el modo de auto-rotación, las mismas opciones estarán disponibles en el modo de rotación bloqueada, con algunas excepciones basadas en la actividad de screenOrientation ajuste.

El modo de bloqueo de rotación funciona mostrando un botón en la barra de navegación en los cambios de rotación del dispositivo. Para lograr esto, el sensor de orientación del dispositivo debe permanecer activo incluso cuando la rotación automática está desactivada. Al tocar este botón establece efectivamente preferencia rotación de usuario ( Settings.System.USER_ROTATION ). WindowManager usa esta preferencia, junto con otros detalles sobre la actividad principal y el estado del sistema, para cambiar la rotación del sistema. WindowManager continúa usando la preferencia de rotación del usuario al decidir en qué rotación renderizar el sistema cuando se mueve a otra actividad.

Este gif muestra un teléfono en orientación horizontal con la pantalla en orientación vertical. Aparece un icono para preguntarle al usuario si desea cambiar la orientación de la pantalla a horizontal.
Figura 1. Gire el botón de sugerencia con el gesto "Deslizar hacia arriba en el botón de inicio" habilitado

La preferencia de rotación del usuario debe mantenerse al moverse entre actividades. Sin embargo, debido a que la mayoría de los usuarios de teléfonos solo quieren estar en paisaje durante un período de tiempo corto y temporal, agregamos un sesgo de orientación natural. Preferencia rotación usuario se restablece a la orientación natural del dispositivo cada vez que la rotación del sistema cambia a la orientación natural del dispositivo. Para la mayoría de los teléfonos, la orientación natural del dispositivo es vertical (0º). El restablecimiento de la preferencia de rotación del usuario a menudo ocurre cuando se usa una aplicación de solo retrato, se bloquea el teléfono o se regresa al espacio de trabajo del iniciador.

Las interacciones de rotación para los usuarios no han cambiado mucho en la última década. Los usuarios pueden encontrar esta función difícil de descubrir dado su historial previo con la rotación y el posicionamiento de los botones en la barra de navegación. Por esta razón, hemos agregado un modo de introducción al botón Girar que lo resalta cuando aparece. El comportamiento del modo de introducción solo ocurre durante las primeras interacciones de los botones, después de lo cual se desactiva el modo de introducción.

Fuente

Se ha agregado soporte para sugerencias de rotación a Android 9. La mayoría de los cambios se encuentran en los siguientes archivos.

  • services/.../server/policy/PhoneWindowManager.java :
    • Hooks que consumen la salida de WindowOrientationListener ( MyOrientationListener , responsable del seguimiento de sensores para determinar si el dispositivo ha sido girado)
    • Mantiene el WindowOrientationListener incluso cuando se activa auto-rotación está desactivado (ver needSensorRunningLp() )
    • Calcula la rotación sistema de preferencia dada la rotación, Los más Actividad screenOrientation configuración y el estado del sistema (ver rotationForOrientationLw() )
    • Determinar si la actividad superior puede girar a una rotación dada (ver isRotationChoicePossible() )
  • SystemUI/.../statusbar/phone/NavigationBarFragment :
    • Determina si el botón de barra de navegación debe aparecer en devoluciones de llamada de rotación sugerencia de PhoneWindowManager (ver onRotationProposal() )
    • Manijas cuando para ocultar el botón de barra de navegación de rotación (ver las llamadas a setRotateSuggestionButtonState(false) )
    • Controla los tiempos de espera de los botones, incluido el caso especial cuando la barra de navegación está oculta (comúnmente en pantalla completa)
    • Restablece preferencia de los usuarios en el retorno a la orientación natural del dispositivo ( mRotationWatcher )
    • Selecciones el estilo apropiado para la animación de botón de barra de navegación, aplicado en NavigationBarView (ver onRotationProposal() )
    • Añade modo lógico de introducción, incluyendo la animación especializados (ver referencias a Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED )
    • Implementa el señalizador de rotación disable2 (ver disable() )
  • SystemUI/.../statusbar/phone/NavigationBarView.java :
    • Botón de estilos icono de animación para que coincida con la espera de rotación (ver updateRotateSuggestionButtonStyle() )
    • Cambios de visibilidad botón de asas (ver setRotateButtonVisibility() ), incluyendo la lógica para ocultar el botón de rotación si ciertos servicios de accesibilidad son activos (que representa más a la derecha barra de navegación botón de clasificación de pila)
  • SystemUI/res/layout/menu_ime.xml :
    • Incluye un nuevo KeyButtonView para el botón de rotación, apilados encima del menú e IME / selector de teclado, pero por debajo del botón Accesibilidad
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml :
    • Complejo AnimatedVectorDrawable utilizado para animar el botón de barra de navegación de rotación
    • Styling (en SystemUI/res/values/styles.xml ) se utiliza para establecer los ángulos de inicio y final de la rotación por lo que el mismo estirable se puede utilizar para animar varios de partida y las rotaciones que terminan
    • Teñido del icono se establece a través de TintedKeyButtonDrawable

Implementación

Android 9 incluye todos los cambios necesarios para que las sugerencias de rotación funcionen en dispositivos que utilizan teclas de navegación de software (atrás, inicio, etc.).

Los fabricantes de dispositivos que creen dispositivos con teclas de navegación de hardware que deseen implementar esta función deberán diseñar e implementar su propia interfaz de usuario del sistema o desactivar la función. Se recomienda que cualquier superficie introducida sea fácil de usar cuando el dispositivo se mantiene a 90º o 180º de la rotación actual del sistema y es rápidamente accesible. Por estas razones, no se recomienda el uso de notificaciones (como se hace para el selector de IME / teclado).

Los requisitos de hardware para utilizar esta función son los mismos que los requisitos para utilizar la rotación automática.

Es necesario que la consistencia aplicación que la preferencia de rotación de usuario ( Settings.System.USER_ROTATION ) se restablece a la rotación natural del dispositivo cuando el sistema cambia a la rotación natural del dispositivo por cualquier razón cuando auto-rotación está apagado. La implementación proporcionada tiene esto (ver NavigationBarFragment.mRotationWatcher ).

Hay una nueva bandera en StatusBarManager.disable2 para evitar temporalmente sugerencias de rotación de aparecer. Ver StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS . Este indicador debe respetarse en todas las implementaciones, ya que lo utilizan las aplicaciones críticas del sistema, incluido el Asistente de configuración. Los soportes proporcionado implementación de este (ver NavigationBarFragment.disable() ).

Recomendamos encarecidamente habilitar la función y seguir la implementación de AOSP, si es posible. Nuestro objetivo es mantener la experiencia de rotación similar entre dispositivos, reflejando la uniformidad en la experiencia en la mayoría de los teléfonos actuales entre la rotación automática y el bloqueo vertical.

Personalización

Como las sugerencias de rotación aparecen solo en el modo de rotación bloqueada (rotación automática desactivada), es posible elegir si la función está activada por defecto para nuevas instalaciones eligiendo tener la rotación automática desactivada de forma predeterminada. Ver def_accelerometer_rotation en SettingsProvider/res/values/defaults.xml hacer cambios por defecto.

Los usuarios pueden cambiar fácilmente si la rotación automática está activa o no (independientemente de la configuración predeterminada) a través del mosaico de rotación en Configuración rápida o Configuración de pantalla.

Validación

Para la prueba, la característica se puede apagar y encender mediante la alteración de una compuerta Settings.Secure valor. Esto se logra más fácilmente ejecutando el siguiente comando desde una instancia de adb privilegiada:

adb shell settings put secure show_rotation_suggestions <x>

Conjunto X a 0 para el apagado y 1 para el.

Para la prueba, el modo de introducción se puede restablecer mediante la alteración de la asociada Settings.Secure valor. Esto se logra más fácilmente ejecutando el siguiente comando desde una instancia de adb privilegiada:

adb shell settings put secure num_rotation_suggestions_accepted 0