پیاده سازی انواع کاربر سفارشی

اندروید ۱۱ مفهوم انواع کاربر خوش‌تعریف را معرفی کرده است که نشان‌دهنده انواع مختلف کاربران مجاز توسط ویژگی چندکاربره اندروید است. با این ویژگی، تولیدکنندگان اصلی تجهیزات (OEM) می‌توانند انواع کاربر از پیش تعریف‌شده AOSP را سفارشی‌سازی کرده و انواع پروفایل جدید تعریف کنند. برای اطلاعات بیشتر به بخش انواع کاربر مراجعه کنید.

این صفحه دستورالعمل‌های پیاده‌سازی مورد نیاز برای سفارشی‌سازی انواع کاربران را شرح می‌دهد.

سفارشی‌سازی

برای سفارشی‌سازی انواع کاربر AOSP و تعریف انواع پروفایل جدید، تولیدکننده اصلی (OEM) باید فایل config_user_types.xml را با سفارشی‌سازی‌های ترجیحی خود همپوشانی کند. فایل config_user_types.xml شامل یک پیاده‌سازی مرجع و فهرست جامعی از ویژگی‌های قابل تنظیم است.

هر ویژگی، مانند default-restrictions که در فایل config_user_types.xml مشخص شده باشد، پیش‌فرض AOSP را بازنویسی می‌کند. هر ویژگی که مشخص نشده باشد، از پیش‌فرض AOSP پیروی می‌کند. تغییر اکثر ویژگی‌ها، مانند ویژگی‌های نشان یک نوع پروفایل، بر کاربران از پیش موجود آن نوع کاربر تأثیر می‌گذارد. با این حال، از آنجا که default-restrictions فقط در زمان ایجاد کاربر اعمال می‌شوند، تغییر این ویژگی خاص، در صورتی که فایل config_user_types.xml توسط OTA تغییر کند، هیچ تأثیری بر کاربران از پیش موجود ندارد. به طور مشابه، تعیین حداکثر تعداد کاربران فقط هنگام ایجاد کاربران جدید اعمال می‌شود؛ کاربران موجود حذف نمی‌شوند.

محدودیت‌های سفارشی‌سازی فعلی برای هر نوع کاربر به شرح زیر است:

  • پروفایل‌ها می‌توانند کاملاً سفارشی و تعریف شوند. در این حالت، تولیدکننده اصلی (OEM) مسئول ایجاد تغییرات لازم در پلتفرم برای پشتیبانی از پروفایل سفارشی خود در اندروید است، زیرا AOSP فقط از انواع کاربر AOSP از پیش تعریف شده پشتیبانی می‌کند.
  • کاربران کامل قابل تعریف نیستند و فقط ویژگی default-restrictions آنها قابل تنظیم است.
  • کاربر سیستم را نمی‌توان با استفاده از این مکانیزم سفارشی‌سازی کرد. در این حالت، default-restrictions می‌توان با استفاده از com.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 :

    • محدودیت پیش‌فرض no_sms با مشخص کردن default-restrictions no_sms="true" روی true تنظیم شده است.
  • کاربر پروفایل android.os.usertype.profile.MANAGED :

    • با تنظیم max-allowed-per-parent='2' برای هر کاربر والد دو پروفایل مجاز است.
    • ویژگی‌های نشان با استفاده از icon-badge ، badge-plain ، badge-no-background ، badge-labels و badge-colors روی مقادیر انتخاب شده تنظیم می‌شوند.
    • محدودیت‌های پیش‌فرض no_sms و no_outgoing_calls با مشخص کردن default-restrictions no_sms="true" no_outgoing_calls="true" روی true تنظیم می‌شوند.

برای معنی و مقادیر پیش‌فرض این ویژگی‌ها به UserTypeFactory.java و UserTypeDetails.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-parents برای دو پروفایل به ازای هر کاربر والد، روی 2 تنظیم شده است.

  • change-user-type : هنگام ارتقاء دستگاه از نسخه user-type <= 1 از طریق OTA، تمام پروفایل‌های مدیریت‌شده موجود از نوع android.os.usertype.profile.MANAGED را به نوع جدید com.example.profilename تبدیل می‌کند.