package Ġcom . base . base ped o . utils Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Message Ċ import Ġandroid . os . System Clock Ċ Ċ abstract Ġclass ĠCount Down Timer Ċ /** Ċ Ġ* Ġ@ param Ġmillis In Future ĠThe Ġnumber Ġof Ġmillis Ġin Ġthe Ġfuture Ġfrom Ġthe Ġcall Ċ Ġ* Ġto Ġ[. start ] Ġuntil Ġthe Ġcount down Ġis Ġdone Ġand Ġ[. on Finish ] Ċ Ġ* Ġis Ġcalled . Ċ Ġ* Ġ@ param Ġcount Down Interval ĠThe Ġinterval Ġalong Ġthe Ġway Ġto Ġreceive Ċ Ġ* Ġ[. on Tick ] Ġcallbacks . Ċ Ġ*/ ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠM illis Ġsince Ġepoch Ġwhen Ġalarm Ġshould Ġstop . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Millis In Future : ĠLong , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġinterval Ġin Ġmillis Ġthat Ġthe Ġuser Ġreceives Ġcallbacks ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Count down Interval : ĠLong ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Stop TimeIn Future : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Cancelled Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel Ġthe Ġcount down . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDo Ġnot Ġcall Ġit Ġfrom Ġinside ĠCount Down Timer Ġthreads ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Handler . remove Messages ( MSG ) ĊĠĠĠĠĠĠĠ Ġm Cancelled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġthe Ġcount down . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġstart (): ĠCount Down Timer Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Millis In Future Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Stop TimeIn Future Ġ= ĠSystem Clock . elapsed Realtime () Ġ+ Ġm Millis In Future ĊĠĠĠĠĠĠĠ Ġm Handler . sendMessage ( m Handler . obtain Message ( MSG )) ĊĠĠĠĠĠĠĠ Ġm Cancelled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġfired Ġon Ġregular Ġinterval . ĊĠĠĠĠ Ġ* Ġ@ param Ġmillis Until Finished ĠThe Ġamount Ġof Ġtime Ġuntil Ġfinished . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġon Tick ( millis Until Finished : ĠLong ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġfired Ġwhen Ġthe Ġtime Ġis Ġup . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġon Finish () ĊĊĠĠĠ Ġ// Ġhandles Ġcounting Ġdown ĊĠĠĠ Ġprivate Ġval Ġm Handler : ĠHandler Ġ= Ġobject Ġ: ĠHandler () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this @ Count Down Timer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmillis Left Ġ= Ġm Stop TimeIn Future Ġ- ĠSystem Clock . elapsed Realtime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( millis Left Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( millis Left Ġ< Ġm Count down Interval ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġtick , Ġjust Ġdelay Ġuntil Ġdone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage Delayed ( obtain Message ( MSG ), Ġmillis Left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Tick Start Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Tick ( millis Left ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtake Ġinto Ġaccount Ġuser 's Ġon Tick Ġtaking Ġtime Ġto Ġexecute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdelay Ġ= Ġlast Tick Start Ġ+ Ġm Count down Interval Ġ- ĠSystem Clock . elapsed Realtime () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġspecial Ġcase : Ġuser 's Ġon Tick Ġtook Ġmore Ġthan Ġinterval Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcomplete , Ġskip Ġto Ġnext Ġinterval ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( delay Ġ< Ġ 0 ) Ġdelay Ġ+= Ġm Count down Interval ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage Delayed ( obtain Message ( MSG ), Ġdelay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMSG Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ Ċ } Ċ