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

قدّمت الإصدار 11 من نظام التشغيل Android مفهوم أنواع المستخدمين المحدّدة جيدًا، والتي تمثّل جميع الأنواع المختلفة من المستخدمين المسموح بهم من خلال ميزة "المستخدمون المتعدّدون" في 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 من خلال التحديث عبر الأثير. وبالمثل، لا ينطبق تحديد الحد الأقصى لعدد المستخدمين إلا عند إنشاء مستخدمين جدد، ولا تتم إزالة المستخدمين الحاليين.

في ما يلي القيود الحالية على التخصيص لكل نوع من المستخدمين:

  • يمكن تخصيص الملفات الشخصية وتحديدها بالكامل. في هذه الحالة، يكون المصنّع الأصلي للجهاز مسؤولاً عن إجراء تعديلات على النظام الأساسي حسب ما هو مطلوب لتوفير الملف الشخصي المخصّص في Android، لأنّ "مشروع 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 عبر التحديث عبر الهواء.