Android 8.0 aggiunge funzionalità di ricerca avanzate per il menu Impostazioni. Questo documento descrive come aggiungere un'impostazione e assicurarsi che sia indicizzata correttamente per la ricerca nelle Impostazioni.
Creare impostazioni indicizzate
Ogni frammento Impostazioni che deve essere indicizzato implementa l'Indexable
interfaccia E richiede il campo statico:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Dopo aver configurato il frammento per l'indicizzazione, aggiungilo a
SearchIndexableResources
disponibile all'indirizzo:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Metodi facoltativi
Questa SearchIndexProvider
interfaccia ha quattro metodi facoltativi.
getXmlResourcesToIndex
- Sostituisci questo valore se i contenuti del frammento provengono da:
preference xml
- Restituisce una preferenza XML come elenco da indicizzare.
Esempio di risorse 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
- Sostituisci questo valore se i contenuti del frammento NON provengono da:
preference xml
- Restituisce un elenco di dati non elaborati (
SearchIndexableRaw
) da indicizzare.
Esempio di dati non elaborati:
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
- Se il frammento è
DashboardFragment
, raramente è necessario override. - Restituisce un elenco di chiavi che corrispondono ai risultati che non devono essere visualizzati per l'utente, il dispositivo, la configurazione e così via specificati.Le chiavi fornite qui devono corrispondere al campo KEY in
SearchIndexableResource
eSearchIndexableRaw
. - Ad esempio, l'utilizzo dei dati non deve essere visualizzato per gli utenti che non hanno mai avuto una scheda SIM nel proprio dispositivo.
Esempio di chiavi non indicizzate:
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
Restituisce un elenco di controller delle preferenze associati a questo frammento. Questo elenco viene utilizzato per formare risultati in linea, aggiornare elementi non indicizzati e così via.
Pertanto, tutto ciò che vuoi mostrare nella Ricerca deve essere incluso in getXmlResourcesToIndex
o getRawDataToIndex
.
Aggiungere parole chiave per le impostazioni
Per assicurarti che un'impostazione sia facilmente ricercabile, aggiungi parole chiave pertinenti per l'impostazione che un utente potrebbe utilizzare per cercarla.
Aspetti da considerare quando aggiungi parole chiave:
- Le parole chiave sono un elenco di parole che l'utente non vede necessariamente, ma che possono far parte del suo modello mentale del funzionamento dell'impostazione.
- Si tratta di parole che l'utente potrebbe digitare per accedere all'impostazione.
- Possono essere sinonimi o qualsiasi parola associata all'impostazione.
- Ad esempio, potresti usare "disattiva l'audio" per trovare l'impostazione del volume.
Evitare la duplicazione
Se stai sopprimendo incondizionatamente una pagina di impostazioni, rimuovi l'indicizzazione della pagina originale per evitare la duplicazione dei risultati.
- Trova il
PreferenceFragment
della pagina che vuoi eliminare. - Rimuovi
SearchIndexProvider
.
Convalida
Per verificare la ricercabilità di una nuova impostazione:
- Installa una versione recente di O sul dispositivo.
- Esegui nuovamente l'indicizzazione del database selezionando: Impostazioni > App e notifiche > Informazioni app > Impostazioni > Spazio di archiviazione > Cancella dati
- Verifica che le impostazioni del target vengano visualizzate nella ricerca.
La ricerca di un prefisso del titolo di un'impostazione corrisponderà a questa.
Per convalidare l'implementazione di questa funzionalità, è possibile eseguire questi test robolectric:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
Il target di compilazione è: RunSettingsRoboTests