/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 8 ĠK eval ĠP ate l . Ċ Ġ* Ċ Ġ* Ġ Ġ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 . stand up . app . dashboard Ċ Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . support . annotation . Visible ForTesting Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . base . Base Application Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . base . arch . Base ViewModel Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . base . arch . Callback Event Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . base . arch . ErrorMessage Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . user Activity . Daily Activity Summary Ċ import Ġcom . ke val p ate l 2 1 0 6 . utils . annotations . Only ForTesting Ċ import Ġcom . ke val p ate l 2 1 0 6 . utils . annotations . ViewModel Ċ import Ġcom . ke val p ate l 2 1 0 6 . utils . r xb us . Rx Bus Ċ import Ġcom . stand up . app . dashboard . di . D agger Dashboard Component Ċ import Ġcom . stand up . app . dashboard . repo . Dashboard Repo Ċ import Ġcom . stand up . core . Core Config Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠK eval Ġon Ġ 2 1 / 1 2 / 1 7 . Ċ Ġ* Ġ[ ViewModel ] Ġfor Ġthe Ġ[ Dashboard Fragment ]. Ċ Ġ* Ċ Ġ* Ġ@ author Ġ< a Ġhref =" https :// github . com / ke val p ate l 2 1 0 6 "> ke val p ate l 2 1 0 6 </ a > Ċ Ġ* Ġ@ see ĠDashboard Fragment Ċ Ġ*/ Ċ @ ViewModel ( Dashboard Fragment :: class ) Ċ internal Ġclass ĠDashboard ViewModel Ġ: ĠBase ViewModel Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification Even Disposable : ĠDis posable ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Dashboard Repo ] Ġfor Ġloading Ġand Ġprocessing Ġthe Ġdata Ġfrom Ġthe Ġdatabase Ġand Ġnetwork . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠDashboard Repo ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġdashboard Repo : ĠDashboard Repo ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrivate Ġconstructor Ġto Ġadd Ġthe Ġcustom Ġ[ Dashboard Repo ] Ġfor Ġtesting . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdashboard Repo ĠAdd Ġcustom Ġ[ Dashboard Repo ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġ@ Only ForTesting ĊĠĠĠ Ġconstructor ( dashboard Repo : ĠDashboard Repo ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dashboard Repo Ġ= Ġdashboard Repo ĊĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠZero Ġparameter Ġconstructor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ ĠD agger Dashboard Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Component ( Base Application . getApplication Component ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this @ Dashboard ViewModel ) ĊĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Register Ġto Ġlisten Ġnotification Ġschedule Ġevents ĊĠĠĠĠĠĠĠ Ġnotification Even Disposable Ġ= ĠRx Bus . register ( Core Config . TAG _ RX _ NOTIFICATION _ TIME _ UPDATED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġload Next Notification Time () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġnotification Even Disposable . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Mutable LiveData ] Ġfor Ġ[ Daily Activity Summary ]. ĠUI Ġcontroller Ġcan Ġobserve Ġthis Ġproperty Ġto ĊĠĠĠĠ Ġ* Ġget Ġdaily Ġsummary Ġfor Ġcurrent Ġday . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠDaily Activity Summary ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtoday Summary Ġ= ĠMutable LiveData < Daily Activity Summary >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Mutable LiveData ] Ġfor Ġ[ ErrorMessage ]. ĠUI Ġcontroller Ġcan Ġobserve Ġthis Ġproperty Ġto ĊĠĠĠĠ Ġ* Ġget Ġnotify Ġwhenever Ġany Ġerror Ġoccurs Ġwhile Ġloading Ġthe Ġsummary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠError Message ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtoday Summary Error Callback Ġ= ĠMutable LiveData < ErrorMessage >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Callback Event ] Ġto Ġnotify Ġwhenever Ġsummary Ġloading Ġstarts Ġ. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCallback Event ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtoday Summary Start Loading Ġ= ĠCallback Event () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Mutable LiveData ] Ġto Ġstore Ġthe Ġtext Ġto Ġdisplay Ġfor Ġthe Ġnext Ġreminder . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġnext Reminder Status Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġinternal Ġfun Ġload Next Notification Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġnext Reminder Status . value Ġ= Ġdashboard Repo . getNext Reminder Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġsummary Ġoff Ġtoday 's Ġdaily Ġactivity . ĠThis Ġis Ġan Ġasynchronous Ġmethod Ġwhich Ġreads Ġdatabase ĊĠĠĠĠ Ġ* Ġand Ġprocess Ġthe Ġdata Ġto Ġgenerate Ġstats Ġon Ġthe Ġbackground Ġthread Ġand Ġdeliver Ġresult Ġto Ġthe ĊĠĠĠĠ Ġ* Ġmain Ġthread . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUI Ġcontroller Ġcan Ġobserve Ġ[ today Summary ] Ġto Ġ Ġget Ġnotify Ġwhenever Ġthe Ġsummary Ġgets Ġupdated . ĊĠĠĠĠ Ġ* ĠThis Ġsummary Ġcontains Ġsit ting Ġand Ġstand ing Ġtime Ġstatistics Ġbased Ġon Ġthe Ġuser Ġactivity Ġfrom ĊĠĠĠĠ Ġ* Ġ 1 2 Ġam Ġof Ġthe Ġcurrent Ġday . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWh enever Ġthis Ġmethod Ġstarts Ġloading Ġsummary Ġstats Ġ[ today Summary Start Loading ] Ġwill Ġbe Ġset Ġto Ġtrue . ĊĠĠĠĠ Ġ* ĠIf Ġany Ġerror Ġoccurs Ġwhile Ġexec rating Ġsummary , Ġ[ today Summary Error Callback ] Ġwill Ġbe Ġcalled . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠDaily Activity Summary ĊĠĠĠĠ Ġ* Ġ@ see ĠDashboard Repo . get Today Summary ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Tod ays Summary () Ġ{ ĊĠĠĠĠĠĠĠ Ġdashboard Repo . get Today Summary () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday Summary Start Loading . dispatch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday Summary Error Callback . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( today Summary . value Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday Summary Error Callback . value Ġ= ĠError Message ( R . string . dashboard _ today _ summary _ not _ fo unt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday Summary . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Error Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday Summary Error Callback . value Ġ= ĠError Message ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ