package Ġnl . ng ti . andro scope . common Ċ Ċ import Ġandroid . content . Uri Matcher Ċ import Ġandroidx . core . net . to Uri Ċ Ċ internal Ġclass ĠUrl Matcher < T > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmatcher Ġ= ĠUri Matcher ( Uri Matcher . NO _ MATCH ) ĊĠĠĠ Ġprivate Ġval Ġhandlers Ġ= ĠArrayList < T >() ĊĊĠĠĠ Ġfun Ġbuild ( rootPath : ĠString , Ġblock : ĠBuilder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( rootPath . isNotBlank ()) Ġ{ Ġ" Invalid Ġroot Ġpath : Ġ$ rootPath " Ġ} ĊĠĠĠĠĠĠĠ Ġrequire (! rootPath . contains ('/ ')) Ġ{ Ġ" Root Ġpath Ġcannot Ġcontain Ġany Ġ'/ '" Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠBuilder ( rootPath ) ĊĠĠĠĠĠĠĠ Ġblock ( builder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġhandler Ġassociated Ġwith Ġthis Ġuri Ġ( if Ġavailable ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( url : ĠString ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġmatcher . match ( url . to Uri ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( code Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhandlers [ code ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġan Ġ[ handler ] Ġfor Ġthe Ġspecified Ġ[ path ]. ĠThe Ġsame Ġrules Ġapply Ġas Ġin ĊĠĠĠĠ Ġ* Ġ[ Uri Matcher . add URI ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd ( rootPath : ĠString , Ġpath : ĠString ?, Ġhandler : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġhandlers . size ĊĠĠĠĠĠĠĠ Ġmatcher . add URI ( rootPath , Ġpath , Ġcode ) ĊĠĠĠĠĠĠĠ Ġhandlers Ġ+= Ġhandler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroot Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġparent Path : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Sub Path ( path : ĠString , Ġblock : ĠBuilder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire (! path . contains ('/ ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Path Ġmust Ġnot Ġcontain Ġany Ġ'/ '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Tree Builder Ġ= ĠBuilder ( rootPath , Ġ"$ parent Path $ path /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( sub Tree Builder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd ( path : ĠString , Ġhandler : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire (! path . contains ('/ ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Use Ġadd Sub Path Ġmethod Ġto Ġcreate Ġurls Ġwith Ġmultiple Ġsub - paths " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( rootPath , Ġ"$ parent Path $ path ", Ġhandler ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ