Modo de demonstração na loja

O Android 7.1.1 introduziu o 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 de varejo usando um app de proprietário do dispositivo para garantir que o uso do dispositivo 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 muito maior do OEM no modo de varejo padrão em termos de gerenciamento de usuários e políticas de dispositivo 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 os aprimoramentos da plataforma e descreve o app de demonstração de 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 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 o 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, 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 o 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 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 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 affordance 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 do sistema A/B, a partição do sistema B precisará conter o vídeo de demonstração em /preloads/demo. Isso é 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 no modo de demonstração na loja chamando a API UserManager.isDemoUser() para saber se o app é iniciado em um ambiente de demonstração.

Determinadas restrições são definidas no usuário de demonstração, semelhante a políticas de perfil ou 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, enquanto outros não solicitam uma conta (como o YouTube e o Google Fotos). Recomendamos que os apps 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 de varejo está ativado, a política do dispositivo é definida como atualização over the air (OTA) automaticamente. Os dispositivos de varejo vão fazer o download, reiniciar e instalar a atualização (respeitando os limites de bateria) sem a interação do usuário.

App de demonstração na loja

A implementação do modo de demonstração de 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 referência do app RetailDemo em /packages/apps/RetailDemo.

Os apps de proprietário do dispositivo não precisam de privilégios elevados ou pré-instalação na imagem do sistema e podem ser transferidos por download 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 do dispositivo. Algumas das funções do DevicePolicyManager aplicáveis ao modo de demonstração na loja estão listadas abaixo.

  • Crie e gerencie usuários.

  • Reinicialize o dispositivo.

  • Define os pacotes permitidos do LockTask.

  • Instale pacotes pelo PackageInstaller.

  • Bloquear a desinstalação de pacotes.

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

  • Desative o bloqueio de tela.

  • 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 app, que os usuários ainda precisam conceder por usuário e por app.

  • Defina 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 diferentes vídeos 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>
    

Esse vídeo é salvo no máximo uma vez em 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 vai acontecer novamente até a 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 tablet, na orientação natural do dispositivo e podem ter qualquer duração superior a cinco segundos. O conteúdo não pode resultar em burn-in, já que será reproduzido constantemente quando estiver na tela.

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

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. Como alternativa, os funcionários de varejo 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 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, essa tela de início personalizada reproduz o vídeo de demonstração em repetição até que o usuário toque na tela para iniciar uma sessão de demonstração do usuário. Nesse momento, o iniciador personalizado inicia o iniciador do sistema e sai. Os OEMs podem alterar a tela de início personalizada para iniciar outro serviço ou atividade na saída.

Para manter a integridade do modo de varejo, a proteção de tela está desativada e certas ações das Configurações rápidas que podem afetar negativamente o modo de varejo também são proibidas, incluindo as seguintes.

  • Botão do modo avião.
  • Remova ou modifique os 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 hotspots.
  • 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 se não houver resposta por cinco segundos, o modo de varejo vai remover o usuário de demonstração atual, mudar para um novo usuário de demonstração e reproduzir 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 as seguintes:

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