यूनिवर्सल सर्च

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