جستجوی همگانی

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. تأیید کنید که تنظیمات هدف در جستجو نشان داده می‌شود.
    جستجوی پیشوند عنوان تنظیمات با آن مطابقت خواهد داشت.

این آزمایش‌های Robolectric ممکن است برای اعتبارسنجی پیاده‌سازی این ویژگی اجرا شوند:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

هدف ساخت این است: RunSettingsRoboTests