Universal Search

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

Crea impostazioni Indicizzabili

Ogni frammento Impostazioni che deve essere indicizzato implementa l'interfaccia Indexable 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 SearchIndexProviderinterfaccia ha quattro metodi facoltativi.

getXmlResourcesToIndex

  • Sostituisci questa opzione se i contenuti dei frammenti 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 questa opzione se i contenuti dei frammenti 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 è un DashboardFragment, raramente devi sostituirlo.
  • Restituisce un elenco di chiavi che corrisponde 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 e SearchIndexableRaw.
  • Ad esempio, l'utilizzo dei dati non dovrebbe essere mostrato agli 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;
}

getPreferenceController

Restituisce un elenco di controller di preferenze associati al frammento. Questo elenco viene utilizzato per generare risultati in linea, aggiornare gli elementi non indicizzabili e così via.

Di conseguenza, tutto ciò che vuoi mostrare nella ricerca deve essere incluso in getXmlResourcesToIndex o getRawDataToIndex.

Aggiungi parole chiave per le impostazioni

Per assicurarti che un'impostazione sia facilmente disponibile per la ricerca, aggiungi parole chiave pertinenti all'impostazione che un utente può utilizzare per cercarla.

Aspetti da considerare quando si aggiungono 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 di come funziona l'impostazione.
  • Si tratta di parole che l'utente potrebbe digitare per accedere alle tue impostazioni.
  • Possono essere sinonimi o qualsiasi parola associata all'impostazione.
  • Ad esempio, "disattiva audio" potrebbe essere utilizzato per trovare l'impostazione del volume.

Evita i duplicati

Se stai eliminando incondizionatamente una pagina di impostazioni, rimuovi l'indicizzazione della pagina originale per evitare risultati duplicati.

  1. Trova il PreferenceFragment della pagina che stai eliminando.
  2. Rimuovi SearchIndexProvider.

Convalida

Per testare la ricercabilità di una nuova impostazione:

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

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

Il target della build è: RunSettingsRoboTests