Implémentation de types d'utilisateurs personnalisés

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

Cette page détaille les directives de mise en œuvre nécessaires pour personnaliser les types d'utilisateurs.

Personnalisation

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

Tout attribut, tel que default-restrictions , spécifié dans le fichier config_user_types.xml , remplace la valeur par défaut AOSP. Tout attribut qui n'est pas spécifié obéit à la valeur 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 préexistants de ce type d'utilisateur. Cependant, comme default-restrictions ne sont appliquées 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, la spécification du nombre maximum d'utilisateurs ne s'applique que lors de la création de nouveaux 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 d'apporter les modifications de plate-forme nécessaires pour que son profil personnalisé soit pris en charge dans Android, car AOSP ne prend en charge que les types d'utilisateurs AOSP prédéfinis.
  • Les utilisateurs complets ne peuvent pas être définis et seul leur attribut default-restrictions peut être personnalisé.
  • L'utilisateur du système ne peut pas être personnalisé à l'aide de ce mécanisme. Dans ce cas, default-restrictions peuvent être définies à l'aide de com.android.internal.R.array.config_defaultFirstUserRestrictions . Voir config.xml pour plus d'informations.

Modifier les types d'utilisateurs existants

Les types d'utilisateurs existants peuvent être personnalisés en remplaçant leurs attributs, comme indiqué 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 prises en charge.

  • Utilisateur 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" .
  • Profil utilisateur android.os.usertype.profile.MANAGED :

    • Deux profils sont autorisés pour chaque utilisateur parent en définissant max-allowed-per-parent='2' .
    • Les attributs du badge sont définis sur les valeurs souhaitées à l'aide icon-badge , badge-plain , badge-no-background , badge-labels , 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" .

Reportez-vous à UserTypeFactory.java et UserTypeDetails.java pour connaître la signification et les valeurs par défaut de ces propriétés.

Définir des types de profils personnalisés

L’exemple de code suivant montre comment de nouveaux types de profils personnalisés sont définis.

<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 du type android.os.usertype.profile.MANAGED vers le nouveau type com.example.profilename lors de la mise à niveau de l'appareil à partir d'une version user-type <= 1 via OTA.