Penelusuran universal

Android 8.0 menambahkan kemampuan penelusuran yang diperluas untuk menu Setelan. Dokumen ini menjelaskan cara menambahkan setelan dan memastikan setelan tersebut diindeks dengan benar untuk penelusuran Setelan.

Membuat setelan yang dapat diindeks

Setiap fragmen Setelan yang perlu diindeks mengimplementasikan antarmuka Indexable, DAN memerlukan kolom statis:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Setelah menyiapkan fragmen untuk pengindeksan, tambahkan ke SearchIndexableResources yang ditemukan di:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

Metode opsional

Antarmuka SearchIndexProvider ini memiliki empat metode opsional.

getXmlResourcesToIndex

  • Ganti ini jika konten fragmen Anda berasal dari: preference xml
  • Menampilkan preferensi XML sebagai daftar yang akan diindeks.

Contoh resource 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

  • Ganti ini jika konten fragmen Anda BUKAN berasal dari: preference xml
  • Menampilkan daftar Data mentah (SearchIndexableRaw) yang akan diindeks.

Contoh data mentah:

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

  • Jika fragmen Anda adalah DashboardFragment, Anda jarang perlu mengganti ini.
  • Menampilkan daftar kunci yang sesuai dengan hasil yang tidak boleh muncul untuk pengguna, perangkat, konfigurasi, dll. tertentu. Kunci yang diberikan di sini harus cocok dengan kolom KEY di SearchIndexableResource dan SearchIndexableRaw.
  • Misalnya: Penggunaan Data tidak akan muncul untuk pengguna yang belum pernah memiliki kartu SIM di perangkat mereka.

Contoh kunci yang tidak dapat diindeks:

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

Menampilkan daftar pengontrol preferensi yang terkait dengan fragmen ini. Daftar ini digunakan untuk membentuk hasil inline, memperbarui item yang tidak dapat diindeks, dll.

Jadi, semua yang ingin Anda tampilkan di penelusuran harus disertakan dalam getXmlResourcesToIndex atau getRawDataToIndex.

Menambahkan kata kunci untuk setelan Anda

Untuk memastikan setelan mudah ditelusuri, tambahkan kata kunci yang relevan untuk setelan yang dapat digunakan pengguna untuk menelusuri setelan tersebut.

Hal-hal yang perlu dipertimbangkan saat menambahkan kata kunci:

  • Kata kunci adalah daftar kata yang tidak selalu dilihat pengguna, tetapi mungkin merupakan bagian dari model mental mereka tentang cara kerja setelan.
  • Ini adalah kata-kata yang mungkin diketik pengguna untuk membuka setelan Anda.
  • Kata tersebut dapat berupa sinonim atau kata apa pun yang terkait dengan setelan dapat digunakan.
  • Misalnya, "bisukan" dapat digunakan untuk menemukan setelan Volume.

Menghindari duplikasi

Jika Anda menyembunyikan halaman setelan tanpa syarat, hapus pengindeksan halaman asli untuk menghindari duplikasi hasil.

  1. Temukan PreferenceFragment halaman yang Anda sembunyikan.
  2. Hapus SearchIndexProvider.

Validasi

Untuk menguji kemampuan penelusuran setelan baru:

  1. Instal O versi terbaru di perangkat.
  2. Buat ulang indeks database dengan memilih:
  3. Setelan > Aplikasi & Notifikasi > Info aplikasi > Setelan > Penyimpanan > Hapus Data
  4. Pastikan setelan target muncul di penelusuran.
    Menelusuri awalan judul setelan akan mencocokkannya.

Pengujian robolectric ini dapat dijalankan untuk memvalidasi implementasi fitur ini:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

Target build adalah: RunSettingsRoboTests