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 a pesquisa de configurações.
Como criar 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
Essa interface SearchIndexProvider
tem 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 um
DashboardFragment
, você raramente precisará substituir isso. - Retorna uma lista de chaves que correspondem aos resultados que não devem aparecer para 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 ser exibido 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 para 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 pode ser parte de seu modelo mental de como a configuração funciona.
- Estas são palavras que o usuário pode digitar para chegar à sua configuração.
- Eles podem ser sinônimos ou qualquer palavra associada à configuração pode ser usada.
- Por exemplo, "mudo" pode ser usado para localizar a configuração de volume.
Evitando a duplicação
Se você estiver suprimindo incondicionalmente uma página de configurações, remova a indexação da página original para evitar a 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.
A pesquisa de um prefixo do título de uma configuração corresponderá a ele.
Estes testes roboelétricos podem ser executados para validar a implementação deste recurso:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
O destino de compilação é: RunSettingsRoboTests