O Android 7.1.1 introduziu suporte no nível do sistema para o modo de demonstração de varejo para que os clientes possam examinar os dispositivos em ação nas lojas de varejo. Os dispositivos são configurados para demonstração de varejo usando um aplicativo do proprietário do dispositivo para garantir que o uso do dispositivo seja restrito apenas a determinados aplicativos no 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 por meio da API DevicePolicyManager createAndManageUser . Isso permite uma personalização muito maior do OEM para o modo de varejo padrão em termos de gerenciamento de usuários e gerenciamento 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 demo ( 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 posterior
Esta seção destaca os aprimoramentos da plataforma e descreve o aplicativo de demonstração de varejo no Android 8.1 e posterior.
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 devem 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. SystemServer usa esse sinalizador para gerenciar aspectos do modo de varejo, como perfil de energia e SystemUI.
Ativar RetailDemoModeService
Em dispositivos que implementam um modo de demonstração de varejo, 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, habilita o iniciador personalizado especificado em um recurso de sobreposição e desabilita o SUW. O System Server e o SystemUI também usam esse sinalizador para gerenciar aspectos do modo de varejo.
Definir iniciador personalizado ou player de vídeo
Os fabricantes de dispositivos podem especificar um inicializador personalizado substituindo o recurso de estrutura 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 aplicativo DemoPlayer de demonstração de varejo localizado em /packages/apps/RetailDemo é o inicializador personalizado padrão no Android Open Source Project (AOSP). O aplicativo procura um vídeo em uma partição de dispositivo como /data/preloads/demo/retail_demo.mp4 e o reproduz em loop. Quando o usuário toca na tela, o inicializador personalizado desativa seu componente de atividade, o que faz com que o inicializador do sistema padrão seja iniciado.
O inicializador personalizado deve ter seu componente personalizado marcado como desabilitado 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 System Server habilita 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 oportunidade para entrar no modo de varejo. O SUW pode ser modificado 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 deve conter o vídeo de demonstração em /preloads/demo. Isso é copiado para /data/preloads/demo na primeira inicialização.
Personalize aplicativos pré-carregados para o modo de demonstração de varejo
Aplicativos pré-carregados podem personalizar sua experiência para o modo de demonstração de varejo chamando a API UserManager.isDemoUser()
para ver se o aplicativo é 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 aplicativos e usuários executem determinadas operações. Uma dessas restrições é DISALLOW_MODIFY_ACCOUNTS
. Com essa restrição, AccountManager e Settings não permitem a adição de contas. Alguns aplicativos do Google reagem a essa restrição e mostram uma mensagem de erro, enquanto outros não solicitam uma conta (como YouTube e Fotos). Recomendamos que os aplicativos OEM também verifiquem se DISALLOW_MODIFY_ACCOUNTS
está definido e tratem 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 automaticamente para atualização pelo ar (OTA). Os dispositivos de varejo baixarão, reinicializarão e instalarão a atualização (respeitando os limites da bateria) sem interação do usuário.
Aplicativo de demonstração de varejo
A implementação do modo de demonstração de varejo com base no proprietário do dispositivo requer que um aplicativo Device Policy Controller seja definido como o proprietário do dispositivo. O AOSP contém uma implementação de aplicativo RetailDemo de referência em /packages/apps/RetailDemo .
Os aplicativos do proprietário do dispositivo não precisam de privilégios elevados ou 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 aplicativos tradicionais, com as seguintes diferenças:
Todos os aplicativos do proprietário do dispositivo devem estender o componente DeviceAdminReceiver , que serve como token de autorização para todas as APIs DevicePolicyManager . O componente deve ter a permissão
android.permission.BIND_DEVICE_ADMIN
, incluir as políticas especiais solicitadas como metadados e filtrar asandroid.app.action.PROFILE_PROVISIONING_COMPLETE
eandroid.app.action.DEVICE_ADMIN_ENABLED
.O sinalizador DevicePolicyManager#MAKE_USER_DEMO , que é definido para criar usuários especiais do tipo demo, é uma API oculta. Este sinalizador tem um valor de constante 0x4.
A propriedade do dispositivo deve ser atribuída apenas por meio do titular da função de gerenciamento do dispositivo ou do aplicativo ManagedProvisioning .
As APIs na classe DevicePolicyManager permitem que o Proprietário do Dispositivo (DO) e o Proprietário do Perfil (PO) imponham várias políticas de dispositivo. Algumas das funções DevicePolicyManager aplicáveis ao modo de demonstração de varejo estão listadas a seguir.
Criar e gerenciar usuários.
Reinicie o dispositivo.
Defina os pacotes permitidos do LockTask.
Instale pacotes por meio do PackageInstaller .
Bloqueie a desinstalação de pacotes.
Ative as atualizações automáticas do sistema. Os dispositivos baixarão e aplicarão automaticamente as atualizações OTA.
Desative o protetor de teclas.
Evite definir 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 tempo de execução. As permissões também podem ser concedidas de forma mais restrita: uma única permissão para um único aplicativo. Isso não se aplica a permissões de operações de aplicativos, que os usuários ainda devem conceder por usuário e por aplicativo.Defina as restrições de usuário relevantes para o modo de varejo conforme definido no 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
-
Atualize o vídeo de demonstração usando a web
O aplicativo RetailDemo em /packages/apps/RetailDemo tem a capacidade de atualizar o vídeo de demonstração se houver conectividade de rede. A URL para baixar o vídeo pode ser configurada substituindo o seguinte valor de string no aplicativo 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, URLs de download diferentes poderão ser configuradas usando recursos de string específicos de localidade em res/values-*/strings.xml . Por exemplo, se vídeos diferentes precisam ser usados 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 a seguir.
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>
Este vídeo é baixado no máximo uma vez para cada reinicialização do dispositivo. Quando o vídeo no dispositivo está sendo reproduzido, o aplicativo RetailDemo verifica em segundo plano se o URL de download é fornecido e se o vídeo no URL é mais recente do que o que está sendo reproduzido.
Nesse caso, o aplicativo RetailDemo baixa e começa a reproduzir o vídeo. Depois que o vídeo é baixado, ele é usado para reprodução em todas as sessões de demonstração daqui para frente. Nenhuma das verificações ocorre novamente até a próxima reinicialização.
Diretrizes de vídeo de demonstração
Os vídeos de demonstração devem estar no layout retrato ou, se for tablet, na orientação natural do dispositivo e podem ter duração maior que cinco segundos. O conteúdo não deve resultar em burn-in, pois 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 aplicativo Sample Device Owner para obter mais informações.
Validação
O CTS não cobre o modo de demonstração de varejo porque é um recurso opcional. O teste deve ser realizado manualmente ou com testes de unidade para o aplicativo de demonstração.
Sessão de demonstração
Configuração da sessão de demonstração
Os dispositivos de demonstração de varejo podem inicializar no modo de demonstração de varejo se configurados para o modo de demonstração de fábrica. Como alternativa, os funcionários do varejo podem habilitar o modo de varejo diretamente no assistente de configuração.
Figura 2. Modo de demonstração de varejo
Exibir 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 o inicializador 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 repetidamente até que o usuário toque na tela para iniciar uma sessão de usuário de demonstração. Nesse momento, o inicializador personalizado inicia o inicializador do sistema e sai. Os OEMs podem alterar o inicializador personalizado para iniciar outro serviço ou atividade na saída.
Para manter a integridade do modo de varejo, a proteção de teclado é desabilitada e certas ações das Configurações rápidas que podem afetar negativamente o modo de varejo também não são permitidas, incluindo o seguinte.
- Alternar modo avião.
- Remover ou modificar pontos de acesso Wi-Fi (Configurações).
- Mudando de operadora (Configurações).
- Configurando o ponto de acesso (Configurações).
- Troca de usuário.
Além disso, o acesso também é bloqueado a algumas configurações globais que podem afetar o modo de varejo desativando o seguinte:
- Configurações de wifi.
- Opções de configuração de rede celular, especialmente hotspots.
- Configuração Bluetooth.
- Backup e Redefinição, Data e Hora e Redes Móveis (eles não aparecem).
Se o usuário estiver ocioso por algum período de tempo (90 segundos por padrão), o modo de varejo 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 removerá o usuário de demonstração atual, mudará para um novo usuário de demonstração e repetirá o vídeo original novamente. Se a tela for desligada usando o botão liga/desliga, ela voltará 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
- Auto rotação
- Lanterna
- Linguagem
- Acessibilidade
Sair do modo de demonstração de varejo
Para sair do modo de varejo, os funcionários do varejo devem garantir que o dispositivo de demonstração não esteja registrado no gerenciamento de dispositivos e redefinir o dispositivo de fábrica a partir do carregador de inicialização.