Recherche universelle

Android 8.0 ajoute des fonctionnalités de recherche étendues pour le menu Paramètres . Ce document décrit comment ajouter un paramètre et garantir qu'il est correctement indexé pour la recherche de paramètres.

Création de paramètres indexables

Chaque fragment de paramètres qui doit être indexé implémente l'interface Indexable ET nécessite le champ statique :

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Une fois que votre fragment est configuré pour l'indexation, ajoutez-le à SearchIndexableResources trouvé à l'adresse :
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

Méthodes facultatives

Cette interface SearchIndexProvider dispose de quatre méthodes facultatives.

getXmlResourcesToIndex

  • Remplacez ceci si le contenu de votre fragment provient de : preference xml
  • Renvoie une préférence XML sous forme de liste à indexer.

Exemple de ressources 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

  • Remplacez ceci si le contenu de votre fragment ne provient PAS de : preference xml
  • Renvoie une liste de données brutes ( SearchIndexableRaw ) à indexer.

Exemple de données brutes :

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

  • Si votre fragment est un DashboardFragment , vous avez rarement besoin de le remplacer.
  • Renvoie une liste de clés qui correspondent aux résultats qui ne doivent pas apparaître pour l'utilisateur, l'appareil, la configuration, etc. donnés. Les clés fournies ici doivent correspondre au champ KEY dans SearchIndexableResource et SearchIndexableRaw .
  • Par exemple : L'utilisation des données ne doit pas s'afficher pour les utilisateurs qui n'ont jamais eu de carte SIM dans leur appareil.

Exemple de clés non indexables :

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

Renvoie une liste de contrôleurs de préférences associés à ce fragment. Cette liste est utilisée pour former des résultats en ligne, mettre à jour les non-indexables, etc.

Ainsi, tout ce que vous souhaitez afficher dans la recherche doit être inclus dans getXmlResourcesToIndex ou getRawDataToIndex .

Ajout de mots-clés pour vos paramètres

Pour garantir qu'un paramètre est facilement consultable, ajoutez des mots-clés pertinents pour le paramètre qu'un utilisateur peut utiliser pour rechercher le paramètre.

Éléments à prendre en compte lors de l'ajout de mots-clés :

  • Les mots-clés sont une liste de mots que l'utilisateur ne voit pas nécessairement mais qui peuvent faire partie de son modèle mental du fonctionnement du paramètre.
  • Ce sont des mots que l'utilisateur peut saisir pour accéder à vos paramètres.
  • Il peut s'agir de synonymes ou n'importe quel mot associé au paramètre peut être utilisé.
  • Par exemple, « muet » peut être utilisé pour rechercher le paramètre de volume.

Éviter la duplication

Si vous supprimez sans condition une page de paramètres, supprimez l'indexation de la page d'origine pour éviter la duplication des résultats.

  1. Recherchez le PreferenceFragment de la page que vous supprimez.
  2. Supprimez le SearchIndexProvider .

Validation

Pour tester la possibilité de recherche d'un nouveau paramètre :

  1. Installez une version récente d'O sur l'appareil.
  2. Réindexez la base de données en sélectionnant :
  3. Paramètres > Applications et notifications > Informations sur les applications > Paramètres > Stockage > Effacer les données
  4. Vérifiez que les paramètres cibles apparaissent dans la recherche.
    La recherche d'un préfixe du titre d'un paramètre le fera correspondre.

Ces tests robotiques peuvent être exécutés pour valider la mise en œuvre de cette fonctionnalité :
packages/apps/Settings/tests/robotests/src/com/android/settings/search

La cible de build est : RunSettingsRoboTests