Recherche universelle

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

Créer des paramètres indexables

Chaque fragment Settings qui doit être indexé implémente la Indexable, ET nécessite l'option de configuration :

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

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

Méthodes facultatives

Cette SearchIndexProviderinterface propose quatre options méthodes.

getXmlResourcesToIndex

  • Remplacez cette valeur 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 cette valeur 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 de type DashboardFragment, vous devez rarement remplacer cela.
  • Renvoie une liste de clés correspondant à des résultats qui ne doivent pas s'afficher pour l'utilisateur, l'appareil, la configuration, etc. donnés. Les clés fournies ici doivent correspond au champ KEY dans SearchIndexableResource et SearchIndexableRaw
  • Par exemple, "Consommation des données" ne doit pas s'afficher pour les utilisateurs qui n'ont jamais une carte SIM dans son 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 intégrés, mettre à jour les éléments non indexables, etc.

Ainsi, tous les éléments que vous souhaitez afficher dans les résultats de recherche doivent être inclus dans getXmlResourcesToIndex ou getRawDataToIndex.

Ajoutez des mots clés à vos paramètres

Pour faciliter la recherche d'un paramètre, ajoutez des mots clés pertinents pour le qu'un utilisateur peut utiliser pour rechercher ce paramètre.

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

  • Les mots clés sont une liste de termes que l'utilisateur ne voit pas, mais qui peuvent leur modèle mental.
  • Il s'agit de mots que l'utilisateur est susceptible de saisir pour accéder à votre paramètre.
  • Il peut s'agir de synonymes ou de n'importe quel mot associé au paramètre.
  • Par exemple, "couper le son" peut être utilisé pour trouver le paramètre Volume.

Éviter les doublons

Si vous supprimez une page de paramètres de manière inconditionnelle, 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 SearchIndexProvider.

Validation

Pour tester la possibilité de rechercher un nouveau paramètre:

  1. Installez une version récente d'O sur l'appareil.
  2. Pour réindexer la base de données, sélectionnez:
  3. Paramètres > Applications et Notifications > Infos sur les applis > Paramètres > Stockage > Effacer les données
  4. Vérifiez que les paramètres de cible s'affichent dans la recherche.
    La recherche du préfixe du titre d'un paramètre permet de trouver une correspondance.

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

La cible du build est: RunSettingsRoboTests