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ários AOSP predefinidos e definir novos tipos de perfis. Consulte a seção sobre tipos de usuários para obter mais informações.

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

Costumização

Para customizar os tipos de usuário AOSP e definir novos tipos de perfil, o OEM deve sobrepor config_user_types.xml com as customizaçõ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 que não seja especificado obedece ao padrão AOSP. A alteração da maioria dos atributos, como atributos de selo de um tipo de perfil, afeta 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 terá efeito em usuários pré-existentes. Da mesma forma, a especificação do número máximo de usuários só se aplica ao criar novos usuários; os usuários existentes não são removidos.

As restrições atuais de personalização 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 na plataforma conforme necessário para que seu perfil personalizado seja compatível com Android, uma vez que o AOSP oferece suporte apenas aos tipos de usuário AOSP predefinidos.
  • Usuários completos não podem ser definidos e apenas seus atributos default-restrictions podem ser customizados.
  • 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ários 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 suportadas.

  • 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" .
  • Perfil do usuário 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 com 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 perfil personalizados

O exemplo de código a seguir mostra como novos tipos de perfis 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 maneira:

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