En Android 8.0, los usuarios podían alternar entre la rotación automática y la vertical mediante una tarjeta de Configuración rápida o la configuración de Pantalla. En Android 9, actualizamos modo de rotación vertical para eliminar las rotaciones involuntarias fijando rotación de la pantalla actual, incluso si cambia la posición del dispositivo. Los usuarios pueden activar rotación manual 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 gira automáticamente 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 la pantalla en cualquier
rotación admitida por la parte superior, visible (según el sistema actual
restricciones). Si la actividad superior se puede renderizar en varias rotaciones en
las mismas opciones deben estar disponibles
en el modo de rotación bloqueada
con algunas excepciones basadas en el objeto screenOrientation
del lugar.
El modo de bloqueo de rotación funciona mostrando un botón en la barra de navegación durante la rotación del dispositivo
cambios. Para lograr esto, el sensor de orientación del dispositivo debe permanecer activo
incluso cuando la opción de girar automáticamente está desactivada. Cuando se presiona este botón, se configura de manera eficaz la rotación de los usuarios.
preferencia (Settings.System.USER_ROTATION
). WindowManager la usa
preferencia, junto con otros detalles sobre la actividad principal y el estado del sistema,
para cambiar la rotación del sistema. WindowManager sigue usando la rotación de usuarios
cuando decidas en qué rotación renderizará el sistema cuando se mueva
otra actividad.
Se debe mantener la preferencia de rotación del usuario cuando se mueve entre actividades. Sin embargo, debido a que la mayoría de los usuarios de teléfonos solo quieren estar en modo horizontal de tiempo temporal, agregamos el sesgo de orientación natural. Rotación de usuarios preferencia es restablecer a la orientación natural del dispositivo cada vez que la rotación del sistema cambia a la orientación natural del dispositivo. En la mayoría de los teléfonos, la orientación natural del dispositivo es vertical (0o). Restableciendo la rotación del usuario preferencia se produce cuando se usa una app solo con orientación vertical, cuando se bloquea el teléfono o regresando al espacio de trabajo del selector.
Las interacciones de rotación para los usuarios no han cambiado mucho en la última década. Usuarios puede ser difícil descubrir esta función debido a su historial previo con la rotación y la posición de los botones en la barra de navegación. Por esta razón, hemos agregado un modo introducción al botón de rotación que lo destaca cuando aparece. Introducción el comportamiento del modo solo ocurre durante las primeras interacciones con el botón. Luego, el modo de introducción está inhabilitado.
Fuente
Se agregó compatibilidad con las sugerencias de rotación a Android 9 La mayoría de los cambios se incluyen en el los siguientes archivos.
services/.../server/policy/PhoneWindowManager.java
:- Enlaces que consumen el resultado de
WindowOrientationListener
(MyOrientationListener
, responsable de supervisar sensores para determinar si se rotó el dispositivo) - Mantiene el elemento
WindowOrientationListener
activo incluso cuando El giro automático está inhabilitado (consultaneedSensorRunningLp()
). - Calcula la rotación del sistema según la preferencia de rotación del usuario, arriba
Configuración y estado del sistema de la actividad
screenOrientation
(consultarotationForOrientationLw()
). - Determina si la actividad superior puede rotar en una rotación determinada (consulta la sección
isRotationChoicePossible()
)
- Enlaces que consumen el resultado de
SystemUI/.../statusbar/phone/NavigationBarFragment
:- Determina si se debe mostrar el botón de la barra de navegación durante la rotación
devoluciones de llamada de sugerencias de
PhoneWindowManager
(consultaonRotationProposal()
). - Controla cuándo ocultar el botón para rotar la barra de navegación (consulta las llamadas a
setRotateSuggestionButtonState(false)
) - Controla los tiempos de espera del botón, incluido el caso especial en el que La barra de navegación está oculta (por lo general, en pantalla completa)
- Restablece las preferencias del usuario al volver a la configuración natural del dispositivo.
orientación (
mRotationWatcher
) - Selecciona el estilo adecuado para la animación del botón de la barra de navegación.
se aplicó en
NavigationBarView
(consultaonRotationProposal()
). - Agrega lógica del modo de introducción, incluida la animación especializada.
(consulta las referencias a
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
) - Implementa la marca de rotación inhabilite2 (consulta
disable()
).
- Determina si se debe mostrar el botón de la barra de navegación durante la rotación
devoluciones de llamada de sugerencias de
SystemUI/.../statusbar/phone/NavigationBarView.java
:- Animación del ícono del botón de estilos para que coincida con la rotación pendiente (consulta
updateRotateSuggestionButtonStyle()
) - Controla los cambios en la visibilidad de los botones (consulta
setRotateButtonVisibility()
), incluida la lógica para ocultar el botón para rotar si ciertos servicios de accesibilidad están activos (teniendo en cuenta la clasificación de la pila de botones de la barra de navegación que se encuentra más a la derecha)
- Animación del ícono del botón de estilos para que coincida con la rotación pendiente (consulta
SystemUI/res/layout/menu_ime.xml
:- Se incluye un
KeyButtonView
nuevo para el botón de rotación. apilados encima del menú y del selector de IME/teclado, pero debajo del Botón de accesibilidad
- Se incluye un
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
:- Complejo
AnimatedVectorDrawable
usado para animar la botón para rotar la barra de navegación - El diseño (en
SystemUI/res/values/styles.xml
) se usa para lo siguiente: definir los ángulos de rotación inicial y final para que el mismo elemento de diseño pueda que se usa para animar varias rotaciones de inicio y finalización - El tono de los íconos se establece mediante
TintedKeyButtonDrawable
- Complejo
Implementación
Android 9 incluye todos los cambios necesarios para obtener de rotación que funcionan para dispositivos que usan botones de navegación de software (atrás, casa, etc.).
Fabricantes de dispositivos que crean dispositivos con teclas de navegación de hardware que desean Para implementar esta función, deberán diseñar e implementar su propia IU del sistema. o inhabilitar la función. Se recomienda que todas las capas introducidas ser fácil de usar cuando el dispositivo se mantiene a 90o o 180o con respecto al sistema actual y es de fácil acceso. Por estos motivos, el uso de notificaciones (como se hace para el selector de IME/teclado) no se recomienda.
Los requisitos de hardware para usar esta función son los mismos que los requisitos para para utilizar la opción de girar automáticamente.
Para la coherencia en la implementación, es necesario saber que la preferencia de rotación del usuario
(Settings.System.USER_ROTATION
) se restableció a la configuración natural del dispositivo
rotación cuando el sistema cambia a la rotación natural del dispositivo por cualquier motivo
cuando la rotación automática está desactivada. La implementación proporcionada hace esto (consulta
NavigationBarFragment.mRotationWatcher
).
Hay una nueva marca en StatusBarManager.disable2
para temporalmente
evitar que aparezcan sugerencias de rotación. Consulta
StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
Esta marca debe ser
respetado en todas las implementaciones, tal como lo usan las aplicaciones críticas del sistema, incluidas
Asistente de configuración La implementación proporcionada es compatible con esto (consulta
NavigationBarFragment.disable()
).
Te recomendamos que habilites la función y sigas las instrucciones de AOSP para implementarlos, si es posible. Nuestro objetivo es que la experiencia de rotación sea similar entre dispositivos, lo que refleja la uniformidad de la experiencia en la mayoría de los teléfonos actuales. entre el giro automático y el bloqueo vertical.
Personalización
Como las sugerencias de rotación solo aparecen en el modo de rotación bloqueada (rotación automática desactivada),
es posible elegir si la función está activada de forma predeterminada para las nuevas instalaciones.
la opción de girar automáticamente está desactivada de forma predeterminada. Consulta
def_accelerometer_rotation
in
SettingsProvider/res/values/defaults.xml
para realizar cambios predeterminados.
Los usuarios pueden cambiar con facilidad si la rotación automática está activa o no (independientemente de la configuración predeterminada). mediante el mosaico de rotación en la Configuración rápida o la configuración de Visualización.
Validación
Para realizar pruebas, la función se puede activar y desactivar mediante la modificación de un control de acceso.
Valor Settings.Secure
. Esto se logró con más facilidad al ejecutar
siguiente comando desde una instancia de adb con privilegios:
adb shell settings put secure show_rotation_suggestions <x>
Establece x en 0
para desactivarla y 1
para activar la función.
Para las pruebas, el modo de introducción puede restablecerse modificando los
Valor Settings.Secure
. Esto se logró con más facilidad al ejecutar
siguiente comando desde una instancia de adb con privilegios:
adb shell settings put secure num_rotation_suggestions_accepted 0