تنفيذ أنواع مستخدمين مخصّصة

طرح نظام التشغيل 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، لأنّ "المشروع المفتوح المصدر لنظام Android" لا يتيح سوى استخدام أنواع المستخدمين المحدّدة مسبقًا في "المشروع المفتوح المصدر لنظام Android".
  • لا يمكن تحديد المستخدمين الكاملين، ولا يمكن تخصيص سوى سمة 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 على قيمة true من خلال تحديد 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: لتحويل جميع الملفات الشخصية المُدارة الحالية من النوع android.os.usertype.profile.MANAGED إلى النوع الجديد com.example.profilename عند ترقية الجهاز من إصدار user-type من <= 1 عبر التحديث عبر الهواء