/* Ċ Ġ* Ġ Ġ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 . core . sleep Manager Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġcom . ever note . android . job . Job Ċ import Ġcom . ever note . android . job . Job Manager Ċ import Ġcom . ever note . android . job . JobRequest Ċ 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 . prefs . User Session Manager Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . prefs . User Settings Manager Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . user Activity . User Activity Helper Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . user Activity . User Activity Type Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . user Activity . repo . User Activity Repo Ċ import Ġcom . ke val p ate l 2 1 0 6 . utils . Shared Prefs Provider Ċ import Ġcom . stand up . core . Core Ċ import Ġcom . stand up . core . activity Monitor . Activity Monitor Job Ċ import Ġcom . stand up . core . di . D agger Core Component Ċ import Ġcom . stand up . core . reminder . Notification Scheduler Job Ċ import Ġdagger . Lazy Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠK eval Ġon Ġ 1 9 / 0 1 / 1 8 . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ ke val p ate l 2 1 0 6 ]( https :// github . com / ke val p ate l 2 1 0 6 ) Ċ Ġ*/ Ċ internal Ġclass ĠSleep Mode Monitoring Job Ġ: ĠJob () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUnique Ġtag Ġfor Ġthe Ġjob Ġwhich Ġnot ifies Ġwhen Ġthe Ġsleep Ġmode Ġstarts . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS LEEP _ MODE _ START _ JOB _ TAG Ġ= Ġ" sleep _ mode _ start _ job _ tag " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUnique Ġtag Ġfor Ġthe Ġjob Ġwhich Ġnot ifies Ġwhen Ġthe Ġsleep Ġmode Ġends . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS LEEP _ MODE _ END _ JOB _ TAG Ġ= Ġ" sleep _ mode _ end _ job _ tag " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSchedule Ġthe Ġjob Ġto Ġnotify Ġwhen Ġthe Ġsleep Ġmode Ġstarts Ġand Ġwhen Ġthe Ġsleep Ġmode Ġends . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠHere Ġtwo Ġjobs Ġwill Ġbe Ġscheduled : ĊĠĠĠĠĠĠĠĠ Ġ* Ġ- ĠJob Ġwith Ġthe Ġtag Ġ[ SLEEP _ MODE _ START _ JOB _ TAG ] Ġwill Ġrun Ġthis Ġjob Ġwhenever Ġthe Ġsleep Ġmode ĊĠĠĠĠĠĠĠĠ Ġ* Ġstarts . ĠThis Ġjob Ġis Ġscheduled Ġto Ġrun Ġon Ġ[ Sleep Mode Monitoring Helper . get Sleep Start Timing ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġunix Ġmilliseconds . ĠAt Ġthis Ġtime , Ġjob Ġwill Ġcancel Job Ġthe Ġ[ Notification Scheduler Job ] Ġto Ġprevent ĊĠĠĠĠĠĠĠĠ Ġ* Ġstand Ġup Ġreminder Ġnotifications Ġand Ġ[ Activity Monitor Job ] Ġwill Ġstop Ġmonitoring Ġuser 's ĊĠĠĠĠĠĠĠĠ Ġ* Ġactivity . ĠThis Ġwill Ġset Ġ[ User Settings Manager . is Currently In Sleep Mode ]. ĊĠĠĠĠĠĠĠĠ Ġ* Ġ- ĠJob Ġwith Ġthe Ġtag Ġ[ SLEEP _ MODE _ END _ JOB _ TAG ] Ġwill Ġrun Ġthis Ġjob Ġwhenever Ġthe Ġsleep Ġmode ĊĠĠĠĠĠĠĠĠ Ġ* Ġends . ĠThis Ġjob Ġis Ġscheduled Ġto Ġrun Ġon Ġ[ Sleep Mode Monitoring Helper . get Sleep End Timing ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġunix Ġmilliseconds . ĠAt Ġthis Ġtime , Ġjob Ġwill Ġre schedule Ġthe Ġ[ Notification Scheduler Job ] Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġdisplay Ġreminder Ġnotifications Ġand Ġ[ Activity Monitor Job ] Ġto Ġstart Ġmonitoring Ġuser 's Ġactivity . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġwill Ġreset Ġ[ User Settings Manager . is Currently In Sleep Mode ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġjob Ġis Ġone - shot Ġjob Ġnot Ġperiodic . ĠAt Ġthe Ġend Ġof Ġ[ SLEEP _ MODE _ END _ JOB _ TAG ] Ġjob , Ġit ĊĠĠĠĠĠĠĠĠ Ġ* Ġwill Ġre schedule Ġthis Ġjob Ġfor Ġthe Ġnext Ġday . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠTHIS ĠMETHOD ĠIS ĠFOR ĠINTERNAL ĠUSE . ĠUSE Ġ[ com . stand up . core . Core . setUp Sleep Mode ] ĊĠĠĠĠĠĠĠĠ Ġ* ĠFOR ĠS CH ED UL ING ĠOR ĠCANCEL ING ĠTHE ĠJOB ĠBASE D ĠON ĠTHE ĠUSER ĠSET T INGS . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġboth Ġthe Ġjobs Ġare Ġscheduled Ġsuccessfully Ġelse Ġfalse . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ see ĠSleep Mode Monitoring Helper . get Sleep Start Timing ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ see ĠSleep Mode Monitoring Helper . get Sleep End Timing ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġschedule Job ( user Settings Manager : ĠUser Settings Manager ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsynchronized ( Activity Monitor Job :: class ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Arrange Ġthe ĠD ND Ġstart Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Sleep Job Time Ġ= ĠSleep Mode Monitoring Helper . get Sleep Start Timing ( user Settings Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart JobId Ġ= ĠJob Request . Builder ( SLEEP _ MODE _ START _ JOB _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Current ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Exact ( start Sleep Job Time Ġ- ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. schedule () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" ` Sleep Ġmode Ġbegin ` Ġmonitoring Ġjob Ġwith Ġid Ġ$ start JobId Ġscheduled Ġat Ġ$ start Sleep Job Time Ġmilliseconds .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Arrange Ġthe ĠD ND Ġend Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Sleep Job Time Ġ= ĠSleep Mode Monitoring Helper . get Sleep End Timing ( user Settings Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend JobId Ġ= ĠJob Request . Builder ( SLEEP _ MODE _ END _ JOB _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Current ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Exact ( end Sleep Job Time Ġ- ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. schedule () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" ` Sleep Ġmode Ġend ` Ġmonitoring Ġjob Ġwith Ġid Ġ$ end JobId Ġscheduled Ġafter Ġ$ end Sleep Job Time Ġmilliseconds .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ synchronized Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCancel Ġboth Ġ[ SLEEP _ MODE _ END _ JOB _ TAG ] Ġand Ġ[ SLEEP _ MODE _ START _ JOB _ TAG ] Ġjobs . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġcancel Scheduled Job () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJob Manager . instance (). cancel All For Tag ( SLEEP _ MODE _ END _ JOB _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJob Manager . instance (). cancel All For Tag ( SLEEP _ MODE _ START _ JOB _ TAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġnew Ġinstance Ġof Ġ[ Sleep Mode Monitoring Job ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun ĠgetInstance () Ġ= ĠSleep Mode Monitoring Job () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġuser Settings Manager : ĠUser Settings Manager ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġshared Prefs Provider : ĠShared Prefs Provider ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġuser Session Manager : ĠUser Session Manager ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġcore : ĠLazy < Core > ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġuser Activity Repo : ĠUser Activity Repo ĊĊĠĠĠ Ġoverride Ġfun Ġon Run Job ( params : ĠParams ): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Inject Ġdependencies . ĊĠĠĠĠĠĠĠ ĠD agger Core Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Component ( Base Application . getApplication Component ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this @ Sleep Mode Monitoring Job ) ĊĊĠĠĠĠĠĠĠ Ġ// Check Ġif Ġthe Ġjob Ġshould Ġbe Ġrunning ? ĊĠĠĠĠĠĠĠ Ġif Ġ(! Sleep Mode Monitoring Helper . should Running Job ( user Session Manager )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Scheduled Job () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . SUCCESS ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( params . tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS LEEP _ MODE _ START _ JOB _ TAG Ġ-> Ġsleep Mode Started () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS LEEP _ MODE _ END _ JOB _ TAG Ġ-> Ġsleep Mode Ended () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Invalid Ġtag : Ġ${ params . tag }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult . SUCCESS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsleep Mode Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġcore . get (). refresh () ĊĊĠĠĠĠĠĠĠ ĠSleep Mode Start Notification . notify ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġsleep Mode Ended () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Insert Ġthe Ġfake Ġstarting Ġactivity ĊĠĠĠĠĠĠĠ Ġuser Activity Repo . insert New User Activity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Activity Ġ= ĠUser Activity Helper . create Local User Activity ( User Activity Type . S IT TING ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Merge With Previous Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ). observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Turn Ġoff Ġsleep Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore . get (). refresh () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Schedule Ġthe Ġnext Ġsleep Ġmonitoring Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Job ( user Settings Manager ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Dismiss Ġthe Ġsleep Ġmode Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSleep Mode Start Notification . cancel ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Error . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// NO ĠOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it . printStackTrace (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ