Implementando tipos de usuário personalizados

O Android 11 introduziu o conceito de tipos de usuários bem definidos, representando todos os diferentes tipos de usuários permitidos pelo recurso Android Multiusuário. Com esse recurso, os OEMs podem personalizar tipos de usuário AOSP predefinidos e definir novos tipos de perfil. Consulte a seção sobre tipos de usuário para obter mais informações.

Esta página detalha as diretrizes de implementação necessárias para personalizar os tipos de usuário.

Costumização

Para personalizar os tipos de usuário AOSP e definir novos tipos de perfil, o OEM deve sobrepor config_user_types.xml com as personalizações desejadas. O arquivo config_user_types.xml contém uma implementação de referência e uma lista abrangente de atributos configuráveis.

Qualquer atributo, como default-restrictions , especificado no arquivo config_user_types.xml , substitui o padrão AOSP. Qualquer atributo não especificado obedece ao padrão AOSP. A alteração da maioria dos atributos, como os atributos de crachá de um tipo de perfil, afeta os usuários pré-existentes desse tipo de usuário. No entanto, como default-restrictions são aplicadas apenas no momento em que um usuário é criado, a modificação desse atributo específico, caso o arquivo config_user_types.xml seja alterado pelo OTA, não tem efeito em usuários pré-existentes. Da mesma forma, especificar o número máximo de usuários só se aplica ao criar novos usuários; usuários existentes não são removidos.

As restrições de personalização atuais para cada tipo de usuário são as seguintes:

  • Os perfis podem ser totalmente personalizados e definidos. Nesse caso, o OEM é responsável por fazer as modificações da plataforma conforme necessário para que seu perfil personalizado seja compatível com o Android, pois o AOSP oferece suporte apenas aos tipos de usuário AOSP predefinidos.
  • Usuários completos não podem ser definidos e apenas seu atributo default-restrictions pode ser customizado.
  • O usuário do sistema não pode ser customizado usando este mecanismo. Nesse caso, default-restrictions podem ser definidas usando com.android.internal.R.array.config_defaultFirstUserRestrictions . Consulte config.xml para obter mais informações.

Modificar tipos de usuário existentes

Os tipos de usuário existentes podem ser personalizados substituindo seus atributos conforme mostrado no exemplo de código a seguir.

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

Neste exemplo de código, os seguintes tipos de usuário AOSP são personalizados modificando as propriedades com suporte.

  • Usuário completo android.os.usertype.full.SECONDARY :

    • A restrição padrão de no_sms é definida como true especificando default-restrictions no_sms="true" .
  • Usuário do perfil android.os.usertype.profile.MANAGED :

    • Dois perfis são permitidos para cada usuário pai definindo max-allowed-per-parent='2' .
    • Os atributos do emblema são definidos para os valores desejados usando icon-badge , badge-plain , badge-no-background , badge-labels , badge-colors .
    • As restrições padrão de no_sms e no_outgoing_calls são definidas como true especificando default-restrictions no_sms="true" no_outgoing_calls="true" .

Consulte UserTypeFactory.java e UserTypeDetails.java para obter o significado e os valores padrão dessas propriedades.

Definir tipos de perfis personalizados

O exemplo de código a seguir mostra como os novos tipos de perfil personalizados são definidos.

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

Neste exemplo de código, o tipo de perfil com.example.profilename é definido da seguinte forma:

  • max-allowed-per-parents é definido como 2 para dois perfis por usuário pai.

  • change-user-type : converte todos os perfis gerenciados existentes do tipo android.os.usertype.profile.MANAGED para o novo tipo com.example.profilename ao atualizar o dispositivo de uma versão do user-type <= 1 por meio de OTA.