package Ġio . github . ge eks forge inc . locale manager Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Locale List Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . Linked HashSet ĊĊ Ċ object ĠLocale Utils Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Locale Utils " ĊĠĠĠ Ġfun Ġapply Locale ( context : ĠContext , Ġlanguage Code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocale : ĠLocale Ġ= Ġget Locale From Language Code ( language Code ) ĊĠĠĠĠĠĠĠ Ġupdate Resources ( context , Ġlocale ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ! is ĠApplication ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Context : ĠContext Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Resources ( application Context , Ġlocale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Locale From Language Code ( language Code : ĠString ): ĠLocale Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLocale ( language Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Resources ( context : ĠContext , Ġlocale : ĠLocale ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLocale . setDefault ( locale ) ĊĠĠĠĠĠĠĠ Ġval Ġresources : ĠResources Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠConfiguration ( resources . configuration ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Locale For Api N ou gat And Above ( configuration , Ġlocale ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Locale ( locale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresources . update Configuration ( configuration , Ġresources . display Metrics ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Locale ( context : ĠContext ): ĠLocale Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġcontext . resources . configuration ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . locales . get ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . locale ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Selected Locale Valid ( context : ĠContext , Ġselected Language Code : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetCurrent Locale ( context ) Ġ!= Ġget Locale From Language Code ( selected Language Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . N ) ĊĠĠĠ Ġfun Ġset Locale For Api N ou gat And Above ( configuration : ĠConfiguration , Ġlocale : ĠLocale ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlinked HashSet : ĠLinked HashSet < Locale > Ġ= ĠLinked HashSet () ĊĠĠĠĠĠĠĠ Ġ// Ġbring Ġthe Ġtarget Ġlocale Ġto Ġthe Ġfront Ġof Ġthe Ġset ĊĠĠĠĠĠĠĠ Ġlinked HashSet . add ( locale ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Locale List Ġ= ĠLocale List . getDefault () ĊĠĠĠĠĠĠĠ Ġval Ġlocale List : ĠArrayList < Locale > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdefault Locale List . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale List . add ( default Locale List [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġappend Ġother Ġlocales Ġsupported Ġby Ġthe Ġuser ĊĠĠĠĠĠĠĠ Ġlinked HashSet . addAll ( locale List ) ĊĠĠĠĠĠĠĠ Ġval Ġlocales : ĠArray < Locale ?> Ġ= ĠarrayOf Null s ( linked HashSet . size ) ĊĠĠĠĠĠĠĠ Ġval Ġfinal Locale List Ġ= ĠLocale List (* linked HashSet . toArray ( locales )) ĊĠĠĠĠĠĠĠ Ġconfiguration . set Locales ( final Locale List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Activity Title ( activity : ĠActivity ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġactivity ?. package Manager ?. getActivity Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . component Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . GET _ META _ DATA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo ?. label Res ?. let Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . setTitle ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ?. let Ġ{ ĠLog . e ( TAG , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ