Android 8.0 menambahkan kemampuan penelusuran yang diperluas untuk menu Setelan. Dokumen ini menjelaskan cara menambahkan setelan dan memastikannya diindeks dengan benar untuk penelusuran Setelan.
Membuat setelan yang dapat diindeks
Setiap fragmen Setelan yang perlu diindeks akan menerapkan
antarmuka Indexable
, DAN memerlukan kolom
statis:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Setelah menyiapkan fragmen untuk pengindeksan, tambahkan fragmen tersebut ke
SearchIndexableResources
yang ada 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 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 tidak perlu menggantinya. - Menampilkan daftar kunci yang sesuai dengan hasil yang seharusnya tidak muncul
untuk pengguna, perangkat, konfigurasi tertentu, dll.Kunci yang diberikan di sini harus
cocok dengan kolom KEY di
SearchIndexableResource
danSearchIndexableRaw
. - Misalnya: Penggunaan Data tidak boleh muncul untuk pengguna yang tidak 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 membuat hasil inline, memperbarui hasil yang tidak dapat diindeks, dll.
Dengan demikian, semua yang ingin Anda munculkan di penelusuran harus disertakan dalam
getXmlResourcesToIndex
atau getRawDataToIndex
.
Tambahkan kata kunci untuk setelan Anda
Untuk memastikan setelan mudah ditelusuri, tambahkan kata kunci yang relevan dengan setelan yang dapat digunakan pengguna untuk menelusuri setelan tersebut.
Hal-hal yang perlu dipertimbangkan saat menambahkan kata kunci:
- Kata kunci adalah daftar kata yang belum tentu dilihat pengguna, tetapi mungkin menjadi bagian dari model mental mereka terkait cara kerja setelan tersebut.
- Ini adalah kata yang mungkin diketik pengguna untuk membuka setelan Anda.
- Istilah tersebut dapat berupa sinonim atau kata apa pun yang terkait dengan setelan tersebut 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.
- Temukan
PreferenceFragment
halaman yang Anda sembunyikan. - Hapus
SearchIndexProvider
.
Validasi
Untuk menguji kemampuan penelusuran setelan baru:
- Instal O versi terbaru pada perangkat.
- Indeks ulang database dengan memilih: Setelan > Aplikasi & Notifikasi > Info aplikasi > Setelan > Penyimpanan > Hapus Data
- Pastikan setelan target muncul di penelusuran.
Awalan judul setelan akan cocok dengan awalan tersebut.
Uji robolectric ini dapat dijalankan untuk memvalidasi implementasi fitur
ini:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
Target build-nya adalah: RunSettingsRoboTests