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

В 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.