package Ġcom . or st eg . ges os . android quiz kit . components Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Count Down Timer Ċ import Ġcom . or st eg . ges os . android quiz kit . quiz . Quiz Ċ import Ġcom . or st eg . ges os . android quiz kit . quiz . Quiz Controller Ċ import Ġjava . util .* Ċ Ċ class ĠQu iz Timer ( val Ġm Quiz : ĠQu iz , Ġvar Ġtotal TimeIn Millis : ĠLong , Ġval Ġtick Interval : ĠLong Ġ= ĠINTER VAL _ SECONDS ) ĊĠĠĠĠĠĠĠ Ġ: ĠHistory Component , Ġ ĠQu iz Controller Ġby Ġm Quiz Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Timer : ĠCount Down Timer ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Playing : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġtick Time : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġlast Pause Time : ĠLong Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġhas Finished : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġon Time ChangeListener : ĠOn Time ChangeListener ? Ġ= Ġnull ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Timer ( seek Time : ĠLong ): ĠCount Down Timer Ġ= Ġobject Ġ: ĠCount Down Timer ( seek Time , Ġtick Interval ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Playing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Finished Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Time Ġ= Ġtotal TimeIn Millis ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Quiz . getContext () Ġas ĠActivity ). run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Time ChangeListener ?. on Timer Finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Time Ġ= Ġtotal TimeIn Millis Ġ- Ġmillis Until Finished ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Quiz . getContext () Ġas ĠActivity ). run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Time ChangeListener ?. on Timer Tick ( millis Until Finished ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Preferences () Ġ= ĊĠĠĠĠĠĠĠ Ġget Preferences ( m Quiz . getContext ()) ĊĊĠĠĠ Ġprivate Ġfun Ġedit Preferences () Ġ= Ġget Preferences (). edit () ĊĊĠĠĠ Ġoverride Ġfun Ġget Quiz (): ĠQu iz Ġ= Ġm Quiz ĊĊĠĠĠ Ġoverride Ġfun Ġsave To History ( is Temporal : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġedit Preferences (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Temporal ) Ġput Long ("${ m Quiz . id }_ quiz _ pause _ time ", Ġlast Pause Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ("${ m Quiz . id }_ quiz _ tick _ time ", Ġtick Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ("${ m Quiz . id }_ quiz _ total _ time ", Ġtotal TimeIn Millis ) ĊĠĠĠĠĠĠĠ Ġ}. commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave To Bundle ( out State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long (" quiz _ tick _ time ", Ġtick Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long (" quiz _ pause _ time ", Ġlast Pause Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long (" quiz _ total _ time ", Ġtotal TimeIn Millis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrestore State ( in State : ĠBundle ?, Ġtime Stamp : ĠLong ?, Ġis Temporal : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġin State ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Time Ġ= Ġget Long (" quiz _ tick _ time ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Pause Time Ġ= Ġget Long (" quiz _ pause _ time ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal TimeIn Millis Ġ= Ġget Long (" quiz _ total _ time ") ĊĠĠĠĠĠĠĠ Ġ} ?: time Stamp ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Preferences (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Temporal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Pause Time Ġ= Ġget Long Ġ(" ${ it }_ quiz _ pause _ time ", Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Finished Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Pause Time Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Time Ġ= Ġget Long ("${ it }_ quiz _ tick _ time ", Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal TimeIn Millis Ġ= Ġget Long ("${ it }_ quiz _ total _ time ", Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Playing Ġ&& Ġ! has Finished ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcalculate Ġnew Ġtick Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Pause Time Ġ!= Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Time Ġ+= ĠCalendar . getInstance (). time In Millis Ġ- Ġlast Pause Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tick Time Ġ< Ġtotal TimeIn Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer Ġ= Ġget Timer ( total TimeIn Millis Ġ- Ġtick Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Playing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Finished Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Time Ġ= Ġtotal TimeIn Millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Time ChangeListener ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Timer Tick ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Timer Finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsuspend () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Playing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Pause Time Ġ= ĠCalendar . getInstance (). time In Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Playing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Pause Time Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠ Ġtick Time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġhas Finished Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuspend () ĊĠĠĠĠĠĠĠ Ġlast Pause Time Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġhas Finished Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrestart () Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTime d Stats : ĠQu iz History . Stats () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Time : ĠLong ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġfinish Time : ĠLong ? Ġ= Ġnull ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinterface ĠOn Time ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Timer Tick ( time Left : ĠLong ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Timer Finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Preferences ( context : ĠContext ) Ġ= Ġcontext . get SharedPreferences (" timed _ quiz _ history ", ĠActivity . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġedit Preferences ( context : ĠContext ) Ġ= Ġget Preferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ). edit () ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Stat ( context : ĠContext , Ġid : ĠLong ): ĠTime d Stats ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠQu iz History . getInstance ( context ). get Stat ( id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTime d Stats () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Preferences ( context ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Time Ġ= Ġit . getLong ("${ id }_ quiz _ total _ time ", Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Time Ġ= Ġit . getLong ("${ id }_ quiz _ tick _ time ", Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdelete History ( context : ĠContext , Ġit : ĠLong , Ġis Temporal : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQu iz History . getInstance ( context ). delete History ( it , Ġis Temporal ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Preferences ( context ). apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Temporal ) Ġremove ("${ it }_ quiz _ pause _ time ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove ("${ it }_ quiz _ tick _ time ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove ("${ it }_ quiz _ total _ time ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. commit () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠINTER VAL _ SECONDS Ġ= Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠ Ġval ĠINTER VAL _ MIN UTES Ġ= Ġ 6 0 0 0 0 L ĊĠĠĠ Ġ} Ċ } Ċ