package Ġcook cook . nex ters . com . am oo gy e . service Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . Audio Attributes Ċ import Ġandroid . media . Ring tone Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Count Down Timer Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ import Ġcook cook . nex ters . com . am oo gy e . R Ċ import Ġcook cook . nex ters . com . am oo gy e . utils . Timer Status ĊĊ Ċ const Ġval ĠCOUNT DOWN _ TICK _ INTER V ALL Ġ= Ġ 1 0 L Ċ Ċ class ĠTimer Service Ġ: ĠService () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġtimer Service Binder : ĠI Binder ĊĠĠĠ Ġlateinit Ġvar Ġtimer Status : ĠTimer Status ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcount Down Timer : ĠCount Down Timer ĊĠĠĠ Ġprivate Ġvar Ġrem ind Milli Seconds : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġinitial Milli Seconds : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġis V ibration : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġis Sound : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġfun Ġset Sound ( is Sound : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is Sound Ġ= Ġis Sound ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset V ibration ( is V ibration : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is V ibration Ġ= Ġis V ibration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtimer Service Binder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onStart Command ( intent , Ġflags , Ġstart Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġtimer Service Binder Ġ= ĠTimer Service Binder ( this ) ĊĠĠĠĠĠĠĠ Ġtimer Status Ġ= ĠTimer Status . STATE _ WAIT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Rem ind Times ( millis Seconds : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrem ind Milli Seconds Ġ= Ġmillis Seconds ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Initial Times ( millis Seconds : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinitial Milli Seconds Ġ= Ġmillis Seconds ĊĠĠĠĠĠĠĠ Ġrem ind Milli Seconds Ġ= Ġmillis Seconds ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Rem ind Times () Ġ= Ġrem ind Milli Seconds ĊĊĠĠĠ Ġfun Ġget Initial Times () Ġ= Ġinitial Milli Seconds ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġset Initial TI mes Times Ġ-> Ġstart Or Continue () Ġ: Ġì ´Ī ê¸° Ġìĭľìŀĳ ĊĠĠĠĠ Ġ* Ġon Pause Count down () Ġ-> Ġstart Or Continue () Ġ: Ġë© Ī ì · Ħ ëĭ¤ Ġìĭľìŀĳ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonStart Count down () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Status Ġ= ĠTimer Status . STATE _ PROGRESS ĊĠĠĠĠĠĠĠ Ġstart Or Continue ( initial Milli Seconds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Pause Count down () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Status Ġ= ĠTimer Status . STATE _ PAUSE ĊĠĠĠĠĠĠĠ Ġcount Down Timer . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Restart Count down () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Status Ġ= ĠTimer Status . STATE _ PROGRESS ĊĠĠĠĠĠĠĠ Ġstart Or Continue ( rem ind Milli Seconds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Stop Count down () Ġ{ ĊĠĠĠĠĠĠĠ Ġrem ind Milli Seconds Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtimer Status Ġ= ĠTimer Status . STATE _ END ĊĠĠĠĠĠĠĠ Ġcount Down Timer . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Cancel Count down () Ġ{ ĊĠĠĠĠĠĠĠ Ġrem ind Milli Seconds Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtimer Status Ġ= ĠTimer Status . STATE _ WAIT ĊĠĠĠĠĠĠĠ Ġcount Down Timer . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Or Continue ( millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Status Ġ= ĠTimer Status . STATE _ PROGRESS ĊĠĠĠĠĠĠĠ Ġstart Timer ( millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Timer ( millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcount Down Timer Ġ= Ġobject Ġ: ĠCount Down Timer ( millis , ĠCOUNT DOWN _ TICK _ INTER V ALL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrem ind Milli Seconds Ġ= Ġmillis Until Finished ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Notification () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Stop Count down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Time From Milli (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġinit Time Ġ= Ġthis . initial Milli Seconds ĊĊĠĠĠĠĠĠĠ Ġinit Time Ġ/= Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( init Time Ġ/ Ġ 3 6 0 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ(" ${ init Time Ġ/ Ġ 3 6 0 0 } Ġìĭľê°Ħ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Time Ġ% = Ġ 3 6 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( init Time Ġ/ Ġ 6 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ(" ${ init Time Ġ/ Ġ 6 0 } Ġë¶Ħ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Time Ġ% = Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"${ init Time } ì ´Ī Ġíĥ ĢìĿ´ ë ¨ ¸ ê°Ģ Ġì¢ ħ ë£Į ëĲĺ ìĹĪ ìĬµëĭĪëĭ¤ ." ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Notification () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġnotification Ġ= ĠNotification Compat . Builder ( this , Ġ" TIMER ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . am oo gy e _ logo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title (" íĥĢ ìĿ´ ë ¨ ¸ Ġì¢ ħ ë£Į ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( change Time From Milli ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Notification . PRIORITY _ DEFAULT ) ĊĊĊĊĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġ" sound Ġis Ġ${ is Sound }") ĊĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġ" vi br ation Ġis Ġ${ is V ibration }") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Sound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalarm Sound Ġ= ĠRing tone Manager . getDefault Uri ( Ring tone Manager . TYPE _ NOTIFICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . set Sound ( alarm Sound ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . priority Ġ= ĠNotification Compat . PRIORITY _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . set Sound ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is V ibration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . set V ibrate ( long ArrayOf ( 1 0 0 0 , Ġ 1 0 0 0 )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . priority Ġ= ĠNotification Compat . PRIORITY _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . set V ibrate ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is V ibration Ġ&& Ġ! is Sound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . set Only Alert Once ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġ" TIMER ĠNAME " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Text Ġ= Ġ" TIMER ĠDESCRIPTION " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimportance Ġ= ĠNotification Manager . IMPORT ANCE _ DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel (" TIMER ", Ġname , Ġimportance ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Sound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaudio Attributes Ġ= ĠAudio Attributes . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ContentType ( Audio Attributes . CONTENT _ TYPE _ SON IFICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Usage ( Audio Attributes . USAGE _ NOTIFICATION _ RING T ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalarm Sound Ġ= ĠRing tone Manager . getDefault Uri ( Ring tone Manager . TYPE _ NOTIFICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Sound ( alarm Sound , Ġaudio Attributes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Sound ( null , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . enable V ibration ( is V ibration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġthe Ġchannel Ġwith Ġthe Ġsystem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Manager : ĠNotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( Notification Manager Compat . from ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnotification Id Ġis Ġa Ġunique Ġint Ġfor Ġeach Ġnotification Ġthat Ġyou Ġmust Ġdefine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ( 1 , Ġnotification . build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetState (): ĠTimer Status Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtimer Status ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Stop Count down () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ }