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

ב-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" (השתקה) יכול לשמש לאיתור ההגדרה של עוצמת הקול.

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

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

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

אימות

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

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

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

יעד ה-build הוא: RunSettingsRoboTests