/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . navigation . viewModel Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . ah med ab del me ged . firestore . adapter . Fire store Adapter Ċ import Ġcom . example . android . navigation . models . Category Item Ċ import Ġcom . example . android . navigation . models . Content Item Ċ import Ġcom . example . android . navigation . util . Constants Ċ import Ġcom . example . android . navigation . util . Wrapper Change Ċ import Ġcom . google . firebase . firestore . Document Change Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . google . firebase . firestore . Listener Registration Ċ import Ġcom . google . firebase . firestore . Query Ċ Ċ class ĠHot ViewModel ( ĊĠĠĠĠĠĠĠ Ġval Ġfire : ĠFirebase Fire store , ĊĠĠĠĠĠĠĠ Ġval Ġpref : ĠSharedPreferences ) Ġ: ĠViewModel (), ĠFire store Adapter Ġ{ ĊĊĠĠĠ Ġ// this Ġone Ġwill Ġbe Ġfrom ĠDB ĊĠĠĠ Ġoverride Ġvar Ġitem Added : ĠWrapper Change < Content Item >? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġitem Modified : ĠWrapper Change < Content Item >? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġitem Removed : ĠWrapper Change < Content Item >? Ġ= Ġnull ĊĠĠĠ Ġ// top Ġcontent Ġsuggested Ġ( hard Ġinfl ated ) ĊĠĠĠ Ġvar Ġtop Item : ĠContent Item Ġ= ĠContent Item () ĊĠĠĠ Ġ// array Ġdi Ġ 4 Ġelement i Ġcon Ġle Ġcategor ie Ġprefer ite Ġ( hard Ġinfl ated ) ĊĠĠĠ Ġvar Ġcat List : ĠArrayList < Category Item > Ġ= ĠArrayList ( 0 ) ĊĠĠĠ Ġ// top Ġcontents Ġsuggested Ġfor Ġyou ĊĠĠĠ Ġoverride Ġvar Ġ_ items List Ġ= ĠMutable LiveData < ArrayList < Content Item >>() ĊĊĠĠĠ Ġprivate Ġvar Ġ_ readyState Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġready State : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ readyState ĊĊĠĠĠ Ġprivate Ġval Ġ_ navigate To Category Ġ= ĠMutable LiveData < Category Item ?> () ĊĠĠĠ Ġval Ġnavigate To Category : ĠLive Data < Category Item ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ navigate To Category ĊĊĠĠĠ Ġprivate Ġval Ġ_ navigate To Content Ġ= ĠMutable LiveData < Content Item ?> () ĊĠĠĠ Ġval Ġnavigate To Content : ĠLive Data < Content Item ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ navigate To Content ĊĊĠĠĠ Ġ// ------------------------------------------------ --------------- ĊĠĠĠ Ġoverride Ġvar Ġ_ m Registration : ĠListener Registration ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġ_ m Query : ĠQuery ? Ġ= Ġnull ĊĊĊĠĠĠ Ġprivate Ġval Ġquery Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfire . collection (" contents "). orderBy (" view Count "). limit ( 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġquery 2 Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfire . collection (" categories "). document (" M ate matic a "). collection (" sub ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġquery 3 Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfire . collection (" contents "). orderBy (" view Count "). limit ( 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ readyState . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ_ navigate To Category . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ items List . value Ġ= ĠArrayList ( 0 ) ĊĠĠĠĠĠĠĠ Ġ// wrap Ġrequ st Ġand Ġon Ġdone Ġset Ġready ĊĠĠĠĠĠĠĠ Ġset Query ( query 3 ) ĊĠĠĠĠĠĠĠ Ġinit Top And Categories () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Top And Categories (){ ĊĠĠĠĠĠĠĠ Ġquery . get (). add On Success Listener Ġ{ Ġquery Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa : ĠContent Item ? Ġ= Ġquery Snapshot . documents . get ( 0 ). toObject ( Content Item :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Item Ġ= Ġa !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Tag . Hot ViewModel "," Cast Ġgone Ġbad ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener { exception -> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Tag . Hot ViewModel "," First Ġlevel Ġfirst Ġexception Ġ${ exception }") ĊĠĠĠĠĠĠĠ Ġ}. add On Complete Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery 2 . get (). add On Success Listener Ġ{ Ġquery Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Snapshot . documents . forEach Indexed Ġ{ Ġidx , Ġdocument Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa : ĠCategory Item ? Ġ= Ġdocument Snapshot . toObject ( Category Item :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcat List . add ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Tag . Hot ViewModel "," Cast Ġgone Ġbad ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ readyState . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener { exception -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Tag . Hot ViewModel "," First Ġlevel Ġsecond Ġexception Ġ${ exception }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgo To Category ( c : ĠCategory Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate To Category . value Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdone Go To Category () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate To Category . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgo To Content ( c : ĠContent Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate To Content . value Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdone Go To Content () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate To Content . value Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }