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

Android 11では、Androidマルチユーザー機能で許可されているさまざまなタイプのユーザーすべてを表す、明確に定義されたユーザータイプの概念が導入されています。この機能により、OEMは事前定義されたAOSPユーザータイプをカスタマイズし、新しいプロファイルタイプを定義できます。詳細については、ユーザータイプのセクションを参照してください。

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

カスタマイズ

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

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

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

  • プロファイルは完全にカスタマイズおよび定義できます。この場合、AOSPは事前定義されたAOSPユーザータイプのみをサポートするため、OEMは、Androidでカスタムプロファイルをサポートするために必要に応じてプラットフォームを変更する責任があります。
  • フルユーザーを定義することはできず、 default-restrictions属性のみをカスタマイズできます。
  • このメカニズムを使用してシステムユーザーをカスタマイズすることはできません。この場合、 default-restrictionscom.android.internal.R.array.config_defaultFirstUserRestrictionsを使用して設定できます。詳細については、 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

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

    • max-allowed-per-parent='2'を設定することにより、親ユーザーごとに2つのプロファイルが許可されます。
    • バッジ属性は、 icon-badgebadge-plainbadge-no-backgroundbadge-labelsbadge-colorsを使用して目的の値に設定されます。
    • no_smsおよびno_outgoing_callsのデフォルトの制限は、 default-restrictions no_sms="true" no_outgoing_calls="true"を指定することで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プロファイルタイプは次のように定義されています。

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

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