Implémenter des types d'utilisateurs personnalisés

Android 11 a introduit le concept de types d'utilisateurs bien définis, qui représentent tous les différents types d'utilisateurs autorisés par la fonctionnalité multi-utilisateur Android. Grâce à cette fonctionnalité, les OEM peuvent personnaliser les types d'utilisateurs AOSP prédéfinis et définir de nouveaux types de profils. Pour en savoir plus, consultez la section sur les types d'utilisateurs.

Cette page détaille les consignes d'implémentation nécessaires pour personnaliser les types d'utilisateurs.

Personnalisation

Pour personnaliser les types d'utilisateurs AOSP et définir de nouveaux types de profils, l'OEM doit superposer config_user_types.xml avec les personnalisations préférées. Le fichier config_user_types.xml contient une implémentation de référence et une liste complète d'attributs configurables.

Tout attribut, tel que default-restrictions, spécifié dans le fichier config_user_types.xml écrase la valeur par défaut d'AOSP. Tout attribut non spécifié est soumis aux valeurs par défaut de l'AOSP. La modification de la plupart des attributs, tels que les attributs de badge d'un type de profil, affecte les utilisateurs existants de ce type d'utilisateur. Toutefois, comme les default-restrictions ne sont appliqués qu'au moment de la création d'un utilisateur, la modification de cet attribut particulier, dans le cas où le fichier config_user_types.xml est modifié par OTA, n'a aucun effet sur les utilisateurs préexistants. De même, spécifier le nombre maximal d'utilisateurs ne s'applique qu'à la création d'utilisateurs. Les utilisateurs existants ne sont pas supprimés.

Les restrictions de personnalisation actuelles pour chaque type d'utilisateur sont les suivantes:

  • Les profils peuvent être entièrement personnalisés et définis. Dans ce cas, l'OEM est responsable des modifications de la plate-forme requises pour que son profil personnalisé soit compatible avec Android, car AOSP n'est compatible qu'avec les types d'utilisateurs AOSP prédéfinis.
  • Vous ne pouvez pas définir d'utilisateurs complets. Seul leur attribut default-restrictions peut être personnalisé.
  • Vous ne pouvez pas personnaliser l'utilisateur système à l'aide de ce mécanisme. Dans ce cas, default-restrictions peut être défini à l'aide de com.android.internal.R.array.config_defaultFirstUserRestrictions. Pour en savoir plus, consultez config.xml.

Modifier les types d'utilisateurs existants

Vous pouvez personnaliser les types d'utilisateurs existants en remplaçant leurs attributs, comme illustré dans l'exemple de code suivant:

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

Dans cet exemple de code, les types d'utilisateurs AOSP suivants sont personnalisés en modifiant les propriétés compatibles:

  • Utilisateur avec accès complet android.os.usertype.full.SECONDARY:

    • La restriction par défaut de no_sms est définie sur "true" en spécifiant default-restrictions no_sms="true".
  • Utilisateur du profil android.os.usertype.profile.MANAGED:

    • Deux profils sont autorisés pour chaque utilisateur parent en définissant max-allowed-per-parent='2'.
    • Les attributs de badge sont définis sur des valeurs choisies à l'aide de icon-badge, badge-plain, badge-no-background, badge-labels et badge-colors.
    • Les restrictions par défaut de no_sms et no_outgoing_calls sont définies sur "true" en spécifiant default-restrictions no_sms="true" no_outgoing_calls="true".

Pour connaître la signification et les valeurs par défaut de ces propriétés, consultez UserTypeFactory.java et UserTypeDetails.java.

Définir des types de profils personnalisés

L'exemple de code suivant montre comment définir de nouveaux types de profils personnalisés:

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

Dans cet exemple de code, le type de profil com.example.profilename est défini comme suit:

  • max-allowed-per-parents est défini sur 2 pour deux profils par utilisateur parent.

  • change-user-type: convertit tous les profils gérés existants de type android.os.usertype.profile.MANAGED au nouveau type com.example.profilename lors de la mise à niveau de l'appareil à partir d'une version user-type de <= 1 via OTA.