Como implementar tipos de usuários personalizados

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

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

Personalização

Para personalizar os tipos de usuário do AOSP e definir novos tipos de perfil, o OEM precisa 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 do AOSP. Qualquer atributo que não seja especificado segue o padrão do AOSP. Mudar a maioria dos atributos, como os atributos do selo de um tipo de perfil, afeta os usuários atuais desse tipo. No entanto, como as default-restrictions só são aplicadas no momento em que um usuário é criado, a modificação desse atributo específico, caso o arquivo config_user_types.xml mude por OTA, não afeta os usuários existentes. Da mesma forma, especificar o número máximo de usuários só se aplica ao criar novos usuários. Os usuários atuais 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 modificações na plataforma conforme necessário para que o perfil personalizado seja compatível com o Android, já que o AOSP só oferece suporte aos tipos de usuário predefinidos do AOSP.
  • Não é possível definir usuários completos, e apenas o atributo default-restrictions pode ser personalizado.
  • O usuário do sistema não pode ser personalizado usando este mecanismo. Nesse caso, default-restrictions pode ser definido usando com.android.internal.R.array.config_defaultFirstUserRestrictions. Consulte config.xml para mais informações.

Modificar tipos de usuários

Os tipos de usuários atuais podem ser personalizados substituindo os atributos deles, 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 do AOSP são personalizados modificando as propriedades com suporte.

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

    • A restrição padrão de no_sms é definida como verdadeira 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 selo 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 verdadeiras especificando default-restrictions no_sms="true" no_outgoing_calls="true".

Consulte UserTypeFactory.java e UserTypeDetails.java para saber 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 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>

Nesta amostra 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 fazer upgrade do dispositivo de uma versão user-type do <= 1 pelo OTA.