Modo de demonstração na loja

O Android 7.1.1 introduziu suporte no nível do sistema para o modo de demonstração na loja, para que os clientes possam examinar os dispositivos em ação nas lojas. Os dispositivos são configurados para demonstração no varejo usando um app 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 para 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 muito maior do OEM no modo de varejo padrão em termos de gerenciamento de usuários e políticas de dispositivos no dispositivo de demonstração.

Embora as APIs DevicePolicyManager possam ser usadas em versões anteriores ao Android 8.1, os usuários do demo-type (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 na plataforma e descreve o app de demonstração para varejo 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 no 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 no varejo. O SystemServer usa essa flag para gerenciar aspectos do modo varejo, como perfil de energia e 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 demonstração. Ao ver essa configuração, o RetailDemoModeService cria um usuário de demonstração e muda para ele quando o usuário 0 é iniciado, ativa o iniciador personalizado especificado em um recurso de sobreposição e desativa a SUW. O System Server e o SystemUI também usam essa flag para gerenciar aspectos do modo de varejo.

Definir um acesso rápido ou player de vídeo personalizado

Os fabricantes de dispositivos podem especificar um iniciador personalizado substituindo o recurso de framework config_demoModeLauncherComponent 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 na loja, 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 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 padrão do sistema seja iniciada.

O iniciador personalizado precisa ter o componente personalizado marcado como desativado por padrão para que não apareça em cenários que não sejam de demonstração. No cenário de demonstração, o SystemServer 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 oferecer uma possibilidade de entrar no modo varejo. A SUW pode ser modificada para procurar outro sinal específico do OEM de que o modo de demonstração na loja é compatível se o vídeo não fizer parte da demonstração. Se houver partições A/B do sistema, a partição B precisará conter o vídeo de demonstração em /preloads/demo. Ele é copiado para /data/preloads/demo na primeira inicialização.

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

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

Algumas restrições são definidas no usuário de demonstração, de maneira semelhante às políticas de perfil ou de dispositivo gerenciado que impedem que apps e usuários realizem 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. Outros não pedem uma conta, como o YouTube e o Google Fotos. Recomendamos que os apps de OEM também verifiquem se DISALLOW_MODIFY_ACCOUNTS está definido e processem o cenário de acordo.

Atualizações do sistema

Por padrão, quando o modo varejo está ativado, a política do dispositivo é definida para atualização over the air (OTA) automática. Os dispositivos de varejo vão baixar, reiniciar 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 no varejo com base no proprietário do dispositivo exige que um app Controlador de política de dispositivo seja definido como o proprietário do dispositivo. O AOSP contém uma implementação de app RetailDemo de referência em /packages/apps/RetailDemo.

Os apps de proprietário do dispositivo não precisam de privilégios elevados nem de pré-instalação na imagem do sistema e podem ser baixados durante o processo de configuração ou 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 de dispositivo. Confira algumas das funções do DevicePolicyManager aplicáveis ao modo de demonstração na loja.

  • Crie e gerencie usuários.

  • Reinicialize o dispositivo.

  • Defina os pacotes permitidos do LockTask.

  • Instale pacotes usando o PackageInstaller.

  • Impedir a desinstalação de pacotes.

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

  • Desative o protetor de tela.

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

  • Defina um conjunto permitido de configurações 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 às permissões de operações de app, que os usuários ainda precisam conceder por usuário e por app.

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

    • 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 baixar o 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 vídeos diferentes precisarem ser usados em regiões diferentes, configure URLs de download diferentes usando recursos de string específicos da localidade em res/values-*/strings.xml. Por exemplo, se vídeos diferentes precisarem ser usados nos Estados Unidos e na Grã-Bretanha, os URLs de download correspondentes poderão ser colocados em res/values-en-rUS/strings.xml e res/values-en-rGB/strings.xml, respectivamente, conforme mostrado abaixo.

  • 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 vídeo é baixado no máximo uma vez a 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.

Se sim, o app RetailDemo será baixado e começará a reproduzir o vídeo. Depois que o vídeo é baixado, ele é usado para reprodução em todas as sessões de demonstração. Nenhuma das verificações será feita novamente até depois da próxima reinicialização.

Diretrizes para vídeos de demonstração

Os vídeos de demonstração precisam estar no layout retrato ou, se forem em tablets, na orientação natural do dispositivo. Eles podem ter qualquer duração acima de cinco segundos. O conteúdo não pode causar burn-in, já que será reproduzido constantemente quando estiver em exibição.

Consulte as definições de usuários, perfis e contas do desenvolvedor Android, a documentação da API Device Policy Manager e o exemplo de app proprietário do dispositivo para mais informações.

Validação

O CTS não abrange o modo de demonstração na loja porque é um recurso opcional. Os testes precisam ser feitos 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 ser inicializados no modo de demonstração se forem configurados para isso na fábrica. Como alternativa, os funcionários do varejo podem ativar o modo varejo diretamente no assistente de configuração.

Modo de demonstração na loja

Figura 2. Modo de demonstração na loja

Mostrar sessão de demonstração

Quando o dispositivo entra no modo de varejo, ele muda para um novo usuário de demonstração e inicia automaticamente o iniciador personalizado especificado no recurso de sobreposição conforme descrito em Implementação. Por padrão, esse iniciador personalizado reproduz o vídeo de demonstração em loop até que o usuário toque na tela para iniciar uma sessão de usuário de demonstração. Nesse momento, o iniciador personalizado inicia o iniciador do sistema e depois é encerrado. Os OEMs podem alterar o iniciador personalizado para iniciar outro serviço ou atividade ao sair.

Para manter a integridade do modo de demonstração na loja, o keyguard é desativado, e algumas ações das Configurações rápidas que podem afetar negativamente o modo de demonstração na loja também são proibidas, incluindo as seguintes:

  • Alternância do modo avião.
  • Remover ou modificar pontos de acesso Wi-Fi (Configurações).
  • Mudar de operadora (Configurações).
  • Configurar o ponto de acesso (Configurações).
  • Troca de usuário.

Além disso, o acesso a algumas configurações globais que podem afetar o modo varejo também é bloqueado ao desativar 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 (eles 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 pedir que ele saia da sessão ou continue. Se o usuário sair ou não houver resposta por cinco segundos, o modo varejo vai remover o usuário de demonstração atual, mudar para um novo usuário e repetir o vídeo original. Se a tela for desligada usando o botão liga/desliga, ela vai ligar automaticamente depois de alguns segundos.

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

  • 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 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 no carregador de inicialização.