package Ġcom . qu ix om . apps . device info . service Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . content . Intent Filter Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroidx . annotation . Nullable Ċ import Ġcom . qu ix om . apps . device info . utilities . Battery Stats Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġak if Ġon Ġ 1 0 / 6 / 1 7 . Ċ Ġ*/ Ċ abstract Ġclass ĠB attery Time Service : ĠService () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLists Ġto Ġstore Ġthe Ġtracked Ġdata Ġfor Ġcalculating Ġch arging Ġand Ġdis ch arging Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġbattery Dis ch arging Times : ĠArrayList < Long >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbattery Ch arging Times : ArrayList < Long >? Ġ= Ġnull ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġbroadcast Ġreceiver Ġfor Ġtracking Ġthe Ġlevel Ġchanges Ġand Ġthe Ġbattery Ġusage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġlevel Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġold Dis charge Level Ġ= Ġ 1 0 1 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġold Charge Level Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġold Dis charge Time : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġold Charge Time : ĠLong Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbattery Stats Ġ= ĠB attery Stats ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch arging Ġ= Ġbattery Stats . is Ch arging () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel Ġ= Ġbattery Stats . get Level () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ch arging Ġ&& Ġlevel Ġ<= Ġ 1 0 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level Ġ< Ġold Dis charge Level ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Dis charge Time Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Time Ġ= Ġtime Ġ- Ġold Dis charge Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Dis ch arging Times !!. add ( diff Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Dis ch arging Text ( level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Calcul ating Dis ch arging Time () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Dis charge Time Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Dis charge Level Ġ= Ġlevel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Ch arging Times !!. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Charge Level Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Charge Time Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch arging ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Charge Level Ġ< Ġlevel ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Charge Time Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Time Ġ= Ġtime Ġ- Ġold Charge Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Ch arging Times !!. add ( diff Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Ch arging Text ( level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Calcul ating Ch arging Time () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Charge Time Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Charge Level Ġ= Ġlevel ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level Ġ== Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Full Battery () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Dis ch arging Times !!. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Dis charge Level Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Dis charge Time Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġcalled Ġwhen Ġthe Ġch arging Ġtime Ġis Ġcalculated . ĊĠĠĠĠ Ġ* ĠThe Ġ{@ param Ġhours } Ġand Ġ{@ param Ġmins } Ġremaining Ġfor Ġfull Ġcharge . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġon Ch arging Time Publish ( hours : ĠInt , Ġmins : ĠInt ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġcalled Ġwhen Ġthe Ġch arging Ġtime Ġis Ġbeing Ġcalculated . ĊĠĠĠĠ Ġ* ĠAny Ġstatus Ġtext Ġindicating Ġthat Ġ" ch arging Ġtime Ġis Ġbeing Ġcalculated " Ġcan Ġbe Ġused Ġhere . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġon Calcul ating Ch arging Time () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġcalled Ġwhen Ġthe Ġch arging Ġtime Ġis Ġcalculated . ĊĠĠĠĠ Ġ* ĠThe Ġ{@ param Ġdays } Ġ, Ġ{@ param Ġhours } Ġand Ġ{@ param Ġmins } Ġremaining Ġfor Ġthe Ġbattery Ġto Ġdrain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġon Dis charge Time Publish ( days : ĠInt , Ġhours : ĠInt , Ġmins : ĠInt ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġcalled Ġwhen Ġthe Ġdis ch arging Ġtime Ġis Ġbeing Ġcalculated . ĊĠĠĠĠ Ġ* ĠAny Ġstatus Ġtext Ġindicating Ġthat Ġ" dis ch arging Ġtime Ġis Ġbeing Ġcalculated " Ġcan Ġbe Ġused Ġhere . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġon Calcul ating Dis ch arging Time () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġcalled Ġwhen Ġthe Ġbattery Ġis Ġfully Ġchar ged . ĊĠĠĠĠ Ġ* ĠCalled Ġonly Ġwhen Ġthe Ġdevice Ġis Ġconnected Ġto Ġch arger Ġand Ġbattery Ġbecomes Ġfull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġon Full Battery () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġthe Ġcalculation Ġwhen Ġthe Ġactivity Ġis Ġcreated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ Ġbattery Dis ch arging Times Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġbattery Ch arging Times Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġregister Receiver ( level Receiver , ĠIntent Filter ( Intent . ACTION _ B ATTER Y _ CHANGED )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġcalculate Ġthe Ġch arging Ġtime Ġbased Ġon Ġthe Ġtime ly Ġusage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpublish Ch arging Text ( level : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġaverage : ĠLong ĊĠĠĠĠĠĠĠ Ġvar Ġsum : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( time Ġin Ġbattery Ch arging Times !! ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġtime !! ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġaverage Ġ= Ġsum Ġ/ Ġbattery Ch arging Times !!. size Ġ* Ġ( 1 0 0 Ġ- Ġlevel ) ĊĊĠĠĠĠĠĠĠ Ġ// Since Ġch arging Ġcannot Ġtake Ġdays ĊĠĠĠĠĠĠĠ Ġ// int Ġdays Ġ= Ġ( int ) ĠTimeUnit . MILLISECONDS . to Days ( average ); ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġ( TimeUnit . MILLISECONDS . to Hours ( average ) Ġ% ĠTimeUnit . DAYS . to Hours ( 1 )) Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġmins Ġ= Ġ( TimeUnit . MILLISECONDS . to Minutes ( average ) Ġ% ĠTimeUnit . HOUR S . to Minutes ( 1 )) Ġas ĠInt ĊĊĠĠĠĠĠĠĠ Ġon Ch arging Time Publish ( hours , Ġmins ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġcalculate Ġthe Ġdis ch arging Ġtime Ġbased Ġon Ġthe Ġtime ly Ġusage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpublish Dis ch arging Text ( level : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġaverage : ĠLong ĊĠĠĠĠĠĠĠ Ġvar Ġsum : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( time Ġin Ġbattery Dis ch arging Times !! ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġtime ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġaverage Ġ= Ġsum Ġ/ Ġbattery Dis ch arging Times !!. size Ġ* Ġlevel ĊĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= ĠTimeUnit . MILLISECONDS . to Days ( average ) Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġ( TimeUnit . MILLISECONDS . to Hours ( average ) Ġ% ĠTimeUnit . DAYS . to Hours ( 1 )) Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġmins Ġ= Ġ( TimeUnit . MILLISECONDS . to Minutes ( average ) Ġ% ĠTimeUnit . HOUR S . to Minutes ( 1 )) Ġas ĠInt ĊĊĠĠĠĠĠĠĠ Ġon Dis charge Time Publish ( days , Ġhours , Ġmins ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns ĠSTART _ STICK Y Ġby Ġdefault . ĠMethod Ġcan Ġbe Ġoverridden Ġto Ġcustomize . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent , Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠService . START _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn register Ġthe Ġlevel Ġreceiver Ġon Destroy Ġof Ġthe Ġservice Ġto Ġavoid Ġleak age . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġunregister Receiver ( level Receiver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBinding Ġnot Ġrequired Ġby Ġdefault . ĠCan Ġbe Ġoverridden Ġfor Ġbinding . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Nullable ĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }