Внедрение пользовательских типов пользователей

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

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

Настройка

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

Любой атрибут, указанный в файле config_user_types.xml , например, default-restrictions , перезаписывает значение 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.