Modo de demonstração na loja

O Android 7.1.1 introduziu suporte no nível do sistema ao modo de demonstração de varejo para que os clientes possam examinar os dispositivos em ação em lojas de varejo. Os dispositivos são configurados para demonstração na loja usando um app do proprietário do dispositivo para garantir que o uso seja restrito apenas a determinados apps do modo de demonstração. Os usuários finais não podem adicionar uma conta pessoal em um dispositivo de demonstração de varejo. O Android 8.1 revisa esse suporte para criar usuários de demonstração usando a API createAndManageUser do DevicePolicyManager. Isso permite uma personalização de OEM muito maior para o modo de varejo padrão em termos de gerenciamento de usuários e de políticas de dispositivos no dispositivo de demonstração.

Embora as APIs DevicePolicyManager possam ser usadas em versões anteriores ao Android 8.1, usuários do tipo de demonstração (DevicePolicyManager.MAKE_USER_DEMO) não podem ser criados com a API createAndManageUser nas versões 8.0 e anteriores.

Implementação no Android 8.1 e versões mais recentes

Esta seção destaca as melhorias da plataforma e descreve o app de demonstração na loja no Android 8.1 e versões mais recentes.

Mudanças na plataforma

Definir DEVICE_DEMO_MODE

Os dispositivos que implementam um modo de demonstração de varejo baseado no proprietário do dispositivo precisam definir Settings.Global.DEVICE_DEMO_MODE como 1 antes do provisionamento para indicar que o dispositivo está sendo provisionado para o modo de demonstração de varejo. O SystemServer usa essa flag para gerenciar aspectos do modo de varejo, como o perfil de energia e a SystemUI.

Ativar o RetailDemoModeService

Em dispositivos que implementam um modo de demonstração na loja, o assistente de configuração define uma configuração global Global.DEVICE_DEMO_MODE como true para indicar que o dispositivo entrou no modo de varejo. Ao ver essa configuração, retailDemoModeService cria um usuário de demonstração e alterna para ele quando o usuário 0 é iniciado, ativa a tela de início personalizada especificada em um recurso de sobreposição e desativa o SUW. O servidor do sistema e a SystemUI também usam essa flag para gerenciar aspectos do modo de varejo.

Definir tela de início ou player de vídeo personalizado

Os fabricantes de dispositivos podem especificar um iniciador personalizado substituindo o recurso config_demoModeLauncherComponent do framework especificado no arquivo config.xml da seguinte maneira.

<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>

O app DemoPlayer de demonstração para varejo localizado em /packages/apps/RetailDemo é o iniciador personalizado padrão no Android Open Source Project (AOSP). O app procura um vídeo em uma partição do dispositivo, como /data/preloads/demo/retail_demo.mp4, e o reproduz em um loop. Quando o usuário toca na tela, a tela de início personalizada desativa o componente de atividade, o que faz com que a tela de início do sistema padrão seja iniciada.

O componente personalizado do iniciador personalizado precisa ser marcado como desativado por padrão para que ele não apareça em cenários que não sejam de demonstração. No cenário de demonstração, o servidor do sistema ativa o config_demoModeLauncherComponent especificado ao iniciar uma nova sessão de demonstração.

O assistente de configuração também procura o vídeo mencionado anteriormente para fornecer uma facilidade para entrar no modo de varejo. A SUW pode ser modificada para procurar algum outro sinal específico do OEM de que o modo de varejo é compatível se o vídeo não fizer parte da demonstração. Se houver partições A/B do sistema, a partição do sistema B precisará conter o vídeo de demonstração em /preloads/demo. Ele é copiado para /data/preloads/demo na primeira inicialização.

Personalize apps pré-carregados para o modo de demonstração na loja

Os apps pré-carregados podem personalizar a experiência no modo de demonstração na loja chamando a API UserManager.isDemoUser() para saber se o app é iniciado em um ambiente de demonstração.

Certas restrições são definidas no usuário de demonstração, semelhantes às políticas de perfil ou dispositivo gerenciado que impedem que apps e usuários executem determinadas operações. Uma dessas restrições é DISALLOW_MODIFY_ACCOUNTS. Com essa restrição, o AccountManager e as Configurações não permitem a adição de contas. Alguns apps do Google reagem a essa restrição e mostram uma mensagem de erro, e outros não solicitam uma conta (como o YouTube e o Google Fotos). Recomendamos que apps OEM também verifiquem se DISALLOW_MODIFY_ACCOUNTS está definido e processem o cenário corretamente.

Atualizações do sistema

Por padrão, quando o modo de varejo está ativado, a política do dispositivo é definida para atualização over the air (OTA) automaticamente. Os dispositivos de varejo vão fazer o download, reinicializar e instalar a atualização (respeitando os limites de bateria) sem interação do usuário.

App de demonstração na loja

A implementação do modo de demonstração de varejo baseado no proprietário do dispositivo exige que um aplicativo Device Policy Controller seja definido como o proprietário do dispositivo. O AOSP contém uma implementação de referência do app RetailDemo em /packages/apps/retailDemo.

Os apps do proprietário do dispositivo não precisam de privilégios elevados ou da pré-instalação na imagem do sistema e podem ser transferidos por download durante a configuração ou o processo de provisionamento. Eles são implementados principalmente como apps tradicionais, com as seguintes diferenças:

As APIs na classe DevicePolicyManager permitem que o proprietário do dispositivo (DO) e o proprietário do perfil (PO) apliquem várias políticas do dispositivo. Veja a seguir algumas das funções do DevicePolicyManager aplicáveis ao modo de demonstração na loja.

  • Criar e gerenciar usuários.

  • Reinicialize o dispositivo.

  • Define os pacotes permitidos do LockTask.

  • Instale os pacotes usando o PackageInstaller.

  • Bloquear a desinstalação de pacotes.

  • Ative as atualizações automáticas do sistema. Os dispositivos vão fazer o download e aplicar atualizações OTA automaticamente.

  • Desativar o bloqueio de teclado.

  • Impedir a configuração de senhas ou impressões digitais.

  • Defina uma lista de permissões de Settings.Global, Settings.Secure e Settings.System.

  • Defina a política de permissão como PERMISSION_POLICY_AUTO_GRANT, que concede automaticamente todas as permissões de execução. As permissões também podem ser concedidas de forma mais restrita: uma única permissão para um único app. Isso não se aplica a permissões de operações de apps, que os usuários ainda precisam conceder por usuário e por app.

  • Defina as restrições de usuário relevantes para o modo de varejo, conforme definido em UserManager, da seguinte maneira:

    • DISALLOW_MODIFY_ACCOUNTS
    • DISALLOW_USB_FILE_TRANSFER
    • DISALLOW_DEBUGGING_FEATURES
    • DISALLOW_CONFIG_WIFI
    • DISALLOW_CONFIG_BLUETOOTH
    • DISALLOW_INSTALL_UNKNOWN_SOURCES
    • DISALLOW_CONFIG_MOBILE_NETWORKS

Atualizar o vídeo de demonstração usando a Web

O app RetailDemo em /packages/apps/retailDemo pode atualizar o vídeo de demonstração se houver conectividade de rede. O URL para fazer o download do vídeo pode ser configurado substituindo o seguinte valor de string no app RetailDemo.

<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>

Se diferentes vídeos precisarem ser usados em diferentes regiões, diferentes URLs de download poderão ser configurados usando recursos de string específicos de localidade em res/values-*/strings.xml. Por exemplo, se é preciso usar vídeos diferentes nos Estados Unidos e na Grã-Bretanha, os URLs de download correspondentes podem ser colocados em res/values-en-rUS/strings.xml e res/values-en-rGB/strings.xml, respectivamente, mostrados da seguinte maneira:

  • Em res/values-en-rUS/strings.xml:

    <string name="retail_demo_video_download_url">download URL for US video goes here</string>
    
  • Em res/values-en-rGB/strings.xml:

    <string name="retail_demo_video_download_url">download URL for UK video goes here</string>
    

O download deste vídeo é feito no máximo uma vez para cada reinicialização do dispositivo. Quando o vídeo no dispositivo está sendo reproduzido, o app RetailDemo verifica em segundo plano se o URL de download foi fornecido e se o vídeo no URL é mais recente do que o que está sendo reproduzido.

Nesse caso, o app RetailDemo faz o download e começa a reproduzir o vídeo. Depois que o vídeo é feito o download, ele é usado para reprodução em todas as sessões de demonstração. Nenhuma das verificações acontece de novo até a próxima reinicialização.

Diretrizes para vídeos de demonstração

Os vídeos de demonstração precisam estar no layout de retrato ou, no caso do tablet, na orientação natural do dispositivo, e podem ter qualquer duração maior que cinco segundos. O conteúdo não pode resultar em burn-in, já que será reproduzido constantemente quando estiver na tela.

Para mais informações, consulte Definições de usuários, perfis e contas para desenvolvedores Android, a documentação da API Device Policy Manager e o app de exemplo do proprietário do dispositivo.

Validação

O CTS não abrange o modo de demonstração para varejo porque ele é um recurso opcional. O teste precisa ser realizado manualmente ou com testes de unidade para o app de demonstração.

Sessão de demonstração

Configuração da sessão de demonstração

Os dispositivos de demonstração na loja podem inicializar no modo de demonstração na loja se forem configurados para o modo de demonstração na fábrica. Os funcionários do varejo também podem ativar o modo de varejo diretamente no assistente de configuração.

Modo de demonstração na loja

Figura 2. Modo de demonstração na loja

Mostrar a sessão de demonstração

Quando o dispositivo entra no modo de varejo, ele alterna para um novo usuário de demonstração e inicia automaticamente a tela de início personalizada especificada no recurso de sobreposição, conforme descrito em Implementação. Por padrão, essa tela de início personalizada reproduz o vídeo de demonstração várias vezes até que o usuário toque na tela para iniciar uma sessão de demonstração. Nesse momento, a tela de início personalizada inicia a tela de início do sistema e é encerrada. Os OEMs podem mudar a tela de início personalizada para iniciar também outro serviço ou atividade na saída.

Para manter a integridade do modo de varejo, o bloqueio de teclado é desativado e algumas ações das Configurações rápidas que podem afetar negativamente o modo de varejo também não são permitidas, incluindo as seguintes.

  • Botão para ativar ou desativar o modo avião.
  • Remover ou modificar pontos de acesso Wi-Fi (Configurações).
  • Como mudar de operadora (Configurações).
  • Configurar o ponto de acesso (Configurações).
  • Troca de usuário.

Além disso, o acesso também é bloqueado para algumas configurações globais que podem afetar o modo de varejo, desativando o seguinte:

  • Configurações de Wi-Fi.
  • Opções de configuração de rede celular, principalmente pontos de acesso.
  • Configuração do Bluetooth.
  • Backup e redefinição, data e hora e redes móveis (elas não aparecem).

Se o usuário ficar inativo por algum tempo (90 segundos por padrão), o modo de varejo vai mostrar uma caixa de diálogo do sistema para solicitar que o usuário saia da sessão ou continue. Se o usuário optar por sair ou não houver resposta por cinco segundos, o modo de varejo removerá o usuário de demonstração atual, alternará para um novo usuário e acessará o vídeo original novamente. Se a tela for desligada usando o botão liga/desliga, ela será reativada automaticamente após alguns segundos.

Depois de sair de uma sessão de demonstração, os dispositivos silenciam e redefinem algumas configurações globais, incluindo o seguinte:

  • Brilho
  • Rotação automática
  • Lanterna
  • Idioma
  • Acessibilidade

Sair do modo de demonstração na loja

Para sair do modo de varejo, os funcionários do varejo precisam garantir que o dispositivo de demonstração não esteja registrado no gerenciamento de dispositivos e redefinir o dispositivo para a configuração original usando o carregador de inicialização.