Реализация пользовательских типов пользователей

В Android 11 представлена ​​концепция четко определенных типов пользователей, представляющих все различные типы пользователей, разрешенные многопользовательской функцией Android. С помощью этой функции OEM-производители могут настраивать предопределенные типы пользователей AOSP и определять новые типы профилей. Дополнительную информацию см. в разделе о типах пользователей .

На этой странице подробно описаны рекомендации по реализации, необходимые для настройки типов пользователей.

Настройка

Чтобы настроить типы пользователей AOSP и определить новые типы профилей, OEM-производитель должен добавить в файл config_user_types.xml нужные настройки. Файл config_user_types.xml содержит эталонную реализацию и полный список настраиваемых атрибутов.

Любой атрибут, например default-restrictions , указанный в файле config_user_types.xml , перезаписывает значение по умолчанию AOSP. Любой атрибут, который не указан, подчиняется AOSP по умолчанию. Изменение большинства атрибутов, таких как атрибуты значка типа профиля, влияет на уже существующих пользователей этого типа. Однако, поскольку default-restrictions применяются только во время создания пользователя, изменение этого конкретного атрибута в случае изменения файла config_user_types.xml с помощью OTA не влияет на уже существующих пользователей. Точно так же указание максимального количества пользователей применяется только при создании новых пользователей; существующие пользователи не удаляются.

Текущие ограничения настройки для каждого типа пользователя следующие:

  • Профили могут быть полностью настроены и определены. В этом случае OEM-производитель несет ответственность за внесение изменений в платформу, необходимые для поддержки их пользовательского профиля в Android, поскольку AOSP поддерживает только предопределенные типы пользователей AOSP.
  • Полноправных пользователей нельзя определить, и можно настроить только их атрибут default-restrictions .
  • Пользователь системы не может быть настроен с помощью этого механизма. В этом случае default-restrictions можно установить с помощью com.android.internal.R.array.config_defaultFirstUserRestrictions . См. config.xml для получения дополнительной информации.

Изменить существующие типы пользователей

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

<user-types version="0">
    <full-type name="android.os.usertype.full.SECONDARY" >
        <default-restrictions no_sms="true" />
    </full-type>

    <profile-type
        name='android.os.usertype.profile.MANAGED'
        max-allowed-per-parent='2'
        icon-badge='@android:drawable/ic_corp_icon_badge_case'
        badge-plain='@android:drawable/ic_corp_badge_case'
        badge-no-background='@android:drawable/ic_corp_badge_no_background' >
        <badge-labels>
            <item res='@android:string/managed_profile_label_badge' />
            <item res='@android:string/managed_profile_label_badge_2' />
        </badge-labels>
        <badge-colors>
            <item res='@android:color/profile_badge_1' />
            <item res='@android:color/profile_badge_2' />
        </badge-colors>
        <default-restrictions no_sms="true" no_outgoing_calls="true" />
    </profile-type>
</user-types>

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

  • Полный пользователь android.os.usertype.full.SECONDARY :

    • Для ограничения no_sms по умолчанию установлено значение true, указав default-restrictions no_sms="true" .
  • Пользователь профиля android.os.usertype.profile.MANAGED :

    • Для каждого родительского пользователя разрешено два профиля, если установить max-allowed-per-parent='2' .
    • Атрибуты значка устанавливаются в желаемые значения с помощью icon-badge , badge-plain , badge-no-background , badge-labels , badge-colors .
    • Ограничения по умолчанию для no_sms и no_outgoing_calls устанавливаются равными true, если указать ограничения по default-restrictions no_sms="true" no_outgoing_calls="true" .

Обратитесь к UserTypeFactory.java и UserTypeDetails.java , чтобы узнать значение и значения по умолчанию этих свойств.

Определение типов настраиваемых профилей

В следующем примере кода показано, как определяются новые настраиваемые типы профилей.

<user-types version="1">
    <profile-type
        name="com.example.profilename"
        max-allowed-per-parent="2" />

    <change-user-type
        from="android.os.usertype.profile.MANAGED"
        to="com.example.profilename"
        whenVersionLeq="1" />
</user-types>

В этом примере кода тип профиля com.example.profilename определяется следующим образом:

  • max-allowed-per-parents устанавливается равным 2 для двух профилей на одного родительского пользователя.

  • change-user-type : преобразует все существующие управляемые профили типа android.os.usertype.profile.MANAGED в новый тип com.example.profilename при обновлении устройства с user-type версии <= 1 через OTA.