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

  • ลบล้างค่านี้หากเนื้อหาของข้อมูลโค้ดมาจาก 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