/** Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . af ol le st ad . date . util Ċ Ċ import Ġandroidx . annotation . Check Result Ċ import Ġcom . af ol le st ad . date . runners . Mode Ċ import Ġcom . af ol le st ad . date . runners . Mode . CAL END AR Ċ import Ġcom . af ol le st ad . date . runners . Mode . INPUT _ EDIT Ċ import Ġcom . af ol le st ad . date . runners . Mode . YEAR _ LIST Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ internal Ġfun ĠObservable Value < Mode >. toggle Mode ( wanted Mode : ĠMode Ġ= ĠYEAR _ LIST ) Ġ{ ĊĠ Ġwhen Ġ( get ()) Ġ{ ĊĠĠĠ ĠCAL END AR Ġ-> Ġset ( wanted Mode ) ĊĠĠĠ ĠINPUT _ EDIT Ġ-> Ġset ( CAL END AR ) ĊĠĠĠ Ġelse Ġ-> Ġset ( CAL END AR ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ internal Ġtype alias ĠObserver < T > Ġ= Ġ( value : ĠT ) Ġ-> ĠUnit Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ internal Ġclass ĠObservable Value < T Ġ: ĠAny >( initial Value : ĠT ) Ġ: ĠRead Write Property < Any , ĠT > Ġ{ ĊĠ Ġprivate Ġvar Ġcurrent Value : ĠT Ġ= Ġinitial Value ĊĠ Ġprivate Ġval Ġob servers Ġ= Ġmutable Set Of < Observer < T >>() ĊĊĠ Ġfun Ġon ( observer : ĠObserver < T >): ĠObservable Value < T > Ġ{ ĊĠĠĠ Ġob servers . add ( observer ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ@ Synchron ized Ġfun Ġset ( value : ĠT ) Ġ{ ĊĠĠĠ Ġcurrent Value Ġ= Ġvalue ĊĠĠĠ Ġob servers . forEach Ġ{ Ġit ( value ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Synchron ized Ġ@ Check Result ĊĠ Ġfun Ġget (): ĠT Ġ= Ġcurrent Value ĊĊĠ Ġoverride Ġfun ĠgetValue ( ĊĠĠĠ Ġthis Ref : ĠAny , ĊĠĠĠ Ġproperty : ĠK Property < *> ĊĠ Ġ): ĠT Ġ= Ġcurrent Value ĊĊĠ Ġoverride Ġfun ĠsetValue ( ĊĠĠĠ Ġthis Ref : ĠAny , ĊĠĠĠ Ġproperty : ĠK Property <* >, ĊĠĠĠ Ġvalue : ĠT ĊĠ Ġ) Ġ= Ġset ( value ) Ċ } Ċ