Criar classes DeepLinkMatcher personalizadas

Se os correspondentes fornecidos não forem suficientes para seus casos de uso, você poderá criar seus próprios correspondentes estendendo a classe DeepLinkMatcher.

Ao estender DeepLinkMatcher<T, R>, é necessário especificar dois argumentos de tipo: o tipo de chave de navegação de destino (T : Any) e o tipo de resultado da correspondência (R : DeepLinkMatcher.MatchResult<T>). Se o correspondente não precisar de classificação de resultados personalizados ou metadados extras, use DeepLinkMatcher.MatchResult<T> como o segundo argumento de tipo.

Por exemplo, confira uma implementação básica de um TelDeepLinkMatcher que oferece suporte a URIs tel (como tel:5550100). Como as UR1s tel são opacas, UriDeepLinkMatcher não oferece suporte a elas:

Classificar classes MatchResult personalizadas

Se houver uma maneira significativa de comparar os resultados da correspondência do seu correspondente personalizado, você deve estender DeepLinkMatcher.MatchResult e substituir o compareTo método para classificar os resultados.

Ao criar uma subclasse MatchResult personalizada, atualize a declaração de classe do correspondente para especificar essa subclasse como o segundo parâmetro de tipo R (como class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>()). Isso permite que os autores da chamada acessem as propriedades de resultado personalizadas sem conversão implícita não verificada.

Por exemplo, para oferecer suporte à correspondência de padrões de caracteres curinga em TelDeepLinkMatcher, você pode implementar um TelMatchResult para garantir que as correspondências exatas sejam classificadas mais alto do que as correspondências de caracteres curinga. Se o correspondente estiver encapsulado em withBackStack, desembrulhe WrappedMatchResult antes de comparar para que a precedência seja avaliada em relação ao resultado da correspondência subjacente: