Universal Search

Android 8.0 เพิ่มความสามารถในการค้นหาเพิ่มเติมให้กับเมนูการตั้งค่า เอกสารนี้จะอธิบายวิธีเพิ่มการตั้งค่าและตรวจสอบว่ามีการจัดทำดัชนีอย่างถูกต้องสำหรับการค้นหาการตั้งค่า

สร้างการตั้งค่าที่จัดทำดัชนีได้

ส่วนย่อยของการตั้งค่าแต่ละรายการที่ต้องจัดทำดัชนีจะใช้อินเทอร์เฟซ Indexable และต้องใช้ช่องแบบคงที่ ดังนี้

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

หลังจากตั้งค่า Fragment สำหรับการจัดทำดัชนีแล้ว ให้เพิ่มส่วนนั้นลงใน SearchIndexableResources ซึ่งพบได้ที่
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

วิธีการที่ไม่บังคับ

อินเทอร์เฟซ SearchIndexProviderนี้มีวิธีการที่ไม่บังคับ 4 วิธี

getXmlResourcesToIndex

  • โปรดลบล้างค่านี้หากเนื้อหา Fragment มาจาก 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;
}

รับดัชนีข้อมูลข้อมูลดิบ

  • โปรดลบล้างค่านี้หากเนื้อหา Fragment ไม่ได้มาจาก 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;
}

getNonIndexableKey

  • หากส่วนย่อยของคุณเป็น 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;
}

getPreferenceController

แสดงรายการตัวควบคุมค่ากำหนดที่เชื่อมโยงกับส่วนย่อยนี้ รายการนี้ใช้เพื่อสร้างผลการค้นหาในบรรทัด อัปเดตรายการที่จัดทำดัชนีไม่ได้ ฯลฯ

ดังนั้น ทุกรายการที่คุณต้องการให้แสดงในการค้นหาต้องรวมอยู่ใน getXmlResourcesToIndex หรือ getRawDataToIndex

เพิ่มคีย์เวิร์ดสำหรับการตั้งค่าของคุณ

หากต้องการให้ค้นหาการตั้งค่าได้ง่าย ให้เพิ่มคีย์เวิร์ดที่เกี่ยวข้องกับการตั้งค่าที่ผู้ใช้อาจใช้ค้นหาการตั้งค่าดังกล่าว

สิ่งที่ต้องพิจารณาเมื่อเพิ่มคีย์เวิร์ดมีดังนี้

  • คีย์เวิร์ดคือรายการคำที่ผู้ใช้ไม่จำเป็นต้องเห็น แต่อาจเป็นส่วนหนึ่งของรูปแบบทางความคิดของผู้ใช้สำหรับวิธีการทำงานของการตั้งค่านี้
  • คำเหล่านี้คือคำที่ผู้ใช้อาจพิมพ์เพื่อไปยังการตั้งค่าของคุณ
  • โดยสามารถเป็นคำพ้องความหมายหรือคำใดก็ได้ที่เกี่ยวข้องกับการตั้งค่าดังกล่าว
  • เช่น "ปิดเสียง" อาจใช้เพื่อค้นหาการตั้งค่าระดับเสียง

หลีกเลี่ยงการทำซ้ำ

หากคุณระงับหน้าการตั้งค่าอย่างไม่มีเงื่อนไข ให้นำการจัดทำดัชนีหน้าเดิมออกเพื่อหลีกเลี่ยงการแสดงผลลัพธ์ที่ซ้ำกัน

  1. ค้นหา PreferenceFragment ของหน้าเว็บที่คุณกำลังระงับ
  2. นำ SearchIndexProvider ออก

การตรวจสอบความถูกต้อง

วิธีทดสอบความสามารถในการค้นหาของการตั้งค่าใหม่

  1. ติดตั้ง O เวอร์ชันล่าสุดในอุปกรณ์
  2. จัดทำดัชนีฐานข้อมูลอีกครั้งโดยเลือกตัวเลือกต่อไปนี้
  3. การตั้งค่า > แอปและการแจ้งเตือน > ข้อมูลแอป > การตั้งค่า > พื้นที่เก็บข้อมูล > ล้างข้อมูล
  4. ตรวจสอบว่าการตั้งค่าเป้าหมายปรากฏในการค้นหา
    การค้นหาคำนำหน้าของชื่อการตั้งค่าจะตรงกับค่าดังกล่าว

เราอาจทำการทดสอบแบบ Robolectric เหล่านี้เพื่อตรวจสอบการใช้งานฟีเจอร์นี้
packages/apps/Settings/tests/robotests/src/com/android/settings/search

เป้าหมายของบิลด์คือ RunSettingsRoboTests