Universal Search

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

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

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

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

หลังจากตั้งค่าส่วนย่อยสำหรับการจัดทำดัชนีแล้ว ให้เพิ่มส่วนนั้นลงใน 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