package Ġcom . m ichael fl is ar . settings . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Parcelable Ċ import Ġcom . m ichael fl is ar . dialogs . Dialog Setup Ċ import Ġcom . m ichael fl is ar . settings . core . classes . Dialog Context Ċ import Ġcom . m ichael fl is ar . settings . core . enums . Change Type Ċ import Ġcom . m ichael fl is ar . settings . core . interfaces .* Ċ import Ġcom . m ichael fl is ar . settings . core . internal . Concurrent Save Mutable List Ċ Ċ object ĠSettings Manager Ġ{ ĊĊĠĠĠ Ġ// Ġeasy Ġand Ġquick Ġsolution Ġto Ġavoid Ġthe Ġneed Ġof Ġa Ġcustom Ġinterface Ġto Ġlisten Ġfor Ġsetting Ġchanges Ġinside Ġan Ġactivity ĊĠĠĠ Ġ// Ġ- Ġnecessary Ġbecause Ġwe Ġcan 't Ġhand Ġon Ġa Ġcallback Ġ( which Ġis Ġnot Ġparcel able ) Ġto Ġthe Ġfragments Ġinside Ġthe Ġview Ġpager Ġmode ĊĠĠĠ Ġ// Ġ- ĠConcurrent Save Mutable List Ġis Ġused Ġbecause Ġthis Ġallows Ġthe Ġcallback Ġto Ġremove Ġitself Ġor Ġadd Ġnew Ġcallbacks Ġeven Ġfrom Ġwithin Ġthe Ġcallback Ġitself ĊĠĠĠ Ġprivate Ġval Ġcallbacks : ĠConcurrent Save Mutable List < I Settings Changed Callback > Ġ= ĠConcurrent Save Mutable List () ĊĠĠĠ Ġprivate Ġval Ġdialog Callbacks : ĠConcurrent Save Mutable List < I Settings Dialog EventHandler < *, Ġ* >> Ġ= ĠConcurrent Save Mutable List () ĊĊĠĠĠ Ġinternal Ġvar Ġsettings Provider : Ġ(( id : ĠLong ) Ġ-> ĠI Setting <* >) ? Ġ= Ġnull ĊĊĠĠĠ Ġ// var ĠDEBUG GER : Ġ(( tag : ĠString , Ġlog : ĠString ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġstorage Manager Instance : ĠI Settings Storage Manager ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġval Ġstorage Manager : ĠI Settings Storage Manager ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstorage Manager Instance Ġ?: Ġthrow ĠRuntimeException (" You Ġdid Ġnot Ġcall ĠSettings Manager . init (...) Ġyet !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( context : ĠContext , Ġstorage Manager : ĠI Settings Storage Manager ): ĠSettings Manager Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 ) Ġsave Ġapp Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext . application Context ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 ) Ġsave Ġstorage Ġmanager Ġand Ġsettings ĊĠĠĠĠĠĠĠ Ġthis . storage Manager Instance Ġ= Ġstorage Manager ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 3 ) Ġinit Ġall Ġmodules Ġ( this Ġshould Ġadd Ġtheir Ġdialog Ġcallbacks !) ĊĠĠĠĠĠĠĠ Ġstorage Manager . init () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 4 ) Ġhandle Ġdialog Ġevents Ġand Ġforward Ġthem Ġto Ġthe Ġdialog Ġcallbacks ĊĠĠĠĠĠĠĠ ĠDialog Setup . add Result Handler Ġ{ Ġevent , Ġfragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Dialog Event ( event , Ġfragment . parent Dialog Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* Ġprovide Ġan Ġ[ I Settings Provider ] Ġto Ġavoid Ġthe Ġneed Ġto Ġparcel Ġand Ġun parcel Ġsettings ĊĠĠĠĠ Ġ* Ġthis Ġcan Ġimprove Ġperformance Ġif Ġa Ġlot Ġof Ġsettings Ġare Ġused ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Settings Provider ( provider : Ġ( id : ĠLong ) Ġ-> ĠI Setting <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings Provider Ġ= Ġprovider ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage Manager Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcallbacks . clear () ĊĠĠĠĠĠĠĠ Ġdialog Callbacks . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Callback ( callback : ĠI Settings Changed Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallbacks . add ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunregister Callback ( callback : ĠI Settings Changed Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallbacks . remove ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Dialog EventHandler ( callback : ĠI Settings Dialog EventHandler < *, Ġ* >): ĠSettings Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Callbacks . add ( callback ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush Dialog Event ( event : ĠAny , Ġdialog Context : ĠDialog Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Callbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġforward Ġto Ġcallback Ġif Ġtype Ġfits Ġthe Ġhandler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . get Dialog Type ( event ) Ġ== Ġit . dialog Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Dialog Event ( event , Ġdialog Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ---------------- - ĊĠĠĠ Ġ// Ġnot ifier Ġfunctions ĊĠĠĠ Ġ// Ġ---------------- - ĊĊĠĠĠ Ġfun Ġnotify On Settings Changed Callbacks ( change Type : ĠChange Type , Ġsetting : ĠI Setting <* >, Ġsettings Data : ĠI Settings Data , ĠoldValue : ĠAny ?, ĠnewValue : ĠAny ?, Ġcall Settings On ValueChanged : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( call Settings On ValueChanged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetting . on ValueChanged ?. invoke ( settings Data , Ġchange Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Setting Changed ( change Type , Ġsetting , Ġsettings Data , ĠoldValue , ĠnewValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }