Android 7.1.1 a introduit une compatibilité au niveau du système pour le mode démo en magasin, afin que les clients puissent examiner les appareils en action dans les magasins. Les appareils sont configurés pour la démonstration en magasin à l'aide d'une application propriétaire de l'appareil afin de s'assurer que l'utilisation de l'appareil est limitée à certaines applications en mode démo uniquement. Les utilisateurs finaux ne doivent pas pouvoir ajouter de compte personnel sur un appareil de démonstration en magasin. Android 8.1 révise cette compatibilité pour créer des utilisateurs de démonstration via l'API DevicePolicyManager createAndManageUser. Cela permet une personnalisation beaucoup plus importante par les OEM du mode de vente au détail standard en termes de gestion des utilisateurs et de gestion des règles relatives aux appareils sur l'appareil de démonstration.
Bien que les API
DevicePolicyManager puissent être utilisées sur des versions antérieures à Android 8.1,
les utilisateurs de type démo () ne peuvent pas être créés
avec l'API createAndManageUser
dans les versions 8.0 et antérieures.DevicePolicyManager.MAKE_USER_DEMO
Implémentation dans Android 8.1 et versions ultérieures
Cette section met en évidence les améliorations apportées à la plate-forme et décrit l'application de démonstration en magasin dans Android 8.1 et versions ultérieures.
Évolution des plates-formes
Définir DEVICE_DEMO_MODE
Les appareils qui implémentent un mode démo en magasin basé sur le propriétaire de l'appareil doivent définir
Settings.Global.DEVICE_DEMO_MODE sur 1 avant le
provisionnement pour indiquer que l'appareil est provisionné pour le mode démo en magasin.
SystemServer
utilise cet indicateur pour gérer certains aspects du mode vente au détail, tels que le profil d'alimentation et
SystemUI.
Activer RetailDemoModeService
Sur les appareils qui implémentent un mode démo en magasin, l'assistant de configuration définit un paramètre global
setting
Global.DEVICE_DEMO_MODE sur true pour indiquer que l'appareil est passé en mode vente au détail. Lorsqu'il
voit ce paramètre, RetailDemoModeService crée un utilisateur de démonstration et passe à celui-ci lorsque l'utilisateur 0 est démarré, active
le lanceur personnalisé spécifié dans une ressource de superposition et désactive SUW. System Server et SystemUI utilisent également cet indicateur pour gérer certains aspects du mode vente au détail.
Définir un lanceur ou un lecteur vidéo personnalisé
Les fabricants d'appareils peuvent spécifier un lanceur personnalisé en remplaçant la ressource de framework
config_demoModeLauncherComponent spécifiée dans le fichier config.xml
, comme suit.
<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>
L'application de démonstration DemoPlayer en magasin située dans /packages/apps/RetailDemo est le lanceur personnalisé par défaut dans le projet Android Open Source (AOSP). L'application recherche une vidéo dans une partition d'appareil telle que /data/preloads/demo/retail_demo.mp4 et la lit en boucle. Lorsque l'utilisateur touche l'écran, le lanceur personnalisé désactive son composant d'activité, ce qui entraîne le démarrage du lanceur système par défaut.
Le composant personnalisé du lanceur personnalisé doit être marqué comme désactivé par défaut afin qu'il ne s'affiche pas dans les scénarios non démo. Dans le scénario de démonstration, System Server active le config_demoModeLauncherComponent spécifié au démarrage d'une nouvelle session de démonstration.
L'assistant de configuration recherche également la vidéo mentionnée précédemment pour permettre d'accéder au mode vente au détail. SUW peut être modifié pour rechercher un autre signe spécifique à l'OEM indiquant que le mode vente au détail est compatible si la vidéo ne fait pas partie de la démonstration. S'il existe des partitions A/B du système, la partition B du système doit contenir la vidéo de démonstration dans /preloads/demo. Elle est copiée dans /data/preloads/demo au premier démarrage.
Personnaliser les applications préchargées pour le mode démo en magasin
Les applications préchargées peuvent personnaliser leur expérience pour le mode démo en magasin en appelant
l'UserManager.isDemoUser()
API pour voir si l'application est lancée dans un environnement de démonstration.
Certaines restrictions sont définies dans l'utilisateur de démonstration, semblables aux règles relatives aux appareils ou aux profils gérés qui empêchent les applications et les utilisateurs d'effectuer certaines opérations.
L'une de ces restrictions est DISALLOW_MODIFY_ACCOUNTS. Avec cette restriction, AccountManager
et Settings
n'autorisent pas l'ajout de comptes. Certaines applications Google réagissent à cette restriction et affichent un message d'erreur, tandis que d'autres n'invitent pas à créer un compte (comme YouTube et Photos). Nous vous recommandons également aux applications OEM de vérifier si DISALLOW_MODIFY_ACCOUNTS est défini et de gérer le scénario en conséquence.
Mises à jour du système
Par défaut, lorsque le mode vente au détail est activé, la règle relative aux appareils est définie sur la mise à jour automatique Over The Air (OTA). Les appareils de vente au détail téléchargent, redémarrent et installent la mise à jour (en respectant les seuils de batterie) sans intervention de l'utilisateur.
Application de démonstration en magasin
L'implémentation du mode démonstration en magasin basé sur le propriétaire de l'appareil nécessite qu'une application Device Policy Controller soit définie comme propriétaire de l'appareil. L'AOSP contient une implémentation de l'application RetailDemo de référence dans /packages/apps/RetailDemo.
Les applications propriétaires de l'appareil n'ont pas besoin de privilèges élevés ni de préinstallation sur l'image système. Elles peuvent être téléchargées lors du processus de configuration ou de provisionnement. Elles sont principalement implémentées comme des applications traditionnelles, avec les différences suivantes :
Toutes les applications propriétaires de l'appareil doivent étendre le composant DeviceAdminReceiver, qui sert de jeton d'autorisation pour toutes les API DevicePolicyManager. Le composant doit détenir l'
android.permission.BIND_DEVICE_ADMINautorisation, inclure les règles spéciales demandées en tant que métadonnées et filtrer les intentsandroid.app.action.PROFILE_PROVISIONING_COMPLETEetandroid.app.action.DEVICE_ADMIN_ENABLED.L'indicateur DevicePolicyManager#MAKE_USER_DEMO, qui est défini pour créer des utilisateurs spéciaux de type démo, est une API masquée. Cet indicateur a une valeur constante de 0x4.
La propriété de l'appareil ne doit être attribuée que par le détenteur du rôle de gestion des appareils ou par l'application ManagedProvisioning.
Les API de la classe DevicePolicyManager permettent au propriétaire de l'appareil et au propriétaire du profil d'appliquer diverses règles relatives aux appareils. Voici quelques-unes des fonctions DevicePolicyManager applicables au mode de démonstration en magasin.
Créer et gérer des comptes utilisateur.
Redémarrez l'appareil.
Définir les packages autorisés LockTask.
Installer des packages via PackageInstaller.
Empêcher la désinstallation des packages.
Activer les mises à jour automatiques du système. Les appareils téléchargent et appliquent automatiquement les mises à jour OTA.
Désactiver le keyguard.
Empêcher la définition de mots de passe ou d'empreintes digitales.
Définir un ensemble de paramètres autorisés Settings.Global, Settings.Secure, et Settings.System settings.
Définir la règle d'autorisation sur
PERMISSION_POLICY_AUTO_GRANT, qui accorde automatiquement toutes les autorisations d'exécution. Les autorisations peuvent également être accordées de manière plus limitée : une seule autorisation à une seule application. Cela ne s'applique pas aux autorisations d'opérations d'application, que les utilisateurs doivent toujours accorder par utilisateur et par application.Définir les restrictions utilisateur pertinentes pour le mode vente au détail, comme défini dans UserManager comme suit.
DISALLOW_MODIFY_ACCOUNTSDISALLOW_USB_FILE_TRANSFERDISALLOW_DEBUGGING_FEATURESDISALLOW_CONFIG_WIFIDISALLOW_CONFIG_BLUETOOTHDISALLOW_INSTALL_UNKNOWN_SOURCESDISALLOW_CONFIG_MOBILE_NETWORKS
Mettre à jour la vidéo de démonstration à l'aide du Web
L'application RetailDemo dans /packages/apps/RetailDemo peut mettre à jour la vidéo de démonstration si une connectivité réseau est disponible. L'URL à partir de laquelle télécharger la vidéo peut être configurée en remplaçant la valeur de chaîne suivante dans l'application RetailDemo.
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
Si différentes vidéos doivent être utilisées dans différentes régions, vous pouvez configurer différentes URL de téléchargement à l'aide de ressources de chaîne spécifiques aux paramètres régionaux dans res/values-*/strings.xml. Par exemple, si différentes vidéos doivent être utilisées aux États-Unis et au Royaume-Uni, les URL de téléchargement correspondantes peuvent être placées respectivement dans res/values-en-rUS/strings.xml et res/values-en-rGB/strings.xml, comme indiqué ci-dessous.
Dans res/values-en-rUS/strings.xml :
<string name="retail_demo_video_download_url">download URL for US video goes here</string>Dans res/values-en-rGB/strings.xml :
<string name="retail_demo_video_download_url">download URL for UK video goes here</string>
Cette vidéo est téléchargée au maximum une fois pour chaque redémarrage de l'appareil. Lorsque la vidéo est lue sur l'appareil, l'application RetailDemo vérifie en arrière-plan si l'URL de téléchargement est fournie et si la vidéo à l'URL est plus récente que celle en cours de lecture.
Si c'est le cas, l'application RetailDemo télécharge et commence à lire la vidéo. Une fois la vidéo téléchargée, elle est utilisée pour la lecture dans toutes les sessions de démonstration à venir. Aucune vérification n'a lieu avant le prochain redémarrage.
Consignes pour les vidéos de démonstration
Les vidéos de démonstration doivent être au format portrait ou, si elles sont sur une tablette, dans l'orientation naturelle de l'appareil. Elles peuvent durer plus de cinq secondes. Le contenu ne doit pas entraîner de brûlure, car il sera lu en permanence lorsqu'il sera affiché.
Pour en savoir plus, consultez les définitions des utilisateurs, des profils et des comptes pour les développeurs Android, la documentation de l'API Device Policy Manager et l'exemple d'application propriétaire de l'appareil.
Validation
CTS ne couvre pas le mode de démonstration en magasin, car il s'agit d'une fonctionnalité facultative. Les tests doivent être effectués manuellement ou à l'aide de tests unitaires pour l'application de démonstration.
Session de démonstration
Configuration de la session de démonstration
Les appareils de démonstration en magasin peuvent démarrer en mode démo en magasin s'ils sont configurés pour le mode démo en usine. Les employés du magasin peuvent également activer le mode vente au détail directement depuis l'assistant de configuration.

Figure 2. Mode de démonstration en magasin
Afficher la session de démonstration
Lorsque l'appareil passe en mode vente au détail, il passe à un nouvel utilisateur de démonstration et démarre automatiquement le lanceur personnalisé spécifié dans la ressource de superposition comme décrit dans Implémentation. Par défaut, ce lanceur personnalisé lit la vidéo de démonstration en boucle jusqu'à ce que l'utilisateur touche l'écran pour démarrer une session utilisateur de démonstration. À ce moment-là, le lanceur personnalisé démarre le lanceur système, puis se ferme. Les OEM peuvent modifier le lanceur personnalisé pour lancer un autre service ou une autre activité à la sortie.
Afin de préserver l'intégrité du mode vente au détail, le keyguard est désactivé et certaines actions de la configuration rapide qui pourraient nuire au mode vente au détail sont également interdites, y compris les suivantes.
- Activer/désactiver le mode Avion.
- Supprimer ou modifier des points d'accès Wi-Fi (paramètres).
- Changer d'opérateur (paramètres).
- Configurer un point d'accès (paramètres).
- Changement d'utilisateur.
En outre, l'accès à certains paramètres globaux qui peuvent affecter le mode vente au détail est également bloqué en désactivant les éléments suivants :
- Paramètres Wi-Fi.
- Options de configuration du réseau mobile, en particulier les points d'accès.
- Configuration Bluetooth.
- Sauvegarde et réinitialisation, Date et heure, et Réseaux mobiles (ils ne s'affichent pas du tout).
Si l'utilisateur est inactif pendant un certain temps (90 secondes par défaut), le mode vente au détail affiche une boîte de dialogue système pour l'inviter à quitter la session ou à continuer. Si l'utilisateur choisit de quitter ou s'il n'y a pas de réponse pendant cinq secondes, le mode vente au détail supprime l'utilisateur de démonstration actuel, passe à un nouvel utilisateur de démonstration et relance la vidéo d'origine. Si l'écran est éteint à l'aide du bouton Marche/Arrêt, il se rallume automatiquement après quelques secondes.
Après avoir quitté une session de démonstration, les appareils se mettent en sourdine et réinitialisent certains paramètres globaux, y compris les suivants :
- Luminosité
- Rotation automatique
- Lampe de poche
- Langue
- Accessibilité
Quitter le mode démo en magasin
Pour quitter le mode vente au détail, les employés du magasin doivent s'assurer que l'appareil de démonstration n'est pas enregistré dans la gestion des appareils et rétablir la configuration d'usine de l'appareil à partir du bootloader.