Implementación de tipos personalizados de usuarios

Android 11 introdujo el concepto de tipos de usuarios bien definidos, que representa todos los diferentes tipos de usuarios que permite la función Multiusuario de Android. Con esta función, los OEM pueden personalizar los tipos predefinidos de usuarios de AOSP y establecer nuevos tipos de perfiles. Consulta la sección sobre tipos de usuario para obtener más información.

En esta página, se detallan los lineamientos de implementación necesarios para personalizar los tipos de usuarios.

Personalización

Para personalizar los tipos de usuarios de AOSP y definir nuevos tipos de perfiles, el OEM debe superponer config_user_types.xml con las personalizaciones preferidas. El archivo config_user_types.xml contiene una implementación de referencia y una lista completa de atributos configurables.

Cualquier atributo, como default-restrictions, que se especifique en el archivo config_user_types.xml, reemplazará la configuración predeterminada de AOSP. Cualquier atributo que no se especifique seguirá el valor predeterminado de AOSP. Cambiar la mayoría de los atributos, como los atributos de la insignia de un tipo de perfil, afecta a los usuarios existentes de ese tipo de usuario. Sin embargo, debido a que default-restrictions solo se aplica en el momento en que se crea un usuario, la modificación de este atributo en particular, en caso de que se cambie el archivo config_user_types.xml de forma inalámbrica, no tendrá efecto en los usuarios preexistentes. Del mismo modo, especificar la cantidad máxima de usuarios solo se aplica cuando se crean usuarios nuevos; no se quitan los usuarios existentes.

Las restricciones de personalización actuales para cada tipo de usuario son las siguientes:

  • Los perfiles se pueden personalizar y definir por completo. En este caso, el OEM es responsable de realizar las modificaciones de la plataforma según sea necesario para que su perfil personalizado sea compatible con Android, ya que AOSP solo admite los tipos de usuarios predefinidos de AOSP.
  • No se pueden definir usuarios completos y solo se puede personalizar su atributo default-restrictions.
  • No se puede personalizar el usuario del sistema con este mecanismo. En este caso, default-restrictions se puede configurar con com.android.internal.R.array.config_defaultFirstUserRestrictions. Consulta config.xml para obtener más información.

Modifica los tipos de usuarios existentes

Para personalizar los tipos de usuarios existentes, anula sus atributos como se muestra en la siguiente muestra de código:

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

En esta muestra de código, se modifican las propiedades compatibles para personalizar los siguientes tipos de usuarios del AOSP:

  • Usuario con permisos completos android.os.usertype.full.SECONDARY:

    • La restricción predeterminada de no_sms se establece en verdadero si especificas default-restrictions no_sms="true".
  • Usuario del perfil android.os.usertype.profile.MANAGED:

    • Si configuras max-allowed-per-parent='2', se permiten dos perfiles para cada usuario superior.
    • Los atributos de insignia se establecen en los valores elegidos con icon-badge, badge-plain, badge-no-background, badge-labels y badge-colors.
    • Las restricciones predeterminadas de no_sms y no_outgoing_calls se establecen como verdaderas si especificas default-restrictions no_sms="true" no_outgoing_calls="true".

Consulta UserTypeFactory.java y UserTypeDetails.java para conocer el significado y los valores predeterminados de estas propiedades.

Cómo definir tipos de perfiles personalizados

En la siguiente muestra de código, se muestra cómo se definen los nuevos tipos de perfiles personalizados:

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

En esta muestra de código, el tipo de perfil com.example.profilename se define de la siguiente manera:

  • max-allowed-per-parents se configura como 2 para dos perfiles por usuario superior.

  • change-user-type: Convierte todos los perfiles administrados existentes del tipo android.os.usertype.profile.MANAGED al nuevo tipo com.example.profilename cuando se actualiza el dispositivo de una versión user-type de <= 1 a inalámbrica.