O Android 8.0 adiciona mais recursos de pesquisa ao menu Configurações. Isso documento descreve como adicionar uma configuração e garantir que ela seja devidamente indexada Pesquisa nas configurações.
Criar configurações indexáveis
Cada fragmento de configurações que precisa ser indexado implementa o
Indexable
interface E exige a interface estática
campo:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Depois de configurar o fragmento para indexação, adicione-o a
SearchIndexableResources
encontrado em:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Métodos opcionais
A interface SearchIndexProvider
tem quatro opções
métodos.
getXmlResourcesToIndex
- Modifique isso se o conteúdo do 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
- Modifique isso se o conteúdo do 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 fragmento for um
DashboardFragment
, você raramente precisará substituir isso. - Retorna uma lista de chaves que corresponde aos resultados que não devem aparecer
para o usuário, dispositivo, configuração etc.As chaves fornecidas aqui devem
corresponder ao campo KEY em
SearchIndexableResource
eSearchIndexableRaw
. - Por exemplo: "Uso de dados" não deve ser exibido para usuários que nunca tiveram uma chip 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. Essa lista é usada para formar resultados inline, atualizar itens não indexáveis etc.
Assim, tudo o que você quiser que apareça na pesquisa deve ser incluído
getXmlResourcesToIndex
ou getRawDataToIndex
.
Adicionar palavras-chave para suas configurações
Para garantir que uma configuração seja facilmente pesquisável, adicione palavras-chave relevantes para a que um usuário pode usar para pesquisá-la.
Considerações ao adicionar palavras-chave:
- Palavras-chave são uma lista de palavras que o usuário não necessariamente vê, mas pode fazer parte do modelo mental de como o ambiente funciona.
- São palavras que o usuário pode digitar para acessar sua configuração.
- Podem ser sinônimos ou qualquer palavra associada à configuração.
- Por exemplo, "silenciar" pode ser usado para encontrar a configuração de volume.
Evitar duplicação
Se você estiver suprimindo incondicionalmente uma página de configurações, remova a indexação de da página original para evitar a duplicação de resultados.
- Localize o
PreferenceFragment
da página que você está suprimindo. - Remova a
SearchIndexProvider
.
Validação
Para testar o potencial 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 dos apps > Configurações > Armazenamento > Remover dados
- Verifique se as configurações de destino aparecem na pesquisa.
A pesquisa pelo prefixo do título de uma configuração corresponderá a ele.
Esses testes robolétricos podem ser executados para validar a implementação dessa
recurso:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
O destino do build é: RunSettingsRoboTests