/* Ċ Ġ* Ġ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 . ah med ab del me ged . firestore . adapter . Fire store Doc 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 .* Ċ import Ġjava . lang . Exception Ċ Ċ class ĠHistory ViewModel ( ĊĠĠĠĠĠĠĠ Ġval Ġfire : ĠFirebase Fire store , ĊĠĠĠĠĠĠĠ Ġval Ġpref : ĠSharedPreferences ) Ġ: ĠViewModel (), ĠFire store Doc Adapter Ġ{ ĊĊĠĠĠ Ġvar Ġitem Added : ĠWrapper Change < Content Item >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ items List Ġ= ĠMutable LiveData < ArrayList < Content Item >>() ĊĠĠĠ Ġval Ġitems List : ĠLive Data < ArrayList < Content Item >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ items List ĊĊĠĠĠ Ġprivate Ġvar Ġ_ readyState Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġready State : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ readyState ĊĊĠĠĠ Ġprivate Ġvar Ġbook marks : ĠMutable Map < String , String > Ġ= Ġmutable Map Of () ĊĊĊĠĠĠ Ġ// ------------------------------------------------ --------------- ĊĠĠĠ Ġoverride Ġvar Ġ_ m Registration : ĠListener Registration ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġ_ m Query Doc : ĠDocument Reference ? Ġ= Ġnull ĊĊĊĠĠĠ Ġval Ġuid Ġ= Ġpref . getString ( Constants (). UID ," not aval id uid ") ĊĠĠĠ Ġprivate Ġval Ġquery Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfire . collection (" users "). document ( uid ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġquery 2 Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfire . collection (" contents ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// will Ġbe Ġgreat Ġto Ġimplement Ġalso Ġan Ġoffline Ġman ag ment Ġof Ġbook marks ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġ_ readyState . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ_ items List . value Ġ= ĠArrayList ( 0 ) ĊĠĠĠĠĠĠĠ Ġset Query ( query ) ĊĠĠĠĠĠĠĠ Ġ_ readyState . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Document Modified ( change : ĠDocument Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange . get (" history ") ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew bk : ĠMutable Map < String , String > Ġ= Ġit Ġas ĠMutable Map < String , String > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( new bk Ġ!= Ġbook marks ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks Ġ= Ġnew bk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery 2 . document ( it ). get (). add On Success Listener Ġ{ Ġdocument Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa : ĠContent Item ? Ġ= Ġdocument Snapshot . toObject ( Content Item :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . content Id Ġ= Ġdocument Snapshot . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ items List . value ?. add ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ_ items List . value ?. indexOf ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Added Ġ= ĠWrapper Change ( index !! , Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ items List . value Ġ= Ġ_ items List . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Tag . History ViewModel ", Ġ" Cast Ġgone Ġbad ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Tag . History ViewModel ", Ġ" First Ġlevel Ġexception Ġ${ exception }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// prob ab ily Ġa Ġdeleted Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery . update (" history ", bookmarks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} catch ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Tag . History ViewModel "," Cast Ġmutable Ġhistory Ġgone Ġbad ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdone List (){ ĊĠĠĠĠĠĠĠ Ġitem Added Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }