package Ġcom . ac mv it . c 2 c 2 0 2 1 . util Ċ Ċ import Ġandroid . util . Log Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Disposable Ċ import Ġio . reactivex . rx java 3 . subjects . Behavior Subject Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠCount Down ( ĊĠĠĠ Ġprivate Ġvar Ġtime Rem : ĠLong Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Count Down " ĊĠĠĠ Ġprivate Ġval Ġsubject : ĠBehavior Subject < List < Long >> Ġ= ĠBehavior Subject . create () ĊĠĠĠ Ġprivate Ġvar Ġdis posable : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġreset ( time Rem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset ( from ms : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtime Rem Ġ= Ġfrom ms ĊĠĠĠĠĠĠĠ Ġdis posable ?. dispose () ĊĠĠĠĠĠĠĠ Ġdis posable Ġ= ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. interval ( 1 , Ġ 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" reset : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Rem Ġ-= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Rem Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Rem Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onNext ( get Acc Time Diff ( time Rem )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubject . onComplete () ĊĠĠĠĠĠĠĠ Ġdis posable ?. dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġas String Observable () Ġ= Ġsubject . map Ġ{ Ġit . map Ġ{ ĠString . format ("% 2 d ", Ġit ) Ġ} Ġ}. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠ Ġfun Ġas Long Observable (): ĠObservable < List < Long >> Ġ= Ġsubject . observe On ( Android Schedulers . main Thread ()) ĊĊĠĠĠ Ġprivate Ġfun Ġget Acc Time Diff ( init Diff : ĠLong ): ĠList < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdiff Ġ= Ġinit Diff ĊĠĠĠĠĠĠĠ Ġval Ġtime Diff Ġ= Ġmutable ListOf < Long >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( unit Ġin ĠarrayOf ( TimeUnit . HOUR S , ĠTimeUnit . MIN UTES , ĠTimeUnit . SECONDS )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunit . convert ( diff , ĠTimeUnit . MILLISECONDS ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Diff . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Ġ-= ĠTimeUnit . MILLISECONDS . convert ( it , Ġunit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtime Diff ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Corre sponding Color ( color Map : ĠMap < Long , ĠInt >): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Values Ġ= Ġcolor Map . keys . to Typed Array (). sorted Array Descending () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( time Val Ġin Ġtime Values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Rem Ġ>= Ġtime Val ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolor Map [ time Val ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcolor Map [ time Values . last ()] ĊĠĠĠ Ġ} Ċ Ċ }