package Ġcom . char le zz . pickle . util . lifecycle Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġandroidx . annotation . MainThread Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean ĊĊ Ċ class ĠSingle Live Event < T > Ġconstructor ( private Ġval Ġinterval : ĠLong Ġ= ĠNO _ INTERVAL ) Ġ: ĠMutable LiveData < T ?> () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNO _ INTERVAL Ġ= Ġ 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlast Click Time : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġm Pending Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠ Ġfun Ġinvalidate (): Single Live Event < T >{ ĊĠĠĠĠĠĠĠ Ġm Pending . set ( false ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġoverride Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠObserver < in ĠT ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . observe ( owner , Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pending . compare AndSet ( true , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Changed ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġoverride Ġfun ĠsetValue ( t : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( interval Ġ!= ĠNO _ INTERVAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Click Time Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelapsed Time : ĠLong Ġ= Ġcurrent Click Time Ġ- Ġlast Click Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Click Time Ġ= Ġcurrent Click Time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elapsed Time Ġ<= Ġinterval ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Pending . set ( true ) ĊĠĠĠĠĠĠĠ Ġsuper . setValue ( t ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġnull ĊĠĠĠ Ġ} Ċ Ċ }