package Ġcom . ak ex orc ist . localization activity . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġjava . util .* ĊĊ Ċ object ĠLanguage Setting Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠP REFERENCE _ LANGUAGE Ġ= Ġ" pref _ language " ĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ CURRENT _ LANGUAGE Ġ= Ġ" key _ language " ĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ DEFAULT _ LANGUAGE Ġ= Ġ" key _ default _ language " ĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ FOLLOW _ SYSTEM = Ġ" key _ follow _ system _ language " ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ LOCAL E Ġ= ĠLocale . getDefault () ĊĠĠĠ Ġprivate Ġval Ġdefault Locale : ĠLocale Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Locale . getDefault () ĊĠĠĠĠĠĠĠ Ġreturn ĠDEFAULT _ LOCAL E ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġset Follow System Language ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preference ( context , ĠKEY _ FOLLOW _ SYSTEM , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġunset Follow System Language ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preference ( context , ĠKEY _ FOLLOW _ SYSTEM , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠsetDefault Language ( context : ĠContext , Ġlocale : ĠLocale ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preference ( context , ĠKEY _ DEFAULT _ LANGUAGE , Ġlocale . for Saving ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetDefault Language ( context : ĠContext ): ĠLocale Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Follow System ( context )) Ġdefault Locale Ġelse Ġget Preference ( context , ĠKEY _ DEFAULT _ LANGUAGE )?. let Ġ{ Ġlocale : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale . toLocale () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Locale ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLocale . for Saving (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Language Tag () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtoString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . toLocale (): ĠLocale ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . for Language Tag ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġsplit ("_ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( info . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠLocale ( info [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠLocale ( info [ 0 ], Ġinfo [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> ĠLocale ( info [ 0 ], Ġinfo [ 1 ], Ġinfo [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Follow System ( context : ĠContext ) Ġ= Ġget Preference Boolean ( context , ĠKEY _ FOLLOW _ SYSTEM , Ġtrue ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġset Language ( context : ĠContext , Ġlocale : ĠLocale ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLocale . setDefault ( locale ) ĊĠĠĠĠĠĠĠ Ġset Preference ( context , ĠKEY _ CURRENT _ LANGUAGE , Ġlocale . for Saving ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Language ( context : ĠContext ): ĠLocale ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Follow System ( context )) Ġdefault Locale Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Preference ( context , ĠKEY _ CURRENT _ LANGUAGE )?. let Ġ{ Ġlocale : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocale . toLocale () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Language WithDefault ( context : ĠContext , Ġdefault : ĠLocale ): ĠLocale Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Language ( context )?. let Ġ{ Ġlocale Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Language ( context , Ġdefault ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Preference ( context : ĠContext , Ġkey : ĠString , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences ( PREFER ENCE _ LANGUAGE , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Boolean ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Preference ( context : ĠContext , Ġkey : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences ( PREFER ENCE _ LANGUAGE , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Preference ( context : ĠContext , Ġkey : ĠString , Ġdefault : ĠString ? Ġ= Ġnull ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences ( PREFER ENCE _ LANGUAGE , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getString ( key , Ġdefault ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Preference Boolean ( context : ĠContext , Ġkey : ĠString , Ġdefault : ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences ( PREFER ENCE _ LANGUAGE , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean ( key , Ġdefault ) ĊĊĠĠĠ Ġ@ Visible ForTesting ( otherwise Ġ= ĠVis ible ForTesting . PRIVATE ) ĊĠĠĠ Ġfun Ġclear ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences ( PREFER ENCE _ LANGUAGE , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} Ċ } Ċ