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 SearchIndexProvider
interface 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
etSearchIndexableRaw
- 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.
- 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 > Infos sur les applis > 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 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