Implementazione di tipi di utente 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 utente AOSP predefiniti e definire nuovi tipi di profilo. Per ulteriori informazioni vedere la sezione sui tipi di utente .

Questa pagina descrive in dettaglio le linee guida di implementazione necessarie per personalizzare i tipi di utente.

Personalizzazione

Per personalizzare i tipi di utente AOSP e definire nuovi tipi di profilo, l'OEM deve sovrapporre a config_user_types.xml le personalizzazioni desiderate. Il file config_user_types.xml contiene un'implementazione di riferimento e un elenco completo di attributi configurabili.

Qualsiasi attributo, come default-restrictions , specificato nel file config_user_types.xml , sovrascrive l'impostazione predefinita AOSP. Qualsiasi attributo non specificato obbedisce all'impostazione predefinita AOSP. La modifica della maggior parte degli attributi, come gli attributi del badge di un tipo di profilo, influisce sugli utenti preesistenti di quel tipo di utente. Tuttavia, poiché default-restrictions vengono applicate solo al momento della creazione di un utente, la modifica di questo particolare attributo, nel caso in cui il file config_user_types.xml venga modificato da OTA, non ha alcun effetto sugli utenti preesistenti. Allo stesso modo, specificare il numero massimo di utenti si applica solo quando si creano nuovi utenti; gli utenti esistenti non vengono rimossi.

Le attuali restrizioni 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 affinché il proprio profilo personalizzato sia supportato in Android, poiché AOSP supporta solo i tipi di utente AOSP predefiniti.
  • Non è possibile definire utenti completi e solo il loro attributo default-restrictions può essere personalizzato.
  • L'utente del sistema non può essere personalizzato utilizzando questo meccanismo. In questo caso, default-restrictions possono essere impostate utilizzando com.android.internal.R.array.config_defaultFirstUserRestrictions . Per ulteriori informazioni, vedere config.xml .

Modifica i tipi di utenti esistenti

I tipi di utente esistenti possono essere personalizzati sovrascrivendo i relativi attributi come mostrato nell'esempio di codice seguente.

<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 completo android.os.usertype.full.SECONDARY :

    • La restrizione predefinita di no_sms è impostata su true specificando default-restrictions no_sms="true" .
  • Profilo utente android.os.usertype.profile.MANAGED :

    • Sono consentiti due profili per ciascun utente genitore impostando max-allowed-per-parent='2' .
    • Gli attributi del badge vengono impostati sui valori desiderati utilizzando icon-badge , badge-plain , badge-no-background , badge-labels , badge-colors .
    • Le restrizioni predefinite di no_sms e no_outgoing_calls sono impostate su true specificando default-restrictions no_sms="true" no_outgoing_calls="true" .

Fare riferimento a UserTypeFactory.java e UserTypeDetails.java per il significato e i valori predefiniti di queste proprietà.

Definire i tipi di profilo personalizzato

Il seguente esempio di codice mostra come vengono definiti i nuovi tipi di profilo 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 genitore.

  • change-user-type : converte tutti i profili gestiti esistenti del tipo android.os.usertype.profile.MANAGED nel nuovo tipo com.example.profilename quando si aggiorna il dispositivo da una versione user-type di <= 1 tramite OTA.