package Ġcom . gar pr . android . features . deep Link Ċ Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . gar pr . android . data . models . Endpoint Ċ import Ġcom . gar pr . android . data . models . Region Ċ import Ġcom . gar pr . android . features . common . view Models . Base ViewModel Ċ import Ġcom . gar pr . android . features . home . Home Tab Ċ import Ġcom . gar pr . android . misc . Schedulers Ċ import Ġcom . gar pr . android . misc . Tim ber Ċ import Ġcom . gar pr . android . repositories . Region Repository Ċ import Ġcom . gar pr . android . repositories . Regions Repository Ċ import Ġokhttp 3 . internal . to ImmutableList Ċ import Ġjava . util . Collections Ċ Ċ class ĠDeep Link ViewModel ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġregion Repository : ĠRegion Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġregions Repository : ĠReg ions Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġs chedulers : ĠS chedulers , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtim ber : ĠTim ber Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġinitialized : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġurl : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġ_ breadcrumbs LiveData Ġ= ĠMutable LiveData < List < Breadcrumb >>() ĊĠĠĠ Ġval Ġbreadcrumb s LiveData : ĠLive Data < List < Breadcrumb >> Ġ= Ġ_ breadcrumbs LiveData ĊĊĠĠĠ Ġprivate Ġval Ġ_ network Error LiveData Ġ= ĠMutable LiveData < Unit >() ĊĠĠĠ Ġval Ġnetwork Error LiveData : ĠLive Data < Unit > Ġ= Ġ_ network Error LiveData ĊĊĠĠĠ Ġprivate Ġval Ġ_ url ParseError LiveData Ġ= ĠMutable LiveData < Unit >() ĊĠĠĠ Ġval Ġurl ParseError LiveData : ĠLive Data < Unit > Ġ= Ġ_ url ParseError LiveData ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Deep Link ViewModel " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP LAY ERS Ġ= Ġ" players " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠR ANK INGS Ġ= Ġ" rank ings " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTO UR NA MENTS Ġ= Ġ" tournament s " ĊĊĠĠĠĠĠĠĠ Ġ// ĠP layers ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . gar pr . com /#/ nor cal / players ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . not gar pr . com /#/ new j ersey / players ĊĊĠĠĠĠĠĠĠ Ġ// ĠRank ings ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . gar pr . com /#/ nor cal / rank ings ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . not gar pr . com /#/ ny c / rank ings ĊĊĠĠĠĠĠĠĠ Ġ// Ġap ollo Ġi ii ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . not gar pr . com /#/ ny c / tournament s / 5 8 c 7 2 c 8 0 1 d 4 1 c 8 2 5 9 fa 1 f 8 bf ĊĊĠĠĠĠĠĠĠ Ġ// ĠNor cal ĠValid ated Ġ 2 ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . gar pr . com /#/ nor cal / tournament s / 5 8 a 0 0 5 1 4 d 2 9 9 4 e 4 d 0 f 2 e 2 5 a 6 ĊĊĠĠĠĠĠĠĠ Ġ// Ġrub icon Ġ 1 2 ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . not gar pr . com /#/ ch icago / tournament s / 5 7 9 8 3 9 b 0 e 5 9 2 5 7 3 cf 1 8 4 5 f 4 6 ĊĊĠĠĠĠĠĠĠ Ġ// ĠS FAT ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . gar pr . com /#/ nor cal / players / 5 8 8 8 5 2 e 8 d 2 9 9 4 e 3 bb fa 5 2 d 8 8 ĊĊĠĠĠĠĠĠĠ Ġ// ĠSw ed ish ĠDel ight ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . not gar pr . com /#/ ny c / players / 5 4 5 b 2 4 0 b 8 ab 6 5 f 7 a 9 5 f 7 4 9 4 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprivate Ġfun Ġcreate Players Breadcrumb s ( breadcrumbs : ĠMutable List < Breadcrumb >, Ġregion : ĠRegion , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Region : ĠBoolean , Ġsplits : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Home ()) ĊĊĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Players ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ= Ġif Ġ( same Region ) Ġnull Ġelse Ġregion ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( splits . size Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer Id Ġ= Ġsplits [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( player Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Player ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ= Ġif Ġ( same Region ) Ġnull Ġelse Ġregion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Id ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprivate Ġfun Ġcreate Rank ings Breadcrumb s ( breadcrumbs : ĠMutable List < Breadcrumb >, Ġregion : ĠRegion , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Region : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( same Region ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Home ( initial Position Ġ= ĠHome Tab . HOME )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Home ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Rank ings ( region Ġ= Ġregion )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprivate Ġfun Ġcreate Tournament s Breadcrumb s ( breadcrumbs : ĠMutable List < Breadcrumb >, Ġregion : ĠRegion , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Region : ĠBoolean , Ġsplits : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( same Region ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Home ( initial Position Ġ= ĠHome Tab . TO UR NA MENTS )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Home ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Tournament s ( region Ġ= Ġregion )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( splits . size Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtournament Id Ġ= Ġsplits [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tournament Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbreadcrumb s . add ( Breadcrumb . Tournament ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ= Ġif Ġ( same Region ) Ġnull Ġelse Ġregion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtournament Id Ġ= Ġtournament Id ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprivate Ġfun Ġcreate Breadcrumb s ( regions : ĠList < Region >): ĠList < Breadcrumb > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Region Ġ= Ġregion Repository . region ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġthis . url ĊĊĠĠĠĠĠĠĠ Ġif Ġ( url . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire ( regions . isNotEmpty ()) Ġ{ Ġ" regions Ġcan 't Ġbe Ġempty " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= ĠEndpoint . values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġendpoint Ġ-> Ġurl . startsWith ( endpoint . basePath ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġurl . substring ( endpoint . get Web Path (). length , Ġurl . length ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( path . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsplits Ġ= Ġpath . split ("/") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( splits . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġregion Id Ġ= Ġsplits [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( region Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsame Region Ġ= Ġregion Id . equals ( current Region . id , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġregions . find Ġ{ Ġit . id . equals ( region Id , Ġignore Case Ġ= Ġtrue ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( same Region Ġ&& Ġsplits . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( region Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtim ber . w ( TAG , Ġ" unable Ġto Ġfind Ġa Ġregion Ġwith ĠID Ġ\"$ region Id \" .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbreadcrumb s Ġ= Ġmutable ListOf < Breadcrumb >() ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġsplits [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( PLAY ERS . equals ( page , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Players Breadcrumb s ( breadcrumbs , Ġregion , Ġsame Region , Ġsplits ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( RAN K INGS . equals ( page , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Rank ings Breadcrumb s ( breadcrumbs , Ġregion , Ġsame Region ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( TO UR NA MENTS . equals ( page , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Tournament s Breadcrumb s ( breadcrumbs , Ġregion , Ġsame Region , Ġsplits ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCollections . unmodifiable List ( breadcrumbs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Breadcrumb s () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( initialized ) Ġ{ Ġ" initialize () Ġhasn 't Ġbeen Ġcalled !" Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( url . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ url ParseError LiveData . post Value ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( regions Repository . get Regions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregions Ġ= Ġit . regions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Is Instance < Region >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to ImmutableList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( regions . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ network Error LiveData . post Value ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreadcrumb s Ġ= Ġcreate Breadcrumb s ( regions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ breadcrumbs LiveData . post Value ( breadcrumbs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtim ber . e ( TAG , Ġ" Error Ġfetching Ġregions ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ network Error LiveData . post Value ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinitialize ( url : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . url Ġ= Ġurl ?. trim () ĊĠĠĠĠĠĠĠ Ġinitialized Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠB readcrumb Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclass ĠHome ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Position : ĠHome Tab ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠB readcrumb () ĊĊĠĠĠĠĠĠĠ Ġclass ĠPlayer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion : ĠRegion ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Id : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠB readcrumb () ĊĊĠĠĠĠĠĠĠ Ġclass ĠP layers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion : ĠRegion ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠB readcrumb () ĊĊĠĠĠĠĠĠĠ Ġclass ĠRank ings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion : ĠRegion ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠB readcrumb () ĊĊĠĠĠĠĠĠĠ Ġclass ĠTo urnament ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion : ĠRegion ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtournament Id : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠB readcrumb () ĊĊĠĠĠĠĠĠĠ Ġclass ĠTo urnament s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion : ĠRegion ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠB readcrumb () ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ