package Ġcom . pand ul ape ter . be agle . core . list . deleg ates . shared Ċ Ċ import Ġandroidx . annotation . Call Super Ċ import Ġcom . pand ul ape ter . be agle . Be agle Core Ċ import Ġcom . pand ul ape ter . be agle . common . contracts . module . Value Wrapper Module Ċ Ċ internal Ġabstract Ġclass ĠValue Wrapper Module Delegate < T , ĠM Ġ: ĠValue Wrapper Module < T , ĠM >> Ġ: ĠValue Wrapper Module . Delegate < T , ĠM > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġhas Called Listener For The First Time Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġpending Updates Ġ= Ġmutable ListOf < Pending ChangeEvent < T >>() ĊĠĠĠ Ġprivate Ġval Ġui Values Ġ= Ġmutable Map Of < kotlin . String , ĠT >() ĊĊĠĠĠ Ġfun Ġget Ui Value ( module : ĠM ) Ġ= Ġif Ġ( module . should Require Confirmation ) Ġ( ui Values [ module . id ] Ġ?: ĠgetCurrent Value ( module )) Ġelse ĠgetCurrent Value ( module ) ĊĊĠĠĠ Ġfun Ġset Ui Value ( module : ĠM , ĠnewValue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( module . should Require Confirmation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Updates . removeAll Ġ{ Ġit . module Id Ġ== Ġmodule . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getCurrent Value ( module ) Ġ== ĠnewValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Values . remove ( module . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Values [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Updates . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending ChangeEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Id Ġ= Ġmodule . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Value Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . refresh () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( has ValueChanged ( newValue , Ġmodule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Value ( module , ĠnewValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġhas ValueChanged ( newValue : ĠT , Ġmodule : ĠM ) Ġ= ĠnewValue Ġ!= Ġget Ui Value ( module ) ĊĊĠĠĠ Ġoverride Ġfun Ġhas Pending Changes ( module : ĠM ) Ġ= Ġmodule . should Require Confirmation Ġ&& Ġpending Updates . any Ġ{ Ġit . module Id Ġ== Ġmodule . id Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply Pending Changes ( module : ĠM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpending Updates . indexOf First Ġ{ Ġit . module Id Ġ== Ġmodule . id Ġ}. let Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Values . remove ( module . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Value ( module , Ġpending Updates [ index ]. pending Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Updates . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset Pending Changes ( module : ĠM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpending Updates . removeAll Ġ{ Ġit . module Id Ġ== Ġmodule . id Ġ} ĊĠĠĠĠĠĠĠ Ġui Values . remove ( module . id ) ĊĠĠĠĠĠĠĠ ĠgetCurrent Value ( module )?. let Ġ{ ĠsetCurrent Value ( module , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcall Listener For The First Time IfNeeded ( module : ĠM , Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( module . is Value Pers isted Ġ&& Ġ! has Called Listener For The First Time Ġ&& ĠBe agle Core . implementation . current Activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Called Listener For The First Time Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall On ValueChanged ( module , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġprotected Ġopen Ġfun Ġcall On ValueChanged ( module : ĠM , ĠnewValue : ĠT ) Ġ= Ġmodule . on ValueChanged ( newValue ) ĊĊĠĠĠ Ġabstract Ġclass ĠBoolean < M Ġ: ĠValue Wrapper Module < kotlin . Boolean , ĠM >> Ġ: ĠValue Wrapper Module Delegate < kotlin . Boolean , ĠM >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠgetCurrent Value ( module : ĠM ) Ġ= Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Be agle Core . implementation . localStorage Manager . b oo el ans [ module . id ] Ġ?: Ġmodule . initial Value ). also Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Listener For The First Time IfNeeded ( module , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . b ooleans [ module . id ] Ġ?: Ġmodule . initial Value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠsetCurrent Value ( module : ĠM , ĠnewValue : Ġkotlin . Boolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has ValueChanged ( newValue , Ġmodule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . localStorage Manager . b oo el ans [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . b ooleans [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall On ValueChanged ( module , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠInteger < M Ġ: ĠValue Wrapper Module < Int , ĠM >> Ġ: ĠValue Wrapper Module Delegate < Int , ĠM >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠgetCurrent Value ( module : ĠM ) Ġ= Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Be agle Core . implementation . localStorage Manager . inte gers [ module . id ] Ġ?: Ġmodule . initial Value ). also Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Listener For The First Time IfNeeded ( module , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . inte gers [ module . id ] Ġ?: Ġmodule . initial Value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠsetCurrent Value ( module : ĠM , ĠnewValue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has ValueChanged ( newValue , Ġmodule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . localStorage Manager . inte gers [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . inte gers [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall On ValueChanged ( module , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠString < M Ġ: ĠValue Wrapper Module < kotlin . String , ĠM >> Ġ: ĠValue Wrapper Module Delegate < kotlin . String , ĠM >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠgetCurrent Value ( module : ĠM ) Ġ= Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Be agle Core . implementation . localStorage Manager . strings [ module . id ] Ġ?: Ġmodule . initial Value ). also Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Listener For The First Time IfNeeded ( module , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . strings [ module . id ] Ġ?: Ġmodule . initial Value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠsetCurrent Value ( module : ĠM , ĠnewValue : Ġkotlin . String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has ValueChanged ( newValue , Ġmodule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . localStorage Manager . strings [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . strings [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall On ValueChanged ( module , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠString Set < M Ġ: ĠValue Wrapper Module < Set < kotlin . String >, ĠM >> Ġ: ĠValue Wrapper Module Delegate < Set < kotlin . String >, ĠM >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠgetCurrent Value ( module : ĠM ) Ġ= Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Be agle Core . implementation . localStorage Manager . string Sets [ module . id ] Ġ?: Ġmodule . initial Value ). also Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Listener For The First Time IfNeeded ( module , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . string Sets [ module . id ] Ġ?: Ġmodule . initial Value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠsetCurrent Value ( module : ĠM , ĠnewValue : ĠSet < kotlin . String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has ValueChanged ( newValue , Ġmodule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( module . is Value Pers isted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . localStorage Manager . string Sets [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . memory Storage Manager . string Sets [ module . id ] Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBe agle Core . implementation . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall On ValueChanged ( module , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPending ChangeEvent < T >( ĊĠĠĠĠĠĠĠ Ġval Ġmodule Id : Ġkotlin . String , ĊĠĠĠĠĠĠĠ Ġval Ġpending Value : ĠT ĊĠĠĠ Ġ) Ċ }