O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Alternar sugestões

No Android 8.0, os usuários podiam alternar entre os modos de rotação automática e rotação retrato usando um bloco Quicksettings ou configurações de exibição. No Android 9, atualizamos o modo de rotação retrato para eliminar rotações não intencionais fixando a rotação atual da tela, mesmo se a posição do dispositivo mudar. Os usuários podem acionar a rotação manualmente quando necessário, pressionando um novo botão na barra de navegação. Renomeamos o modo retrato para bloqueio de rotação e ele é ativado quando a rotação automática está desligada. Não há alterações no modo de rotação automática.

Quando o dispositivo está no modo de bloqueio de rotação, os usuários podem bloquear sua tela em qualquer rotação suportada pela atividade visível na parte superior (dadas as restrições atuais do sistema). Se a atividade superior pode ser processado em várias rotações no modo de auto-rotação, as mesmas opções estarão disponíveis no modo de rotação bloqueado, com algumas exceções com base na sua actividade screenOrientation configuração.

O modo de bloqueio de rotação funciona mostrando um botão na barra de navegação nas alterações de rotação do dispositivo. Para fazer isso, o sensor de orientação do dispositivo deve permanecer ativo mesmo quando a rotação automática está desligada. Tocar neste botão efetivamente define a preferência de rotação de usuário ( Settings.System.USER_ROTATION ). WindowManager usa essa preferência, junto com outros detalhes sobre a atividade principal e o status do sistema, para alterar a rotação do sistema. WindowManager continua a usar a preferência de rotação do usuário ao decidir em qual rotação renderizar o sistema ao mover para outra atividade.

Este gif mostra um telefone na orientação paisagem com a tela na orientação retrato. Um ícone aparece para perguntar ao usuário se deseja alterar a orientação da tela para paisagem.
Figura 1. Girar o botão de sugestão com o gesto "Deslizar para cima no botão Início" ativado

A preferência de rotação do usuário deve ser mantida ao se mover entre as atividades. No entanto, como a maioria dos usuários de telefone deseja ficar na paisagem apenas por um período curto e temporário, adicionamos o viés de orientação natural. Preferência rotação utilizador é reposto a orientação natural do dispositivo sempre que a rotação do sistema muda para a orientação natural do dispositivo. Para a maioria dos telefones, a orientação natural do dispositivo é retrato (0º). A redefinição da preferência de rotação do usuário geralmente acontece ao usar um aplicativo somente retrato, travando o telefone ou retornando ao espaço de trabalho do iniciador.

As interações de rotação para usuários não mudaram muito na última década. Os usuários podem achar esse recurso difícil de descobrir devido ao seu histórico anterior de rotação e posicionamento do botão na barra de navegação. Por esse motivo, adicionamos um modo de introdução ao botão de rotação que o destaca quando aparece. O comportamento do modo de introdução ocorre apenas para as primeiras interações de botão, após as quais o modo de introdução é desativado.

Fonte

Suporte para sugestões de rotação foi adicionado ao Android 9. A maioria das alterações está contida nos arquivos a seguir.

  • services/.../server/policy/PhoneWindowManager.java :
    • Ganchos que consomem a saída de WindowOrientationListener ( MyOrientationListener , responsável pelo acompanhamento sensores para determinar se o dispositivo foi rodado)
    • Mantém o WindowOrientationListener mesmo ativo quando auto-rotação está desativada (ver needSensorRunningLp() )
    • Calcula a rotação do sistema de preferência dada rotação usuário, Atividade top screenOrientation configurações e status do sistema (ver rotationForOrientationLw() )
    • Determinar se o início Actividade pode rodar para uma dada rotação (ver isRotationChoicePossible() )
  • SystemUI/.../statusbar/phone/NavigationBarFragment :
    • Determina se o botão barra de navegação deve ser mostrado em retornos de chamada sugestão rotação de PhoneWindowManager (veja onRotationProposal() )
    • Pegas quando para ocultar o botão barra de navegação rotate (ver chamadas para setRotateSuggestionButtonState(false) )
    • Lida com tempos limite de botão, incluindo o caso especial quando a barra de navegação está oculta (normalmente em tela inteira)
    • Redefine preferência do usuário no retorno à orientação natural do dispositivo ( mRotationWatcher )
    • Escolhas o estilo apropriado para o botão de barra de navegação animação, aplicados em NavigationBarView (veja onRotationProposal() )
    • Adiciona introdução lógica modo, incluindo animação especializada (ver referências a Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED )
    • Implementa a bandeira rotação disable2 (veja disable() )
  • SystemUI/.../statusbar/phone/NavigationBarView.java :
    • Botão estilos ícone animação para corresponder pendente rotação (ver updateRotateSuggestionButtonStyle() )
    • Alterações de visibilidade botão alças (ver setRotateButtonVisibility() ), incluindo a lógica para esconder o botão de rotação se determinados serviços de acessibilidade estão ativos (representando a pilha botão mais à direita navbar ranking)
  • SystemUI/res/layout/menu_ime.xml :
    • Inclui um novo KeyButtonView para o botão de rotação, empilhados acima do menu e IME / seletor de teclado, mas abaixo do botão de acessibilidade
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml :
    • Complexo AnimatedVectorDrawable usado para animar o botão barra de navegação rotate
    • Styling (em SystemUI/res/values/styles.xml ) é utilizado para definir os ângulos de início e de fim de rotação de modo que o mesmo amovível pode ser utilizada para vários animado de partida e que terminam rotações
    • Ícone de tingimento é ajustado através TintedKeyButtonDrawable

Implementação

O Android 9 inclui todas as alterações necessárias para que as sugestões de rotação funcionem para dispositivos que usam as teclas de navegação do software (voltar, casa, etc).

Os fabricantes de dispositivos que criam dispositivos com teclas de navegação de hardware que desejam implementar esse recurso precisarão projetar e implementar sua própria capacidade de IU do sistema ou desativar o recurso. Recomenda-se que qualquer superfície introduzida seja fácil de usar quando o dispositivo é mantido a 90º ou 180º da rotação do sistema atual e é rapidamente acessível. Por esses motivos, o uso de notificações (como é feito para o seletor de IME / teclado) não é recomendado.

Os requisitos de hardware para usar este recurso são iguais aos requisitos para usar a rotação automática.

É necessário para a consistência de implementação que a preferência de rotação de usuário ( Settings.System.USER_ROTATION ) é reposto a rotação natural do dispositivo quando o sistema muda a rotação natural do dispositivo, por qualquer motivo, quando auto-rotação está desligado. A implementação desde que isso (ver NavigationBarFragment.mRotationWatcher ).

Há uma nova bandeira no StatusBarManager.disable2 para evitar temporariamente sugestões de rotação de aparecer. Veja StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS . Este sinalizador deve ser respeitado em todas as implementações, pois é usado por aplicativos críticos do sistema, incluindo o Assistente de Configuração. Os suportes de implementação desde que esta (veja NavigationBarFragment.disable() ).

É altamente recomendável habilitar o recurso e seguir a implementação do AOSP, se possível. Nosso objetivo é manter a experiência de rotação semelhante entre os dispositivos, espelhando a uniformidade da experiência na maioria dos telefones hoje entre a rotação automática e o bloqueio de retrato.

Costumização

Como as sugestões de rotação aparecem apenas no modo de rotação bloqueada (rotação automática desligada), é possível escolher se o recurso é ativado por padrão para novas instalações, escolhendo a rotação automática desativada por padrão. Veja def_accelerometer_rotation em SettingsProvider/res/values/defaults.xml fazer mudanças padrão.

Os usuários podem alterar facilmente se a rotação automática está ativa ou não (independentemente do padrão) por meio do bloco de rotação em Configurações rápidas ou Configurações de exibição.

Validação

Para os testes, o recurso pode ser desligado e ligado, alterando a gating Settings.Secure valor. A maneira mais fácil de fazer isso é executar o seguinte comando em uma instância adb privilegiada:

adb shell settings put secure show_rotation_suggestions <x>

Set x para 0 para fora e 1 em diante.

Para os testes, o modo de introdução pode ser redefinido, alterando o associado Settings.Secure valor. A maneira mais fácil de fazer isso é executar o seguinte comando em uma instância adb privilegiada:

adb shell settings put secure num_rotation_suggestions_accepted 0