カスタム ユーザータイプの実装

Android 11 では、明確に定義されたユーザータイプという概念が導入されました。これらは、Android マルチユーザー機能で許可されるあらゆるタイプのユーザーを表します。この機能を使用して、OEM は事前定義された AOSP ユーザータイプをカスタマイズし、新しいプロファイル タイプを定義できます。詳しくは、ユーザータイプに関するセクションをご覧ください。

このページでは、ユーザータイプのカスタマイズに必要な実装ガイドラインについて詳しく説明します。

カスタマイズ

OEM が AOSP ユーザータイプをカスタマイズして新しいプロファイル タイプを定義するには、目的とするカスタマイズで config_user_types.xml をオーバーレイする必要があります。config_user_types.xml ファイルには、リファレンス実装と、設定可能な属性の包括的なリストが含まれています。

config_user_types.xml ファイルで指定されるすべての属性(default-restrictions など)は、AOSP のデフォルトを上書きします。指定されないすべての属性は AOSP のデフォルトに従います。ほとんどの属性(プロファイル タイプのバッジ属性など)の変更は、そのユーザータイプの既存のユーザーに影響します。ただし、default-restrictions はユーザー作成時にのみ適用されるため、OTA で config_user_types.xml ファイルが変更された場合、この属性を変更しても既存のユーザーには影響しません。同様に、最大ユーザー数の指定は新規ユーザーの作成時にのみ適用され、既存のユーザーが削除されることはありません。

ユーザータイプごとのカスタマイズに関する現在の制限は次のとおりです。

  • プロファイル全体をカスタマイズおよび定義できます。この場合、Android でカスタム プロファイルをサポートするために必要なプラットフォームの変更は、OEM が行います。AOSP は、事前定義された AOSP ユーザータイプのみをサポートします。
  • フルユーザーは定義できません。カスタマイズできるのは default-restrictions 属性のみです。
  • このメカニズムを使用してシステム ユーザーをカスタマイズすることはできません。この場合は、com.android.internal.R.array.config_defaultFirstUserRestrictions を使用して default-restrictions を設定できます。詳しくは、config.xml をご覧ください。

既存のユーザータイプを変更する

次のコードサンプルのとおり、既存のユーザータイプをカスタマイズするには、属性をオーバーライドします。

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

このコードサンプルでは、サポートされているプロパティを変更することにより、以下の AOSP ユーザータイプをカスタマイズしています。

  • フルユーザー android.os.usertype.full.SECONDARY:

    • no_sms のデフォルトの制限は、default-restrictions no_sms="true" を指定すると true に設定されます。
  • プロファイル ユーザー android.os.usertype.profile.MANAGED:

    • max-allowed-per-parent='2' を設定すると、親ユーザーごとに 2 つのプロファイルが許可されます。
    • バッジ属性は、icon-badgebadge-plainbadge-no-backgroundbadge-labelsbadge-colors を使用して選択した値に設定します。
    • default-restrictions no_sms="true" no_outgoing_calls="true" を指定すると、no_smsno_outgoing_calls のデフォルトの制限は true に設定されます。

これらのプロパティの意味とデフォルト値については、UserTypeFactory.javaUserTypeDetails.java をご覧ください。

カスタム プロファイル タイプを定義する

次のコードサンプルは、新しいカスタム プロファイル タイプを定義する方法を示しています。

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

このコードサンプルでは、com.example.profilename プロファイル タイプは次のように定義されています。

  • max-allowed-per-parents2 に設定され、親ユーザーごとに 2 つのプロファイルが許可されています。

  • change-user-type: OTA でデバイスを user-type バージョン <= 1 からアップグレードする際に、タイプ android.os.usertype.profile.MANAGED のすべての既存の管理対象プロファイルを新しい com.example.profilename タイプに変換します。