package Ġcom . map swith me . maps . scheduling Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . job . Job Info Ċ import Ġandroid . app . job . Job Scheduler Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġcom . crash ly t ics . android . Crash ly t ics Ċ import Ġcom . firebase . job dispatcher .* Ċ import Ġcom . google . android . gms . common . Connection Result Ċ import Ġcom . google . android . gms . common . Google Api Availability Ċ import Ġcom . map swith me . maps . M wm Application Ċ import Ġcom . map swith me . util . Utils Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠConnect ivity Job Scheduler ( context : ĠM wm Application ) Ġ: ĊĠĠĠ ĠConnect ivity Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Master Connectivity Listener : ĠConnect ivity Listener ĊĠĠĠ Ġprivate Ġfun Ġcreate Compat Job Scheduler ( context : ĠM wm Application ): ĠConnect ivity Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠGoogle Api Availability . getInstance (). is Google Play Services Available ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġis Available Ġ= Ġstatus Ġ== ĠConnection Result . SUCCESS ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Available ) ĠConnect ivity Listener Compat ( context ) Ġelse ĠConnect ivity Listener Stub () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Native Job Scheduler ( context : ĠM wm Application ): ĠConnect ivity Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNative Connectivity Listener ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlisten () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Master Connectivity Listener . listen () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġclass ĠNative Connectivity Listener Ġinternal Ġconstructor ( private Ġval ĠmContext : ĠContext ) Ġ: ĊĠĠĠĠĠĠĠ ĠConnect ivity Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Job Scheduler Ġ= ĠmContext . getSystem Service ( Context . JOB _ SCHEDUL ER _ SERVICE ) Ġas ĠJob Scheduler ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlisten () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= ĠComponent Name ( mContext , ĠNative JobService :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Id Ġ= ĠJob Id Map . getId ( Native JobService :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Info Ġ= ĠJob Info . Builder ( jobId , Ġcomponent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Job Info . NETWORK _ TYPE _ ANY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pers isted ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMinimum Latency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . HOUR S . to Millis ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS CH ED ULE _ PERIOD _ IN _ HOUR S . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Job Scheduler . schedule ( job Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠConnect ivity Listener Compat Ġinternal Ġconstructor ( context : ĠM wm Application ) Ġ: ĊĠĠĠĠĠĠĠ ĠConnect ivity Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Job Dispatcher : ĠFirebase Job Dispatcher ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlisten () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= ĠJob Id Map . getId ( Firebase JobService :: class . java ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexecution Window Start Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . HOUR S . to Seconds ( SCHED ULE _ PERIOD _ IN _ HOUR S . to Long ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġm Job Dispatcher . new Job Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTag ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Service ( Firebase JobService :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( Constraint . ON _ ANY _ NETWORK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Lifetime ( Lifetime . FORE VER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Trigger ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrigger . execution Window ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Window Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ execution Window Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Job Dispatcher . must Schedule ( job ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Job Dispatcher Ġ= ĠFirebase Job Dispatcher ( Google Play Driver ( context )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠConnect ivity Listener Stub Ġinternal Ġconstructor () Ġ: ĊĠĠĠĠĠĠĠ ĠConnect ivity Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlisten () Ġ{ Ġ/* ĠDo Ġnothing Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Play Ġservices Ġdoesn 't Ġexist Ġon " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġthe Ġdevice " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCrash ly t ics . log Exception ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS CH ED ULE _ PERIOD _ IN _ HOUR S Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( context : ĠContext ): ĠConnect ivity Job Scheduler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġcontext . application Context Ġas ĠM wm Application ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġapplication . connectivity Listener Ġas ĠConnect ivity Job Scheduler ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Master Connectivity Listener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Utils . is L ol lip op Or Later ) Ġcreate Native Job Scheduler ( context ) Ġelse Ġcreate Compat Job Scheduler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }