package Ġde . ht w dd . ht wd res den . ui . view models . fragments Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġde . ht w dd . ht wd res den . adapter . Me als Ċ import Ġde . ht w dd . ht wd res den . network . RestApi Ċ import Ġde . ht w dd . ht wd res den . ui . models . Me al Ċ import Ġde . ht w dd . ht wd res den . ui . models . Me al Header Item Ċ import Ġde . ht w dd . ht wd res den . ui . models . Me al Item Ċ import Ġde . ht w dd . ht wd res den . utils . extensions . dates Of Current Week Ċ import Ġde . ht w dd . ht wd res den . utils . extensions . dates Of Next Week Ċ import Ġde . ht w dd . ht wd res den . utils . extensions . format Ċ import Ġde . ht w dd . ht wd res den . utils . extensions . run In Thread Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . HashMap Ċ Ċ class ĠMe als ViewModel : ĠViewModel () Ġ{ ĊĊĠĠĠ Ġvar Ġtype : ĠString Ġ= Ġ" today " ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġrequest ( id : ĠInt ): ĠObservable < Me als > Ġ{ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdifferent Ġre uq est Ġfor Ġweek Ġtype ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" week " Ġ-> Ġrequest For Week ("$ id "). onError Return Ġ{ ĠMe als () Ġ} ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġme als Ġfor Ġcurrent Ġweek ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" next Week " Ġ-> Ġrequest For Week ("$ id ", Ġfalse ). onError Return Ġ{ ĠMe als () Ġ} ĠĠ Ġ// Ġrequest Ġme als Ġfor Ġnext Ġweek ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrequest For Day ("$ id "). onError Return Ġ{ ĠMe als () Ġ} ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġme als Ġfor Ġtoday ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest For Day ( id : ĠString ): ĠObservable < Me als > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRest Api ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. can teen Endpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Me als ( id , ĠDate (). format (" yyyy - MM - dd ")) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapi Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run In Thread ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . map Ġ{ Ġj Me al Ġ-> ĠMe al . from ( j Me al ) Ġ} Ġ} ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġjson Ġto Ġmodel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġme als Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Keys ĠĠĠĠĠ Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Values ĠĠĠ Ġ= Ġmutable Set Of < Me al >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme als . groupBy Ġ{ Ġit . category Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . sorted (). forEach Ġ{ Ġsorted Keys . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . forEach Ġ{ Ġv Ġ-> Ġv . forEach Ġ{ Ġsorted Values . add ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Keys Ġto Ġsorted Values ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgrouped Ġelements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠMe als () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair . first . forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Me al Header Item ( key , ĠDate (). format (" dd . ĠM MMM "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( pair . second . filter Ġ{ Ġit . category . contains ( key ) Ġ}. map Ġ{ ĠMe al Item ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġrequest For Week ( id : ĠString , Ġis Current Week : ĠBoolean Ġ= Ġtrue ): ĠObservable < Me als > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweeks Ġ= Ġif Ġ( is Current Week ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG regorian Calendar . getInstance ( Locale . GER MAN ). dates Of Current Week ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġdates Ġfor Ġcurrent Ġweek ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG regorian Calendar . getInstance ( Locale . GER MAN ). dates Of Next Week ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġdates Ġfor Ġnext Ġweek ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweeks ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcombine Ġall Ġrequested Ġdates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . format (" yyyy - MM - dd ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠRest Api . can teen Endpoint . get Me als ( id , Ġit ). run In Thread ( Schedulers . io ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . map Ġ{ Ġ Ġj Me als Ġ-> Ġj Me als . map Ġ{ Ġj Me al Ġ-> ĠMe al . from ( j Me al ) Ġ} Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġit . to Collection ( ArrayList ()) Ġas ĠArrayList < List < Me al >> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run In Thread () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġme als Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Map Ġ= ĠHashMap < Date , ĠList < Me al >>() ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmap Ġinto Ġhas Map Ġwith Ġk Ġ= Ġdate Ġand Ġv Ġ= Ġlist Ġof Ġme als ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġweeks . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Map [ week s [ i ]] Ġ= Ġme als [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Map . to Sorted Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġh Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠMe als () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġh Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Me al Header Item ( k . format (" EEEE "), Ġk . format (" dd . ĠM MMM "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( v . map Ġ{ ĠMe al Item ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }