package Ġorg . tot sch n ig . ocr Ċ Ċ import ĠC atal ano . Imaging . Fast Bitmap Ċ import ĠC atal ano . Imaging . Filters . B rad ley Local Threshold Ċ import ĠC atal ano . Imaging . I Apply In Place Ċ import Ġandroid . app . Application Ċ import Ġandroid . app . Download Manager Ċ import Ġandroid . app . Download Manager . Request . VIS IBILITY _ VISIBLE _ NOTIFY _ COMPLETED Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . google code . t esseract . android . Tess Base API Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ const Ġval ĠT ES SER ACT _ DOWNLOAD _ FOLDER Ġ= Ġ" t esseract 4 / fast /" Ċ Ċ class ĠO cr ViewModel ( application : ĠApplication ) Ġ: ĠBase ViewModel ( application ) Ġ{ ĊĠĠĠ Ġval Ġpref Key Ġ= Ġapplication . getString ( R . string . pref _ t esseract _ language _ key ) ĊĊĠĠĠ Ġval Ġpreferences : ĠSharedPreferences ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠPreference Manager . getDefault SharedPreferences ( getApplication ()) ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . load Library (" jpeg ") ĊĠĠĠĠĠĠĠ ĠSystem . load Library (" png ") ĊĠĠĠĠĠĠĠ ĠSystem . load Library (" le pton ica ") ĊĠĠĠĠĠĠĠ ĠSystem . load Library (" t esseract ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun Text Recognition ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġget Application < Application >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! t ess Data Exists ( application )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( application . getString ( R . string . configuration _ pending )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . content Resolver . open InputStream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Mutable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Preferred Config Ġ= ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Tess Base API ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! init ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . get External Files Dir ( null ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT ES SER ACT _ DOWNLOAD _ FOLDER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). path , Ġlanguage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Could Ġnot Ġinit ĠT esseract ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" tes sed it _ do _ invert ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" load _ system _ d aw g ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" load _ freq _ d aw g ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" load _ p unc _ d aw g ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" load _ number _ d aw g ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" load _ un amb ig _ d aw g ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" load _ big ram _ d aw g ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable (" load _ fixed _ length _ d aw gs ", ĠT ess Base API . VAR _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Seg Mode Ġ= ĠT ess Base API . Page Seg Mode . PS M _ AUTO _ OS D ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image ( with ( Fast Bitmap ( it . rotate ( get Orientation ( uri )))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Gray scale () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg : ĠI Apply In Place Ġ= ĠB rad ley Local Threshold () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . apply In Place ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut F 8 Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġmutable ListOf < Line >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( result Iterator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget UTF 8 Text ( Tess Base API . Page Iterator Level . R IL _ TEXT LINE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Bounding Rect Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Bounding Rect ( Tess Base API . Page Iterator Level . R IL _ TEXT LINE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġmutable ListOf < Element >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget UTF 8 Text ( Tess Base API . Page Iterator Level . R IL _ WORD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Bounding Rect Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Bounding Rect ( Tess Base API . Page Iterator Level . R IL _ WORD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements . add ( Element ( word Text , Ġword Bounding Rect )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ(! is At Final Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT ess Base API . Page Iterator Level . R IL _ TEXT LINE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT ess Base API . Page Iterator Level . R IL _ WORD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ&& Ġnext ( Tess Base API . Page Iterator Level . R IL _ WORD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ( Line ( line Text , Ġline Bounding Rect , Ġelements )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( next ( Tess Base API . Page Iterator Level . R IL _ TEXT LINE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . post Value ( Result . success ( Text ( listOf ( TextBlock ( lines ))))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . post Value ( Result . failure ( Exception (" Unable Ġto Ġopen Ġ$ uri "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . post Value ( Result . failure ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠBitmap . rotate ( degrees : ĠInt ): ĠBitmap Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( degrees Ġ== Ġ 0 ) Ġthis Ġelse ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix (). apply Ġ{ Ġpost Rotate ( degrees . toFloat ()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun ĠfilePath ( language : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġ"${ TES SER ACT _ DOWNLOAD _ FOLDER } t ess data /${ language }. trained data " ĊĊĠĠĠ Ġprivate Ġfun ĠfileName ( language : ĠString ) Ġ= Ġ"${ language }. trained data " ĊĊĠĠĠ Ġfun Ġt ess Data Exists ( context : ĠContext ): ĠBoolean Ġ= Ġlanguage ()?. let Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ( context . get External Files Dir ( null ), ĠfilePath ( it )). exists () ĊĠĠĠ Ġ} Ġ?: Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġlanguage (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreferences . getString ( pref Key , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload Tess Data ( context : ĠContext ) Ġ= Ġlanguage ()?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" https :// github . com / t esseract - ocr / t ess data _ fast / raw / 4 . 0 . 0 /${ fileName ( it )} ") ĊĠĠĠĠĠĠĠ ĠContext Compat . getSystem Service ( context , ĠDownload Manager :: class . java )?. enqueue ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Manager . Request ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pref _ t esseract _ language _ title ) Ġ+ Ġ" Ġ: Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Languages ( context )[ it ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDescription ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Destination In External Files Dir ( context , Ġnull , ĠfilePath ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Notification Visibility ( VIS IBILITY _ VISIBLE _ NOTIFY _ COMPLETED ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġget Tess er act Language DisplayName ( context , Ġit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Languages ( context : ĠContext ): ĠMap < String , ĠString > Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . resources . getString Array ( R . array . pref _ t esseract _ language _ values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġto Ġget Tess er act Language DisplayName ( context , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠ Ġprivate Ġfun Ġget Tess er act Language DisplayName ( context : ĠContext , Ġlocale String : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocale Parts Ġ= Ġlocale String . split ("_ ") ĊĠĠĠĠĠĠĠ Ġval Ġlang Ġ= Ġwhen Ġ( locale Parts [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mr " Ġ-> Ġ" kur " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" chi " Ġ-> Ġ" z ho " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlocale Parts [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlocale From Context Ġ= Ġcontext . resources . configuration . locale ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( locale Parts . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript Ġ= Ġwhen Ġ( locale Parts [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sim " Ġ-> Ġ" H ans " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tra " Ġ-> Ġ" H ant " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlocale Parts [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . Builder (). set Language ( lang ). set Script ( script ). build (). get DisplayName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocale From Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Locale ( lang ). get DisplayName ( locale From Context )} Ġ($ script )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocale ( lang ). get DisplayName ( locale From Context ) ĊĠĠĠ Ġ} Ċ }