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

قدّم نظام التشغيل 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 على قيمة 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 من خلال التحديث عبر الهواء