Implementare tipi di utenti personalizzati

Android 11 ha introdotto il concetto di tipi di utenti ben definiti, che rappresentano tutti i diversi tipi di utenti consentiti dalla funzionalità multiutente di Android. Con questa funzionalità, gli OEM possono personalizzare i tipi di utenti AOSP predefiniti e definire nuovi tipi di profili. Per ulteriori informazioni, consulta la sezione relativa ai tipi di utenti.

Questa pagina illustra le linee guida di implementazione necessarie per personalizzare i tipi di utenti.

Personalizzazione

Per personalizzare i tipi di utenti AOSP e definire nuovi tipi di profili, l'OEM deve sovrapporre config_user_types.xml con le personalizzazioni preferite. Il file config_user_types.xml contiene un'implementazione di riferimento e un elenco completo di attributi configurabili.

Qualsiasi attributo, ad esempio default-restrictions, specificato nel config_user_types.xml file, sovrascrive il valore predefinito di AOSP. Tutti gli attributi non specificati rispettano il valore predefinito di AOSP. La modifica della maggior parte degli attributi, ad esempio gli attributi dei badge di un tipo di profilo, influisce sugli utenti preesistenti di quel tipo di utente. Tuttavia, poiché i default-restrictions vengono applicati solo al momento della creazione di un utente, modificando questo particolare attributo nel caso in cui il file config_user_types.xml venga modificato da un'agenzia di viaggi online, non ha alcun effetto sugli utenti preesistenti. Analogamente, la specifica del numero massimo di utenti si applica solo alla creazione di nuovi utenti; gli utenti esistenti non vengono rimossi.

Le attuali limitazioni di personalizzazione per ciascun tipo di utente sono le seguenti:

  • I profili possono essere completamente personalizzati e definiti. In questo caso, l'OEM è responsabile di apportare le modifiche alla piattaforma necessarie per supportare il proprio profilo personalizzato in Android, poiché AOSP supporta solo i tipi di utenti AOSP predefiniti.
  • Non è possibile definire utenti con accesso completo e solo il loro attributo default-restrictions può essere personalizzato.
  • L'utente del sistema non può essere personalizzato con questo meccanismo. In questo caso, default-restrictions può essere impostato utilizzando com.android.internal.R.array.config_defaultFirstUserRestrictions. Per saperne di più, visita la pagina config.xml.

Modificare i tipi di utenti esistenti

I tipi di utenti esistenti possono essere personalizzati sostituendo i relativi attributi come mostrato nel seguente esempio di codice:

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

In questo esempio di codice, i seguenti tipi di utente AOSP vengono personalizzati modificando le proprietà supportate:

  • Utente con accesso completo android.os.usertype.full.SECONDARY:

    • La limitazione predefinita di no_sms viene impostata su true specificando default-restrictions no_sms="true".
  • Utente del profilo android.os.usertype.profile.MANAGED:

    • Per ogni utente principale sono consentiti due profili tramite l'impostazione max-allowed-per-parent='2'.
    • Gli attributi del badge vengono impostati su valori scelti utilizzando icon-badge, badge-plain, badge-no-background, badge-labels, badge-colors.
    • Le limitazioni predefinite di no_sms e no_outgoing_calls vengono impostate su true specificando default-restrictions no_sms="true" no_outgoing_calls="true".

Consulta UserTypeFactory.java e UserTypeDetails.java per il significato e i valori predefiniti di queste proprietà.

Definire tipi di profili personalizzati

Il seguente esempio di codice mostra come vengono definiti i nuovi tipi di profili personalizzati:

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

In questo esempio di codice, il tipo di profilo com.example.profilename è definito come segue:

  • max-allowed-per-parents è impostato su 2 per due profili per utente principale.

  • change-user-type: consente di convertire tutti i profili gestiti esistenti di tipoandroid.os.usertype.profile.MANAGED nel nuovo tipocom.example.profilename durante l'upgrade del dispositivo da una versione user-type di <= 1 tramite OTA.