يضيف نظام التشغيل Android 8.0 إمكانات بحث موسّعة لقائمة الإعدادات. يوضّح هذا المستند كيفية إضافة إعداد والتأكّد من فهرسته بشكلٍ صحيح لأجل بحث "الإعدادات".
إنشاء إعدادات قابلة للفهرسة
إنّ كلّ مقتطف من "الإعدادات" الذي يجب فهرسته ينفِّذ واجهة
Indexable
، ويتطلّب الحقل static:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
بعد إعداد المقتطف للفهرسة، أضِفه إلى
SearchIndexableResources
المتوفّر على الرابط:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
الطرق الاختيارية
تحتوي SearchIndexProvider
هذه الواجهة على أربع طرق
اختيارية.
getXmlResourcesToIndex
- يمكنك تجاهل هذا الإعداد إذا كان محتوى المقتطف من:
preference xml
- لعرض إعداد مفضّل بتنسيق XML كقائمة ليتم فهرستها.
مثال على موارد XML:
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled) { ArrayList<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.display_settings; result.add(sir); return result; }
getRawDataToIndex
- يمكنك تجاهل هذا الإعداد إذا لم يكن محتوى المقتطف من:
preference xml
- تعرِض هذه الدالة قائمة بالبيانات الأوّلية (
SearchIndexableRaw
) التي ستتم فهرستها.
مثال على البيانات الأولية:
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final List<SearchIndexableRaw> result = new ArrayList<>(); final Resources res = context.getResources(); // Add fragment title SearchIndexableRaw data = new SearchIndexableRaw(context); data.title = res.getString(R.string.wifi_settings); data.screenTitle = res.getString(R.string.wifi_settings); data.keywords = res.getString(R.string.keywords_wifi); data.key = DATA_KEY_REFERENCE; result.add(data); return result; }
getNonIndexableKeys
- إذا كان المقتطف عبارة عن
DashboardFragment
، نادرًا ما تحتاج إلى تجاوز ذلك. - تعرِض هذه السمة قائمة بالمفاتيح التي تتوافق مع النتائج التي لا يجب أن تظهر
للمستخدم أو الجهاز أو الإعداد المحدّد أو غير ذلك.يجب أن تتطابق المفاتيح المقدَّمة هنا
مع حقل KEY في
SearchIndexableResource
وSearchIndexableRaw
. - على سبيل المثال، لا يجب أن يظهر "استخدام البيانات" للمستخدمين الذين لم يستخدموا شريحة SIM في أجهزتهم مطلقًا.
مثال على المفاتيح غير القابلة للفهرسة:
public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!checkIntentAction(context, "android.settings.TERMS")) { keys.add(KEY_TERMS); } if (!checkIntentAction(context, "android.settings.LICENSE")) { keys.add(KEY_LICENSE); } if (!checkIntentAction(context, "android.settings.COPYRIGHT")) { keys.add(KEY_COPYRIGHT); } if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) { keys.add(KEY_WEBVIEW_LICENSE); } return keys; }
getPreferenceControllers
تعرِض هذه السمة قائمة بعناصر التحكّم في الإعدادات المفضّلة المرتبطة بهذا المقتطف. تُستخدَم هذه القائمة لإنشاء نتائج مضمّنة وتعديل العناصر غير القابلة للفهرسة وغير ذلك.
وبالتالي، يجب تضمين كل المحتوى الذي تريد عرضه في نتائج البحث في إما
getXmlResourcesToIndex
أو getRawDataToIndex
.
إضافة كلمات رئيسية إلى إعداداتك
لضمان إمكانية البحث عن الإعداد بسهولة، أضِف كلمات رئيسية ذات صلة بالإعداد الذي قد يستخدمه المستخدم للبحث عنه.
أمور يجب مراعاتها عند إضافة كلمات رئيسية:
- الكلمات الرئيسية هي قائمة بكلمات لا يراها المستخدم بالضرورة، ولكن قد تكون جزءًا من النموذج الذهني الذي يتّبعه المستخدم لفهم طريقة عمل الإعداد.
- هذه هي الكلمات التي قد يكتبها المستخدم للوصول إلى الإعداد.
- ويمكن أن تكون هذه الكلمات مرادفات أو أي كلمات مرتبطة بالإعداد.
- على سبيل المثال، يمكن استخدام "كتم الصوت" للعثور على إعدادات الصوت.
تجنُّب التكرار
إذا كنت تحظر صفحة إعدادات بدون قيد أو شرط، عليك إزالة فهرسة الصفحة الأصلية لتجنُّب تكرار النتائج.
- ابحث عن
PreferenceFragment
للصفحة التي تريد إخفاءها. - أزِل
SearchIndexProvider
.
التحقُّق
لاختبار إمكانية البحث عن إعداد جديد:
- ثبِّت إصدارًا حديثًا من O على الجهاز.
- أعِد فهرسة قاعدة البيانات من خلال اختيار: الإعدادات > التطبيقات والإشعارات > معلومات التطبيقات > الإعدادات > مساحة التخزين > محو البيانات
- تأكَّد من ظهور إعدادات الاستهداف في نتائج البحث.
سيؤدي البحث عن بادئة لعنوان أحد الإعدادات إلى مطابقته.
يمكن إجراء اختبارات Robolectric هذه للتأكّد من تنفيذ هذه
الميزة:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
استهداف الإصدار هو: RunSettingsRoboTests