Ricerca universale

Android 8.0 aggiunge funzionalità di ricerca estese per il menu Impostazioni . Questo documento descrive come aggiungere un'impostazione e assicurarsi che sia indicizzata correttamente per la ricerca Impostazioni.

Creazione di impostazioni indicizzabili

Ogni frammento di Impostazioni che deve essere indicizzato implementa l'interfaccia Indexable E richiede il campo statico:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Una volta impostato il frammento per l'indicizzazione, aggiungilo a SearchIndexableResources trovato in:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

Metodi facoltativi

Questa interfaccia SearchIndexProvider dispone di quattro metodi opzionali.

getXmlResourcesToIndex

  • Sostituiscilo se il contenuto del frammento proviene 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

  • Sostituiscilo se il contenuto del tuo frammento NON proviene da: preference xml
  • Restituisce un elenco di dati grezzi ( SearchIndexableRaw ) da indicizzare.

Esempio di dati grezzi:

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 tuo frammento è un DashboardFragment , raramente avrai bisogno di sovrascriverlo.
  • Restituisce un elenco di chiavi che corrisponde a risultati che non dovrebbero essere visualizzati per l'utente, il dispositivo, la configurazione specificati e così via. Le chiavi fornite qui devono corrispondere al campo KEY in SearchIndexableResource e SearchIndexableRaw .
  • Ad esempio: l'utilizzo dei dati non dovrebbe essere visualizzato per gli utenti che non hanno mai avuto una scheda SIM nel proprio dispositivo.

Esempio di chiavi non indicizzabili:

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 indicizzabili, ecc.

Pertanto, tutto ciò che desideri visualizzare nella ricerca deve essere incluso in getXmlResourcesToIndex o getRawDataToIndex .

Aggiunta di parole chiave per le tue impostazioni

Per garantire che un'impostazione sia facilmente ricercabile, aggiungi parole chiave pertinenti per l'impostazione che un utente può utilizzare per cercare l'impostazione.

Cose da considerare quando si aggiungono parole chiave:

  • Le parole chiave sono un elenco di parole che l'utente non necessariamente vede ma che potrebbero far parte del suo modello mentale sul funzionamento dell'impostazione.
  • Queste sono le parole che l'utente potrebbe digitare per accedere alle tue impostazioni.
  • Possono essere sinonimi oppure è possibile utilizzare qualsiasi parola associata all'impostazione.
  • Ad esempio, "mute" potrebbe essere utilizzato per trovare l'impostazione del volume.

Evitare duplicazioni

Se stai sopprimendo incondizionatamente una pagina delle impostazioni, rimuovi l'indicizzazione della pagina originale per evitare la duplicazione dei risultati.

  1. Trova il PreferenceFragment della pagina che stai sopprimendo.
  2. Rimuovere SearchIndexProvider .

Validazione

Per testare la ricercabilità di una nuova impostazione:

  1. Installa una versione recente di O sul dispositivo.
  2. Reindicizzare il database selezionando:
  3. Impostazioni > App e notifiche > Informazioni sulle app > Impostazioni > Memoria > Cancella dati
  4. Verifica che le impostazioni di destinazione vengano visualizzate nella ricerca.
    La ricerca di un prefisso del titolo di un'impostazione corrisponderà a quello.

Questi test robotici possono essere eseguiti per convalidare l'implementazione di questa funzionalità:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

La destinazione della compilazione è: RunSettingsRoboTests