/* čĊ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠOle ks and r ĠBe z ush ko čĊ Ġ* čĊ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa čĊ Ġ* Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), čĊ Ġ* Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation čĊ Ġ* Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , čĊ Ġ* Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe čĊ Ġ* ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : čĊ Ġ* čĊ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall čĊ Ġ* Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . čĊ Ġ* čĊ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , čĊ Ġ* ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES čĊ Ġ* ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND čĊ Ġ* ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT čĊ Ġ* ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , čĊ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING čĊ Ġ* ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE čĊ Ġ* ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . čĊ Ġ*/ čĊč Ċ package Ġcom . ins iders er . android . movies . utils . system čĊč Ċ import Ġandroid . app . Application č Ċ import Ġandroid . content . Broadcast Receiver č Ċ import Ġandroid . content . Context č Ċ import Ġandroid . content . Intent č Ċ import Ġandroid . content . Intent . ACTION _ LOCAL E _ CHANGED č Ċ import Ġandroid . content . Intent Filter č Ċ import Ġjava . lang . ref . Weak Reference č Ċ import Ġjavax . inject . Inject č Ċ import Ġjavax . inject . Singleton čĊč Ċ @ Singleton č Ċ class ĠLocale Observer Ġ@ Inject Ġconstructor ( application : ĠApplication ) Ġ{ čĊĠĠĠĠčĊĠĠĠ Ġprivate Ġval Ġcallbacks Ġ= Ġmutable ListOf < Weak Reference < Locale Changed Callback >>() čĊĠĠĠĠčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġapplication . register Receiver ( Locale Broadcast Receiver (), ĠIntent Filter ( ACTION _ LOCAL E _ CHANGED )) čĊĠĠĠ Ġ} čĊĠĠĠĠčĊĠĠĠ Ġfun Ġadd Callback ( callback : ĠLocale Changed Callback ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsynchronized ( callback ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks Ġ+= ĠWeak Reference ( callback ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠĠčĊĠĠĠ Ġprivate Ġfun Ġnotify Locale Changed () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġpending Callbacks Ġ= Ġsynchronized ( callbacks ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . map NotNull Ġ{ Ġit . get () Ġ}. also Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . clear () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠčĊĠĠĠĠĠĠĠ Ġpending Callbacks . forEach Ġ{ Ġit () Ġ} čĊĠĠĠ Ġ} čĊĠĠĠĠčĊĠĠĠ Ġprivate Ġinner Ġclass ĠLocale Broadcast Receiver Ġ: ĠBroadcast Receiver () Ġ{ čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( intent ?. action Ġ== ĠACTION _ LOCAL E _ CHANGED ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Locale Changed () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊč Ċ type alias ĠLocale Changed Callback Ġ= Ġ() Ġ-> ĠUnit