package Ġcom . ar app main . radial time picker . digital Time Picker . anim Utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Count Down Timer Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġkotlin . coroutines . coroutine Context Ċ import Ġkotlin . math . PI Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ Ċ class ĠAnim Utils ( var Ġduration : ĠLong , Ġvar Ġinterval : ĠLong Ġ= Ġ 1 5 L ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġon Refresh : Ġ(( weight : ĠFloat ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon End : Ġ(( weight : ĠFloat , is Expanded : Boolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠonStart : Ġ(( weight : ĠFloat , to Expand : Boolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġexpand : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtm : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġt : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġcount Down Timer Ġ= Ġobject Ġ: ĠCount Down Timer ( duration , Ġinterval ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtm Ġ= Ġduration Ġ- Ġmillis Until Finished ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġtm Ġ/ Ġduration . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( anim Fun ( t )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( anim Fun ( t )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon End ?. let Ġ{ Ġit ( anim Fun ( t ), expand ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġanim Fun ( t : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( expand ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsin ( t Ġ* ĠPI Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcos ( t Ġ* ĠPI Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ}). toFloat () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġstart ( expand : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠonStart ?. let Ġ{ Ġit ( if Ġ( expand ) Ġ 0 f Ġelse Ġ 1 f , expand ) Ġ} ĊĠĠĠĠĠĠĠ Ġthis . expand Ġ= Ġexpand ĊĠĠĠĠĠĠĠ Ġcount Down Timer . start () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġshow (){ ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġhide (){ ĊĠĠĠĠĠĠĠ Ġstart ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġcount Down Timer . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Refresh ( param : Ġ( weight : ĠFloat ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Refresh Ġ= Ġparam ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon End ( param :( weight : Float , is Expand : Boolean )-> Unit ){ ĊĠĠĠĠĠĠĠ Ġthis . on End Ġ= Ġparam ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonStart ( param :( weight : Float , to Expand : Boolean )-> Unit ){ ĊĠĠĠĠĠĠĠ Ġthis . onStart Ġ= Ġparam ĊĠĠĠ Ġ} ĊĊ Ċ }