package Ġcom . by outline . secrets au ce . lifecycle Ċ Ċ import Ġandroidx . databinding . Base Observable Ċ import Ġandroidx . databinding . Observable Ċ import Ġandroidx . databinding . Observable Boolean Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġcom . by outline . secrets au ce . databinding . Data Binding Helper Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ Ċ /** Ċ Ġ* Ġ[ Attach able ViewModel ] Ġwith Ġconvenience Ġextension Ġmethods Ġfor Ġdisposing Ġrx Ġ[ Disposable ] Ċ Ġ* Ġand Ġclearing ĠAndroid ĠD atab ind ing Ġobservable Ġlisteners . Ċ Ġ*/ Ċ abstract Ġclass ĠAttach able ViewModel Rx < T > Ġ: ĠAttach able ViewModel < T >() Ġ{ ĊĊĠĠĠ Ġ/** Ġ[ Disposable ] Ġwill Ġbe Ġcleared Ġwhen Ġthis Ġ* ViewModel * Ġis Ġdet ached .*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun ĠDis posable . dispose On Detach (): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Detach Action Ġ{ Ġthis . dispose () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGiven Ġ[ callback ] Ġwill Ġbe Ġattached Ġto Ġ[ Base Observable ] Ġuntil Ġ* ViewModel * Ġis Ġdet ached Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun ĠObservable . subscribe T ill Detach ( callback : ĠObservable . On PropertyChanged Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd On PropertyChanged Callback ( callback ) ĊĠĠĠĠĠĠĠ Ġregister Detach Action Ġ{ Ġremove On PropertyChanged Callback ( callback ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGiven Ġ[ callback ] Ġwill Ġbe Ġattached Ġto Ġ[ Base Observable ] Ġuntil Ġ* ViewModel * Ġis Ġdet ached Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġinline Ġfun Ġ< T > ĠObservable Field < T >. subscribe Field T ill Detach ( cross inline Ġcallback : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe T ill Detach ( Data Binding Helper . observable Field Callback ( callback )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGiven Ġ[ callback ] Ġwill Ġbe Ġattached Ġto Ġ[ Observable Boolean ] Ġuntil Ġ* ViewModel * Ġis Ġdet ached Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġinline Ġfun ĠObservable Boolean . subscribe Bool T ill Detach ( cross inline Ġcallback : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe T ill Detach ( Data Binding Helper . observable Boolean Callback ( callback )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven Ġ[ action ] Ġwill Ġbe Ġcalled Ġwhen Ġone Ġany Ġof Ġfields Ġin Ġ[ Observable ] Ġwith Ġmatching Ġ[ br s ] Ġis Ġchanged . ĊĠĠĠĠ Ġ* ĠThis Ġlistener Ġwill Ġbe Ġautomatically Ġremoved Ġwhen Ġ* ViewModel * Ġis Ġdet ached . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠObservable > ĠT . subscribe T ill Detach ( var arg Ġbr s : ĠInt , Ġcross inline Ġaction : ĠT . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Callback : ĠObservable . On PropertyChanged Callback Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Helper . observable Callback (* br s , Ġaction Ġ= Ġaction ) ĊĠĠĠĠĠĠĠ Ġsubscribe T ill Detach ( observable Callback ) ĊĠĠĠ Ġ} Ċ } Ċ