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

אנדרואיד 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

יעד הבנייה הוא: RunSettingsRoboTests