package Ġcom . dev indi . wall paper . misc Ċ Ċ import Ġandroid . arch . lifecycle . Lifecycle Owner Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ class ĠSingle Live Event < T > Ġ: ĠLive Data < T >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpending Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠ Ġoverride Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠObserver < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Active Observer s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" This Ġsingle Ġevent Ġalready Ġhave Ġobserver ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . observe ( owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending . compare AndSet ( true , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Changed ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Event ( t : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpending . set ( true ) ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġt ĊĠĠĠ Ġ} Ċ } Ċ