Android 8.0 ajoute des fonctionnalités de recherche étendues pour le menu Paramètres. Ce document explique comment ajouter un paramètre et s'assurer qu'il est correctement indexé pour la recherche de paramètres.
Créer des paramètres indexables
Chaque fragment Settings 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 votre fragment configuré pour l'indexation, ajoutez-le à SearchIndexableResources
, disponible à l'adresse:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Méthodes facultatives
Cette interface SearchIndexProvider
comporte quatre méthodes facultatives.
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 ce paramètre. - 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 correspondre au champ KEY dans
SearchIndexableResource
etSearchIndexableRaw
. - Par exemple, "Consommation 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 intégrés, mettre à jour les éléments non indexables, etc.
Ainsi, tout ce que vous souhaitez afficher dans la recherche doit ê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 par rapport au paramètre qu'un utilisateur peut utiliser pour le rechercher.
É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 pour le fonctionnement du paramètre.
- 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.
- Recherchez le
PreferenceFragment
de la page que vous supprimez. - Supprimez
SearchIndexProvider
.
Validation
Pour tester la possibilité de rechercher un nouveau paramètre:
- Installez une version récente d'O sur l'appareil.
- Pour réindexer la base de données, sélectionnez: Paramètres > Applications et notifications > Informations sur les applications > Paramètres > Stockage > Effacer les données
- Vérifiez que les paramètres de cible s'affichent dans la recherche.
La recherche du préfixe du titre d'un paramètre correspond à celui-ci.
Ces tests robolectric peuvent être exécutés pour valider l'implémentation de cette fonctionnalité:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
La cible du build est: RunSettingsRoboTests