यूनिवर्सल सर्च की सुविधा

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
  • इंडेक्स करने के लिए, सूची के तौर पर एक्सएमएल प्रॉपर्टी दिखाता है.

एक्सएमएल संसाधनों का उदाहरण:

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 है, तो आपको इसे बदलने की ज़रूरत शायद ही कभी पड़े.
  • यह उन कीवर्ड की सूची दिखाता है जो किसी उपयोगकर्ता, डिवाइस, कॉन्फ़िगरेशन वगैरह के लिए नतीजों में नहीं दिखने चाहिए.यहां दी गई कीवर्ड, SearchIndexableResource और SearchIndexableRaw में मौजूद KEY फ़ील्ड से मेल खाने चाहिए.
  • उदाहरण के लिए: जिन उपयोगकर्ताओं के डिवाइस में कभी सिम कार्ड नहीं रहा है उनके लिए डेटा खर्च की जानकारी नहीं दिखनी चाहिए.

इंडेक्स नहीं की जा सकने वाली कुंजियों का उदाहरण:

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