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:
Todos os apps proprietários do dispositivo precisam estender o componente DeviceAdminReceiver, que serve como 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 constante de 0x4.
A propriedade do dispositivo só pode ser atribuída pelo titular da função de gerenciamento de dispositivos 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 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.
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.