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

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

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

سفارشی‌سازی

برای سفارشی‌سازی انواع کاربر AOSP و تعریف انواع نمایه جدید، سازنده تجهیزات اصلی باید config_user_types.xml را با سفارشی‌سازی‌های ترجیحی رونهاد کند. فایل config_user_types.xml شامل پیاده‌سازی مرجع و فهرست جامعی از مشخصه‌های پیکربندی‌پذیر است.

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

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

  • نمایه‌ها را می‌توان به‌طور کامل سفارشی‌سازی و تعریف کرد. در این مورد، سازنده تجهیزات اصلی مسئول ایجاد تغییرات پلاتفرم موردنیاز برای پشتیبانی از نمایه سفارشی خود در Android است، زیرا 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" روی درست تنظیم شده است.
  • کاربر نمایه 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" روی درست تنظیم شده است.

برای اطلاع از معنا و مقادیر پیش‌فرض این دارایی‌ها، به 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 تبدیل می‌کند