ב-Android 8.0 נוספו יכולות חיפוש מורחבות בתפריט הגדרות. הזה מסמך מתאר כיצד להוסיף הגדרה ולוודא שהיא נוספה לאינדקס כראוי חיפוש הגדרות.
יצירת הגדרות שניתנות להוספה לאינדקס
כל קטע הגדרות שיש להוסיף לאינדקס מטמיע את
Indexable
ממשק, AND דורש את הערך הסטטי
שדה:
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
.
הוספת מילות מפתח להגדרות
כדי להבטיח שניתן יהיה לחפש את ההגדרה בקלות, הוסיפו מילות מפתח שרלוונטיות שבה משתמשים יכולים לחפש את ההגדרה.
נקודות למחשבה לגבי הוספת מילות מפתח:
- מילות מפתח הן רשימה של מילים שהמשתמש לא בהכרח רואה, אבל ייתכן להיות חלק מהמודל המנטלי של אופן הפעולה של הסביבה.
- אלו מילים שהמשתמש עשוי להקליד כדי להגיע להגדרה שלכם.
- המילים האלה יכולות להיות מילים נרדפות או מילים שאפשר להשתמש בהן במסגרת ההגדרה.
- לדוגמה, "mute" (השתקה) יכול לשמש לאיתור ההגדרה של עוצמת הקול.
הימנעות מכפילויות
אם מסתירים דף הגדרות באופן גורף, צריך להסיר את ההוספה לאינדקס של הדף המקורי כדי למנוע כפילויות של התוצאות.
- מחפשים את ה-
PreferenceFragment
של הדף שרוצים להסתיר. - צריך להסיר את
SearchIndexProvider
.
אימות
כדי לבדוק את יכולת החיפוש של הגדרה חדשה:
- התקנת גרסה עדכנית של O במכשיר.
- להוסיף מחדש את מסד הנתונים לאינדקס באמצעות בחירה באפשרות: הגדרות > אפליקציות התראות > פרטי אפליקציות > הגדרות > אחסון > ניקוי נתונים
- מוודאים שהגדרות הטירגוט מופיעות בחיפוש.
חיפוש תחילית של שם הגדרה יתאים לה.
אפשר לבצע בדיקות רובולקטריות אלה כדי לאמת את ההטמעה של
פיצ'ר:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
יעד ה-build הוא: RunSettingsRoboTests