การค้นหาแบบสากล

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.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.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