package Ġcom . hl . utils . navigation Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Nav Deep Link Ċ import Ġandroidx . navigation . Nav Destination Ċ import Ġcom . hl . utils . Reflect Helper Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* Ġ@ Author Ġ Ġ å¼ł ç£ Ĭ Ġ Ġon ĠĠ 2 0 2 1 / 0 3 / 1 6 Ġat Ġ 1 8 : 2 4 Ċ Ġ* ĠEmail : Ġ 9 1 3 3 0 5 1 6 0 @ qq . com Ċ Ġ*/ Ċ Ċ const Ġval ĠTAG Ġ= Ġ" Nav Controller " Ċ Ċ fun ĠNav Controller . navigate From Url ( url : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( url ) ĊĠĠĠ Ġif Ġ( uri . scheme Ġ== Ġ" http " Ġ|| Ġuri . scheme Ġ== Ġ" https ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Uri Ġ= ĠUri . parse ("${ uri . scheme } :// url =${ uri }") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . graph . has Deep Link ( new Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Match Deep Link For Url ( this , Ġnew Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . navigate ( new Uri ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" navigate From Url : Ġ æľª æī¾åĪ° ä¸İ Ġ$ new Uri Ġ æīĢ åĮ¹éħį çļĦ æ·± éĵ¾æİ¥ é¡µéĿ¢ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġif Ġ( uri . scheme Ġ== Ġ" native ") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . graph . has Deep Link ( uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . navigate ( uri ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" navigate From Url : Ġ æľª æī¾åĪ° ä¸İ Ġ$ uri Ġ æīĢ åĮ¹éħį çļĦ æ·± éĵ¾æİ¥ é¡µéĿ¢ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġhandle Match Deep Link For Url ( nav Controller : ĠNav Controller , Ġnew Uri : ĠUri ) Ġ{ ĊĠĠĠ Ġ// å°Ĩ èĩª èº« å¯¼èĪª ä»¥åıĬ æīĢæľī åŃĲ ĠNav Destination Ġæ·»åĬł åĪ° åĪĹè¡¨ ä¸Ń Ġ---- -> Ġ è¿ĩæ»¤ åĩº åĮ¹éħį ç»Ļ å®ļ æ·± éĵ¾æİ¥ çļĦ ĠNav Destination ĊĠĠĠ Ġval Ġnav Destination List Ġ= Ġmutable ListOf < Nav Destination >( nav Controller . graph ) ĊĠĠĠ Ġnav Controller . graph . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Destination List . add ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġnav Destination List . filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . has Deep Link ( new Uri ) ĊĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeep Links Ġ= ĠReflect Helper ( Nav Destination :: class . java ). getFile d Value < ArrayList < Nav Deep Link >>( it , Ġ" m Deep Links ") ĊĠĠĠĠĠĠĠ Ġdeep Links ?. on Each Ġ{ Ġnav Deep Link Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Deep Link . uri Pattern ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreflect Helper Ġ= ĠReflect Helper ( Nav Deep Link :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . startsWith (" http :// ") Ġ-> ĠPattern . compile (""" ^\ Q http :// url =\ E (. + ?) """) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . startsWith (" https :// ") Ġ-> ĠPattern . compile (""" ^\ Q https :// url =\ E (. + ?) """) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreflect Helper . getFile d Value < Pattern >( nav Deep Link , Ġ" m Pattern ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. also Ġ{ Ġpattern Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreflect Helper . set File d Value ( nav Deep Link , Ġ" m Pattern ", Ġpattern ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }