ইউনিভার্সাল সার্চ

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 হলে, আপনাকে খুব কমই এটি ওভাররাইড করতে হবে।
  • প্রদত্ত ব্যবহারকারী, ডিভাইস, কনফিগারেশন ইত্যাদির জন্য দেখানো উচিত নয় এমন ফলাফলের সাথে সম্পর্কিত কীগুলির একটি তালিকা রিটার্ন করে। এখানে দেওয়া কীগুলি 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