Розничный демонстрационный режим

В Android 7.1.1 была добавлена ​​поддержка режима демонстрации для розничной торговли на системном уровне, позволяющая покупателям осмотреть устройства в действии в розничных магазинах. Для настройки устройства под демонстрацию в розничной торговле используется приложение владельца устройства, обеспечивающее ограничение использования устройства только определенными приложениями демонстрационного режима. Конечные пользователи не должны иметь возможности добавлять личную учетную запись на демонстрационном устройстве. В Android 8.1 эта поддержка переработана и позволяет создавать пользователей для демонстрации через API createAndManageUser в DevicePolicyManager. Это обеспечивает гораздо большую гибкость настройки стандартного режима розничной торговли со стороны производителя оборудования в плане управления пользователями и политиками устройства.

Хотя API DevicePolicyManager можно использовать в версиях Android до 8.1, пользователей демонстрационного типа ( DevicePolicyManager.MAKE_USER_DEMO ) нельзя создать с помощью API createAndManageUser в версиях 8.0 и более ранних.

Реализация в Android 8.1 и более поздних версиях.

В этом разделе рассматриваются улучшения платформы и описывается демонстрационное приложение для розничной торговли на Android 8.1 и более поздних версиях.

Изменения платформы

Установить режим демонстрации устройства (DEVICE_DEMO_MODE)

Для устройств, использующих демонстрационный режим розничной торговли на основе владельца устройства, перед инициализацией необходимо установить Settings.Global.DEVICE_DEMO_MODE в значение 1, чтобы указать, что устройство инициализируется в демонстрационном режиме розничной торговли. SystemServer использует этот флаг для управления такими аспектами режима розничной торговли, как профиль энергопотребления и SystemUI.

Включить RetailDemoModeService

В устройствах, использующих демонстрационный режим розничной торговли, мастер настройки устанавливает глобальный параметр Global.DEVICE_DEMO_MODE в true , указывая на то, что устройство перешло в режим розничной торговли. При обнаружении этого параметра служба RetailDemoModeService создает демонстрационного пользователя и переключается на него при запуске пользователя 0, включает пользовательский лаунчер, указанный в ресурсе оверлея, и отключает SUW. Сервер системы и SystemUI также используют этот флаг для управления аспектами режима розничной торговли.

Настройте собственный лаунчер или видеоплеер.

Производители устройств могут указать собственный лаунчер, переопределив ресурс фреймворка config_demoModeLauncherComponent указанный в файле config.xml следующим образом.

<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>

Приложение DemoPlayer для розничной торговли, расположенное по адресу /packages/apps/RetailDemo, является стандартным пользовательским лаунчером в проекте Android Open Source Project (AOSP). Приложение ищет видеофайл в разделе устройства, например, /data/preloads/demo/retail_demo.mp4, и воспроизводит его в цикле. Когда пользователь касается экрана, пользовательский лаунчер отключает свой компонент активности, что приводит к запуску стандартного системного лаунчера.

Для того чтобы пользовательский компонент средства запуска не отображался в сценариях, отличных от демонстрационных, он должен быть помечен как отключенный по умолчанию. В демонстрационном сценарии системный сервер включает указанный компонент config_demoModeLauncherComponent при запуске новой демонстрационной сессии.

Мастер установки также проверяет наличие упомянутого ранее видео, чтобы обеспечить возможность перехода в розничный режим. SUW можно модифицировать для проверки наличия поддержки розничного режима по другим признакам, специфичным для OEM-производителя, если видео не является частью демонстрационной версии. Если существуют системные разделы A/B, то системный раздел B должен содержать демонстрационное видео в каталоге /preloads/demo. Оно копируется в /data/preloads/demo при первой загрузке.

Настройте предустановленные приложения для демонстрационного режима розничной торговли.

Предустановленные приложения могут настраивать свой пользовательский интерфейс для демонстрационного режима розничной торговли, вызывая API-функцию UserManager.isDemoUser() чтобы проверить, запущено ли приложение в демонстрационной среде.

В демонстрационном пользовательском профиле установлены определенные ограничения, аналогичные политикам управляемых устройств или профилей, которые запрещают приложениям и пользователям выполнять определенные операции. Одно из таких ограничений — DISALLOW_MODIFY_ACCOUNTS . При наличии этого ограничения AccountManager и Settings не позволяют добавлять учетные записи. Некоторые приложения Google реагируют на это ограничение и отображают сообщение об ошибке, а другие не запрашивают учетную запись (например, YouTube и Photos). Мы рекомендуем производителям приложений также проверять наличие параметра DISALLOW_MODIFY_ACCOUNTS и обрабатывать ситуацию соответствующим образом.

Обновления системы

По умолчанию, при включении розничного режима, политика устройства настроена на автоматическое обновление по беспроводной сети (OTA). Розничные устройства загрузят, перезагрузятся и установят обновление (с учетом пороговых значений заряда батареи) без участия пользователя.

Демонстрационное приложение для розничной торговли

Для реализации демонстрационного режима розничной торговли на основе владельца устройства необходимо установить приложение Device Policy Controller в качестве владельца устройства. В AOSP содержится эталонная реализация приложения RetailDemo в /packages/apps/RetailDemo .

Приложения для владельцев устройств не требуют повышенных привилегий или предварительной установки в образ системы и могут быть загружены в процессе настройки или предоставления доступа. В основном они реализованы как традиционные приложения, со следующими отличиями:

  • Все приложения, принадлежащие владельцам устройств, должны расширять компонент DeviceAdminReceiver , который служит токеном авторизации для всех API DevicePolicyManager . Компонент должен содержать разрешение android.permission.BIND_DEVICE_ADMIN , включать запрошенные специальные политики в качестве метаданных и фильтровать интенты android.app.action.PROFILE_PROVISIONING_COMPLETE и android.app.action.DEVICE_ADMIN_ENABLED .

  • Флаг DevicePolicyManager#MAKE_USER_DEMO , устанавливаемый для создания пользователей специального демонстрационного типа, представляет собой скрытый API. Значение этого флага — константа 0x4.

  • Право собственности на устройство должно быть назначено только через пользователя, ответственного за управление устройством, или через приложение ManagedProvisioning .

API-интерфейсы класса DevicePolicyManager позволяют владельцу устройства (DO) и владельцу профиля (PO) применять различные политики устройства. Ниже перечислены некоторые функции DevicePolicyManager , применимые в демонстрационном режиме для розничной торговли.

  • Создавайте и управляйте пользователями.

  • Перезагрузите устройство.

  • Установите список разрешенных пакетов для задачи блокировки.

  • Устанавливайте пакеты через PackageInstaller .

  • Заблокировать удаление пакетов.

  • Включите автоматические обновления системы. Устройства автоматически загрузят и применят обновления по воздуху (OTA).

  • Отключите блокировку клавиатуры.

  • Запретите установку паролей или отпечатков пальцев.

  • Укажите разрешенный набор параметров Settings.Global , Settings.Secure и Settings.System .

  • Установите политику разрешений на PERMISSION_POLICY_AUTO_GRANT , что автоматически предоставит все разрешения во время выполнения. Разрешения также могут быть предоставлены более узко: одно разрешение для одного приложения. Это не относится к разрешениям на управление приложением, которые пользователи по-прежнему должны предоставлять для каждого пользователя и каждого приложения отдельно.

  • Установите ограничения для пользователей, относящиеся к розничному режиму, как определено в UserManager следующим образом.

    • DISALLOW_MODIFY_ACCOUNTS
    • DISALLOW_USB_FILE_TRANSFER
    • DISALLOW_DEBUGGING_FEATURES
    • DISALLOW_CONFIG_WIFI
    • DISALLOW_CONFIG_BLUETOOTH
    • DISALLOW_INSTALL_UNKNOWN_SOURCES
    • DISALLOW_CONFIG_MOBILE_NETWORKS

Обновите демонстрационное видео через веб-браузер.

Приложение RetailDemo, расположенное в /packages/apps/RetailDemo, может обновлять демонстрационное видео при наличии сетевого подключения. URL-адрес для загрузки видео можно настроить, переопределив следующее строковое значение в приложении RetailDemo.

<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>

Если для разных регионов необходимо использовать разные видеофайлы, то можно настроить разные URL-адреса для скачивания, используя строковые ресурсы, специфичные для каждой локали, в файле res/values-*/strings.xml . Например, если для США и Великобритании необходимо использовать разные видеофайлы, то соответствующие URL-адреса для скачивания можно разместить в файлах res/values-en-rUS/strings.xml и res/values-en-rGB/strings.xml соответственно, как показано ниже.

  • В файле res/values-en-rUS/strings.xml:

    <string name="retail_demo_video_download_url">download URL for US video goes here</string>
    
  • В файле res/values-en-rGB/strings.xml:

    <string name="retail_demo_video_download_url">download URL for UK video goes here</string>
    

Это видео загружается не более одного раза при каждой перезагрузке устройства. Во время воспроизведения видео на устройстве приложение RetailDemo в фоновом режиме проверяет, указан ли URL-адрес для загрузки и является ли видео по этому URL-адресу более новым, чем воспроизводимое.

В этом случае приложение RetailDemo загружает и начинает воспроизведение видео. После загрузки видео используется для воспроизведения во всех последующих демонстрационных сессиях. Повторные проверки не выполняются до следующей перезагрузки.

Рекомендации по созданию демонстрационного видеоролика

Демонстрационные видеоролики должны быть в вертикальном положении или, если это планшет, в естественной ориентации устройства, и могут быть любой продолжительности более пяти секунд. Контент не должен вызывать выгорание пикселей, поскольку он будет воспроизводиться постоянно во время отображения.

Дополнительную информацию см. в определениях пользователей, профилей и учетных записей для разработчиков Android , документации по API диспетчера политик устройств и примере приложения «Владелец устройства» .

Проверка

CTS не охватывает демонстрационный режим для розничной торговли, поскольку это дополнительная функция. Тестирование демонстрационного приложения должно проводиться вручную или с помощью модульных тестов.

Демонстрационная сессия

Настройка демонстрационной сессии

Демонстрационные устройства, продаваемые в розницу, могут загружаться в демонстрационный режим, если они настроены для этого на заводе. В качестве альтернативы, сотрудники розничных магазинов могут включить демонстрационный режим непосредственно с помощью мастера настройки.

Retail demo mode

Рисунок 2. Режим демонстрации в розничной торговле.

Показать демонстрационную сессию

Когда устройство переходит в розничный режим, оно переключается на нового демонстрационного пользователя и автоматически запускает пользовательскую программу запуска, указанную в ресурсе наложения, как описано в разделе «Реализация» . По умолчанию эта пользовательская программа запуска воспроизводит демонстрационное видео в режиме повтора до тех пор, пока пользователь не коснется экрана, чтобы начать сеанс демонстрационного пользователя. В этот момент пользовательская программа запускает системную программу запуска, а затем завершает работу. Производители оборудования могут изменить пользовательскую программу запуска, чтобы при выходе дополнительно запускалась другая служба или действие.

Для обеспечения целостности розничного режима блокировка клавиатуры отключена, а также запрещены некоторые действия в быстрых настройках, которые могут негативно повлиять на розничный режим, включая следующие.

  • Переключение режима полета.
  • Удаление или изменение точек доступа Wi-Fi (Настройки).
  • Смена оператора связи (Настройки).
  • Настройка точки доступа (Настройки).
  • Переключение пользователей.

Кроме того, блокируется доступ к некоторым глобальным настройкам, которые могут влиять на розничный режим, путем отключения следующих параметров:

  • Настройки Wi-Fi.
  • Параметры настройки сотовой сети, в частности, точек доступа.
  • Настройка Bluetooth.
  • Функции «Резервное копирование и сброс», «Дата и время» и «Мобильные сети» (они вообще не отображаются).

Если пользователь бездействует в течение некоторого времени (по умолчанию 90 секунд), в режиме розничной торговли отображается системное диалоговое окно с предложением пользователю либо выйти из сессии, либо продолжить. Если пользователь выбирает выход или если в течение пяти секунд нет ответа, режим розничной торговли удаляет текущего демонстрационного пользователя, переключается на нового демонстрационного пользователя и снова воспроизводит исходное видео. Если экран выключается с помощью кнопки питания, он автоматически включается через несколько секунд.

После выхода из демонстрационной сессии устройства отключают звук и сбрасывают некоторые глобальные настройки, в том числе следующие:

  • Яркость
  • Авторотация
  • Фонарик
  • Язык
  • Доступность

Выйти из демонстрационного режима розничной торговли

Для выхода из розничного режима сотрудникам розничной сети необходимо убедиться, что демонстрационное устройство не зарегистрировано в системе управления устройствами, и выполнить сброс устройства до заводских настроек через загрузчик.