جستجوی جهانی

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 است، به ندرت نیاز به لغو آن دارید.
  • فهرستی از کلیدها را برمی‌گرداند که مربوط به نتایجی است که نباید برای کاربر، دستگاه، پیکربندی و غیره نشان داده شوند. کلیدهای ارائه شده در اینجا باید با فیلد KEY در SearchIndexableResource و SearchIndexableRaw مطابقت داشته باشند.
  • به عنوان مثال: استفاده از داده نباید برای کاربرانی که هرگز سیم کارت در دستگاه خود نداشته اند نشان داده شود.

مثال کلیدهای غیر قابل نمایه سازی:

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