O Android 8.0 adiciona recursos de pesquisa expandidos para o menu Configurações . Este documento descreve como adicionar uma configuração e garantir que ela seja indexada corretamente para pesquisa de configurações.
Criando configurações indexáveis
Cada fragmento de configurações que precisa ser indexado implementa a interface Indexable
E requer o campo estático:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Depois de configurar seu fragmento para indexação, adicione-o a SearchIndexableResources
encontrado em:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Métodos opcionais
Esta interface SearchIndexProvider
possui quatro métodos opcionais.
getXmlResourcesToIndex
- Substitua isso se o conteúdo do seu fragmento for de:
preference xml
- Retorna uma preferência XML como uma lista a ser indexada.
Exemplo de recursos 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
- Substitua isso se o conteúdo do seu fragmento NÃO for de:
preference xml
- Retorna uma lista de dados brutos (
SearchIndexableRaw
) a serem indexados.
Exemplo de dados brutos:
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 o seu fragmento for
DashboardFragment
, você raramente precisará substituí-lo. - Retorna uma lista de chaves que corresponde a resultados que não devem aparecer para um determinado usuário, dispositivo, configuração, etc. As chaves fornecidas aqui devem corresponder ao campo KEY em
SearchIndexableResource
eSearchIndexableRaw
. - Por exemplo: O uso de dados não deve aparecer para usuários que nunca tiveram um cartão SIM no dispositivo.
Exemplo de chaves não indexáveis:
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
Retorna uma lista de controladores de preferência associados a este fragmento. Esta lista é usada para formar resultados embutidos, atualizar não indexáveis, etc.
Assim, tudo o que você deseja que apareça na pesquisa deve ser incluído em getXmlResourcesToIndex
ou getRawDataToIndex
.
Adicionando palavras-chave às suas configurações
Para garantir que uma configuração seja facilmente pesquisável, adicione palavras-chave relevantes para a configuração que um usuário pode usar para pesquisar a configuração.
Coisas a considerar ao adicionar palavras-chave:
- Palavras-chave são uma lista de palavras que o usuário não necessariamente vê, mas que podem fazer parte de seu modelo mental de funcionamento da configuração.
- Estas são palavras que o usuário pode digitar para acessar sua configuração.
- Eles podem ser sinônimos ou quaisquer palavras associadas à configuração podem ser usadas.
- Por exemplo, "mudo" pode ser usado para encontrar a configuração de Volume.
Evitando duplicação
Se você estiver suprimindo incondicionalmente uma página de configurações, remova a indexação da página original para evitar duplicação de resultados.
- Encontre o
PreferenceFragment
da página que você está suprimindo. - Remova o
SearchIndexProvider
.
Validação
Para testar a capacidade de pesquisa de uma nova configuração:
- Instale uma versão recente do O no dispositivo.
- Reindexe o banco de dados selecionando: Configurações > Aplicativos e notificações > Informações de aplicativos > Configurações > Armazenamento > Limpar dados
- Verifique se as configurações de destino aparecem na pesquisa.
Procurar um prefixo do título de uma configuração irá corresponder a ele.
Estes testes robolétricos podem ser executados para validar a implementação deste recurso:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
O destino de construção é: RunSettingsRoboTests