package Ġcom . ens ody . reactiv est ate Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ Ċ /** ĠReturns Ġ[ LiveData . getValue ] Ġand Ġtracks Ġthe Ġobservable . Ġ*/ Ċ public Ġfun Ġ< T > ĠResolver . get ( data : ĠLive Data < T >): ĠT ? Ġ{ ĊĠĠĠ Ġtrack ( data ) Ġ{ ĠLive Data Observable ( data , Ġauto Runner ) Ġ} ĊĠĠĠ Ġreturn Ġdata . value Ċ } Ċ Ċ private Ġclass ĠLive Data Observable < T >( ĊĠĠĠ Ġprivate Ġval Ġdata : ĠLive Data < T >, ĊĠĠĠ Ġauto Runner : ĠBase Auto Runner , Ċ ) Ġ: ĠAuto Runner Observable < T ?> Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġignore Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġobserver Ġ= ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! ignore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Runner . trigger Change () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġvalue : ĠT ? Ġget () Ġ= Ġdata . value ĊĊĠĠĠ Ġoverride Ġfun Ġadd Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPrevent Ġrecursion Ġand Ġassume Ġthe Ġvalue Ġis Ġalready Ġset Ġcorrectly ĊĠĠĠĠĠĠĠ Ġignore Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdata . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠ Ġignore Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . remove Observer ( observer ) ĊĠĠĠ Ġ} Ċ } Ċ