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:
Todos os apps de proprietário do dispositivo precisam estender o componente DeviceAdminReceiver, que serve como o token de autorização para todas as APIs DevicePolicyManager. O componente precisa ter a permissão
android.permission.BIND_DEVICE_ADMIN
, incluir as políticas especiais solicitadas como metadados e filtrar as intentsandroid.app.action.PROFILE_PROVISIONING_COMPLETE
eandroid.app.action.DEVICE_ADMIN_ENABLED
.A flag DevicePolicyManager#MAKE_USER_DEMO, que é definida para criar usuários especiais do tipo demonstração, é uma API oculta. Essa flag tem um valor de constante 0x4.
A propriedade do dispositivo precisa ser atribuída apenas pelo detentor do papel de gerenciamento do dispositivo ou pelo app ManagedProvisioning.
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.
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.