package Ġorg . r ion labs . t ats u . ui . screen . main . timer Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġorg . r ion labs . t ats u . data . model . Timer Ċ import Ġorg . r ion labs . t ats u . data . model . Timer State .* Ċ import Ġorg . r ion labs . t ats u . data . model . Timer Type Ċ import Ġorg . r ion labs . t ats u . ui . screen . main . timer . Timer Screen State .* Ċ import Ġorg . r ion labs . t ats u . work . Settings Manager Ċ import Ġorg . r ion labs . t ats u . work . Sil ent Mode Manager Ċ import Ġorg . r ion labs . t ats u . work . Timer Controller Ċ import Ġorg . r ion labs . t ats u . work . V ibr ations Manager Ċ import Ġorg . r ion labs . t ats u . work . V ibr ations Manager . Vi be Type Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ class ĠTimer ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġtimer Controller : ĠTimer Controller , ĊĠĠĠ Ġprivate Ġval Ġsetting Manager : ĠSettings Manager , ĊĠĠĠ Ġprivate Ġval Ġsilent Mode Manager : ĠSil ent Mode Manager , ĊĠĠĠ Ġprivate Ġval Ġvi br ations Manager : ĠV ibr ations Manager Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Timer Data Ġ= ĠMutable LiveData < Timer >() ĊĠĠĠ Ġval Ġtimer Data : ĠLive Data < Timer > Ġ= Ġm Timer Data ĊĊĠĠĠ Ġprivate Ġval Ġ_ timer Screen State Ġ= ĠMutable LiveData < Timer Screen State >() ĊĠĠĠ Ġval Ġtimer Screen State : ĠLive Data < Timer Screen State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ timer Screen State ĊĊĠĠĠ Ġprivate Ġval Ġmetadata Observer Ġ= ĠObserver < Timer > Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġtimer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" On Changed Ġcalled Ġwith ĠNon Null ĠTimer Ġvalue ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ("$ timer ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer Data . value Ġ= Ġtimer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( timer . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID LE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest State Internal ( WORK _ TIMER _ IDLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRUN NING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPA USED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFIN ISHED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timer . type Ġ== ĠTimer Type . WORK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest State Internal ( WORK _ TIMER _ FINISHED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest State Internal ( BREAK _ TIMER _ FINISHED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCANCEL LED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest State Internal ( WORK _ TIMER _ IDLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( timer Controller . isActive Timer Available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Controller . getActive Timer (). observe Fore ver ( metadata Observer ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Timer To Work Idle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġrequest State ( timer Screen State : ĠTimer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( array Of ( WORK _ TIMER _ FINISHED , ĠBRE AK _ TIMER _ FINISHED ). contains ( timer Screen State )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Cannot Ġrequest Ġfor Ġ$ timer Screen State ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequest State Internal ( timer Screen State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest State Internal ( timer Screen State : ĠTimer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent State Ġ= Ġ_ timer Screen State . value Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Current Ġstate Ġis Ġ$ currentState , Ġswitching Ġto Ġ$ timer Screen State ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( currentState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ IDLE Ġ-> Ġwhen Ġ( timer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart New Work Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( WORK _ TIMER _ RUNNING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ RUNNING Ġ-> Ġwhen Ġ( timer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ FINISHED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( WORK _ TIMER _ FINISHED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ations Manager . vi br ate ( Vi be Type . WORK _ FINISHED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ PA USED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( WORK _ TIMER _ PA USED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ PA USED Ġ-> Ġwhen Ġ( timer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Timer To Work Idle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresume Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( WORK _ TIMER _ RUNNING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ FINISHED Ġ-> Ġwhen Ġ( timer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Timer To Work Idle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ TIMER _ RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart New Break Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( BREAK _ TIMER _ RUNNING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ TIMER _ RUNNING Ġ-> Ġwhen Ġ( timer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ TIMER _ FINISHED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( BREAK _ TIMER _ FINISHED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ations Manager . vi br ate ( Vi be Type . BREAK _ FINISHED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ TIMER _ PA USED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( BREAK _ TIMER _ PA USED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ TIMER _ PA USED Ġ-> Ġwhen Ġ( timer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Timer To Work Idle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ TIMER _ RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ TIMER _ FINISHED Ġ-> Ġwhen Ġ( timer Screen State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Timer To Work Idle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ TIMER _ RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart New Work Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( WORK _ TIMER _ RUNNING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart New Work Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġsetting Manager . get Work Timer In Minutes () Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġtimer Controller . start New Timer ( Timer Type . WORK , Ġduration ). observe Fore ver ( metadata Observer ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( setting Manager . silent Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Mode Manager . turn On Sil ent Mode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart New Break Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġsetting Manager . get Break Timer In Minutes () Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġtimer Controller . start New Timer ( Timer Type . BREAK , Ġduration ). observe Fore ver ( metadata Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpause Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Controller . pause Timer () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( setting Manager . silent Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Mode Manager . turn Off Sil ent Mode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresume Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Controller . resume Timer () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( setting Manager . silent Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Mode Manager . turn On Sil ent Mode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Controller . cancel Timer () ĊĠĠĠĠĠĠĠ Ġreset Timer To Work Idle () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( setting Manager . silent Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Mode Manager . turn Off Sil ent Mode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Timer To Work Idle () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Timer Data . value Ġ= ĠTimer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar . getInstance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetting Manager . get Work Timer In Minutes () Ġ* Ġ 6 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Type . WORK ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ_ timer Screen State . post Value ( WORK _ TIMER _ IDLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( timer Controller . isActive Timer Available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Controller . getActive Timer (). remove Observer ( metadata Observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ