Criar classes DeepLinkMatcher personalizadas

Se os comparadores fornecidos não forem suficientes para seus casos de uso, crie os seus 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 de correspondência (R : DeepLinkMatcher.MatchResult<T>). Se o matcher não precisar de classificação de resultados personalizada ou metadados extras, use DeepLinkMatcher.MatchResult<T> como o segundo argumento de tipo.

Por exemplo, veja uma implementação básica de um TelDeepLinkMatcher que oferece suporte a URIs tel (como tel:5550100). Como os URIs tel são opacos, o UriDeepLinkMatcher não oferece suporte a eles:

Classificar classes personalizadas de MatchResult

Se houver uma maneira significativa de comparar os resultados de correspondência do seu comparador personalizado, estenda DeepLinkMatcher.MatchResult e substitua o método compareTo 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 de chamada acessem as propriedades de resultado personalizadas sem downcasting não verificado.

Por exemplo, para oferecer suporte à correspondência de padrões de caracteres curinga em TelDeepLinkMatcher, é possível implementar um TelMatchResult para garantir que as correspondências exatas tenham uma classificação mais alta do que as correspondências de caracteres curinga. Se o matcher estiver encapsulado em withBackStack, remova o encapsulamento de WrappedMatchResult antes de comparar para que a precedência seja avaliada em relação ao resultado de correspondência: