חיפוש אוניברסלי

ב-Android 8.0 נוספו יכולות חיפוש מורחבות בתפריט הגדרות. במסמך הזה מוסבר איך להוסיף הגדרה ולוודא שהיא נוספה לאינדקס בצורה נכונה עבור חיפוש הגדרות.

יצירת הגדרות שניתנות להוספה לאינדקס

כל מקטע הגדרות שצריך להוסיף לאינדקס מיישם את הממשק Indexable, וגם את השדה הסטטי:

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.

הוספת מילות מפתח להגדרות

כדי להבטיח שאפשר למצוא את ההגדרה בקלות, כדאי להוסיף מילות מפתח שרלוונטיות להגדרה שבה משתמשים יכולים לחפש את ההגדרה.

נקודות למחשבה לגבי הוספת מילות מפתח:

  • מילות מפתח הן רשימה של מילים שהמשתמש לא בהכרח רואה, אבל הן עשויות להיות חלק מהמודל המנטלי שלו לגבי אופן הפעולה של ההגדרה.
  • אלו מילים שהמשתמש עשוי להקליד כדי להגיע להגדרה שלכם.
  • המילים האלה יכולות להיות מילים נרדפות או מילים שאפשר להשתמש בהן במסגרת ההגדרה.
  • לדוגמה, אפשר להשתמש במילה 'השתקה' כדי למצוא את ההגדרה של עוצמת הקול.

הימנעות מכפילויות

אם אתם מסתירים דף הגדרות באופן בלתי מותנה, עליכם להסיר את ההוספה לאינדקס של הדף המקורי כדי למנוע כפילות של התוצאות.

  1. מחפשים את ה-PreferenceFragment של הדף שרוצים להסתיר.
  2. צריך להסיר את SearchIndexProvider.

אימות

כדי לבדוק את יכולת החיפוש של הגדרה חדשה:

  1. התקנת גרסה עדכנית של O במכשיר.
  2. להוסיף מחדש את מסד הנתונים לאינדקס באמצעות בחירה באפשרות:
  3. 'הגדרות' > 'אפליקציות והתראות' > 'מידע על אפליקציות' > 'הגדרות' > 'אחסון' > ניקוי הנתונים
  4. מוודאים שהגדרות הטירגוט מופיעות בחיפוש.
    חיפוש תחילית של שם הגדרה יתאים לה.

אפשר להריץ את הבדיקות הרובולקטריות הבאות כדי לאמת את ההטמעה של התכונה הזו:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

יעד ה-build הוא: RunSettingsRoboTests