O Android 7.1.1 introduziu suporte em nível de 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 em modo de demonstração. Os usuários finais não devem poder 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 de 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.
Habilitar 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 inicializador personalizado especificado em um recurso de sobreposição e desabilita o SUW. System Server e SystemUI também usam esse sinalizador para gerenciar aspectos do modo de varejo.
Definir iniciador personalizado ou reprodutor de vídeo
Os fabricantes de dispositivos podem especificar um inicializador personalizado substituindo o recurso de estrutura config_demoModeLauncherComponent
especificado no arquivo config.xml conforme a seguir.
<!-- 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 do 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 padrão do sistema seja inicializado.
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 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 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 A/B do sistema, a partição do sistema B deverá 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 modo de demonstração de varejo
Os 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 foi 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 esta restrição, o AccountManager e as Configurações não permitem a adição de contas. Alguns aplicativos do Google reagem a essa restrição e mostram uma mensagem de erro, e 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 adequadamente.
Atualizações do sistema
Por padrão, quando o modo de varejo está ativado, a política do dispositivo é definida para atualização over-the-air (OTA) automaticamente. 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 exige que um aplicativo Device Policy Controller seja definido como proprietário do dispositivo. O AOSP contém uma implementação de referência do aplicativo RetailDemo 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 conter 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
.O sinalizador DevicePolicyManager#MAKE_USER_DEMO , que é definido para criar usuários especiais do tipo demo, é uma API oculta. Este sinalizador tem um valor constante 0x4.
A propriedade do dispositivo deve ser atribuída somente por meio do titular da função de gerenciamento de dispositivos ou do aplicativo ManagedProvisioning .
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. Algumas das funções do DevicePolicyManager aplicáveis ao modo de demonstração de varejo estão listadas a seguir.
Crie e gerencie usuários.
Reinicie o dispositivo.
Defina os pacotes permitidos pelo LockTask.
Instale pacotes através do PackageInstaller .
Impedir que pacotes sejam desinstalados.
Habilite atualizações automáticas do sistema. Os dispositivos baixarão e aplicarão automaticamente atualizações OTA.
Desative a proteção do teclado.
Evite definir senhas ou impressões digitais.
Defina um conjunto permitido de configuraçõ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 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 restrições de usuário relevantes para o modo de varejo conforme definido no UserManager conforme a seguir.
-
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 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. O URL para baixar o vídeo pode ser configurado 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, diferentes URLs de download poderão ser configurados usando recursos de string específicos de 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, mostrado 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 a 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 foi fornecido e se o vídeo no URL é mais recente do que aquele que está sendo reproduzido.
Nesse caso, o aplicativo RetailDemo baixa e começa a reproduzir o vídeo. Depois que o vídeo for baixado, ele será usado para reprodução em todas as sessões de demonstração daqui para frente. Nenhuma das verificações acontecerá novamente até a próxima reinicialização.
Diretrizes para vídeos de demonstração
Os vídeos de demonstração devem estar no formato retrato ou, se for tablet, na orientação natural do dispositivo, e podem ter duração superior a 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 do Device Policy Manager e o aplicativo de exemplo do proprietário do dispositivo para obter mais informações.
Validação
O CTS não cobre o modo de demonstração de varejo porque é um recurso opcional. Os testes devem ser realizados manualmente ou com testes unitários 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. Alternativamente, os funcionários do varejo podem ativar o modo 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, este iniciador personalizado reproduz o vídeo de demonstração repetidamente até que o usuário toque na tela para iniciar uma sessão de demonstração do usuário. Nesse momento, o inicializador personalizado inicia o inicializador do sistema e depois sai. Os OEMs podem alterar o iniciador personalizado para lançar adicionalmente outro serviço ou atividade ao sair.
Para manter a integridade do modo de varejo, a proteção do teclado é desativada e determinadas ações das Configurações rápidas que poderiam afetar negativamente o modo de varejo também não são permitidas, incluindo as seguintes.
- Alternar modo avião.
- Removendo ou modificando pontos de acesso Wi-Fi (Configurações).
- Mudando de operadora (Configurações).
- Configurando hotspot (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, principalmente hotspots.
- Configuração Bluetooth.
- Backup e redefinição, data e hora e redes móveis (eles não aparecem).
Se o usuário ficar 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 percorrerá novamente o vídeo original. Se a tela for desligada usando o botão liga/desliga, ela liga 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 para a configuração original a partir do carregador de inicialização.