Как реализовать специальные типы пользователей

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

На этой странице приведены инструкции по настройке типов пользователей.

Настройка канала

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

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

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

  • Профили можно полностью настраивать. В этом случае 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: при обновлении устройства с версии user-type до <= 1 с помощью беспроводного обновления все существующие управляемые профили типа android.os.usertype.profile.MANAGED будут преобразованы в новый тип com.example.profilename.