/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠM oh amed ĠAl aa Ċ Ġ* Ċ Ġ* Ġ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 . map ro duction s . mo h amed al aa . extensions Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġcom . map ro duction s . mo h amed al aa . core . fromJson OrNull Ċ import Ġcom . map ro duction s . mo h amed al aa . core . toJson OrNull Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠSaved State Handle . get Json LiveData ( ĊĠĠĠ Ġkey : ĠString , ĊĠĠĠ Ġinitial Value : ĠT ? Ġ= Ġnull , ĊĠĠĠ Ġno inline Ġconversion ToJson : Ġ( T ?) Ġ-> ĠString ? Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . toJson OrNull () ĊĠĠĠ Ġ} Ċ ): ĠMutable LiveData < T > Ġ{ ĊĠĠĠ Ġval Ġjson Ġ= Ġget < String >( key ) ĊĊĠĠĠ Ġval Ġto Be Used Initial Value Ġ= Ġif Ġ( contains ( key )) Ġjson . fromJson OrNull < T >() Ġelse Ġinitial Value ĊĊĠĠĠ Ġreturn ĠSaved State Mutable LiveData ( ĊĠĠĠĠĠĠĠ ĠWeak Reference ( this ), Ġkey , Ġconversion ToJson , Ġto Be Used Initial Value ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Published Api Ċ internal Ġclass ĠSaved State Mutable LiveData < T >( ĊĠĠĠ Ġprivate Ġval Ġweak Ref State : ĠWeak Reference < Saved State Handle >, ĊĠĠĠ Ġprivate Ġval Ġkey : ĠString , ĊĠĠĠ Ġprivate Ġval Ġconversion ToJson : Ġ( T ?) Ġ-> ĠString ?, ĊĠĠĠ Ġinitial Value : ĠT ? Ċ ) Ġ: ĠMutable LiveData < T >( initial Value ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( value : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave To Saved State Handle ( value ) ĊĊĠĠĠĠĠĠĠ Ġsuper . setValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Value ( value : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave To Saved State Handle ( value ) ĊĊĠĠĠĠĠĠĠ Ġsuper . post Value ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave To Saved State Handle ( newValue : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġconversion ToJson . invoke ( newValue ) ĊĊĠĠĠĠĠĠĠ Ġweak Ref State . get ()?. set ( key , Ġjson ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ