package Ġno . div v un . dictionary Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . android . input method . latin . Dictionary Ċ import Ġcom . android . input method . latin . N gram Context Ċ import Ġcom . android . input method . latin . Suggest ed Words . Suggest ed Word Info Ċ import Ġcom . android . input method . latin . common . Comp osed Data Ċ import Ġcom . android . input method . latin . settings . Settings Values For Suggestion Ċ import Ġno . div v un . div v un spell . Spell er Config Ċ import Ġno . div v un . div v un spell . Th fst Chunk ed Box Spell er Ċ import Ġno . div v un . div v un spell . Th fst Chunk ed Box Spell er Archive Ċ import Ġno . div v un . package observer . Spell er Archive Watcher Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠDiv v un Dictionary ( private Ġval Ġcontext : ĠContext ?, Ġprivate Ġval Ġlocale : ĠLocale ?) Ġ: ĠDictionary ( TYPE _ MAIN , Ġlocale ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġspell er Archive Watcher : ĠSp eller Archive Watcher ? Ġ= Ġcontext ?. let Ġ{ ĠSp eller Archive Watcher ( it , Ġlocale !! ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġspell er Ġget (): ĠTh fst Chunk ed Box Spell er ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull Ġ|| Ġlocale Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġspell er Ġ= Ġspell er Archive Watcher ?. archive ?. spell er () ĊĠĠĠĠĠĠĠ Ġif Ġ( spell er Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspell er ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġno Ġpackage , Ġtry Ġgetting Ġit Ġfrom Ġthe Ġassets . ĊĠĠĠĠĠĠĠ Ġval Ġb hf st Name Ġ= Ġ"${ locale . to Language Tag ()}. bh fst " ĊĠĠĠĠĠĠĠ Ġval Ġb hf st File Ġ= ĠFile ( context . cacheDir , Ġb hf st Name ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! bh fst File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Ġ= Ġcontext . assets . open ( bh fst Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasset . copy To ( bh fst File . output Stream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġthis . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! bh fst File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell er Archive Watcher ?. archive Ġ= ĠTh fst Chunk ed Box Spell er Archive . open ( bh fst File . path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspell er Archive Watcher ?. archive ?. spell er () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore ĠRust Ġerrors Ġthat Ġare Ġjust Ġabout Ġmissing Ġfiles . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! e . toString (). contains (" No Ġsuch Ġfile Ġor Ġdirectory ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Div v un Dictionary Created ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Suggestions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposed Data : ĠComp osed Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn gram Context : ĠN gram Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprox imity Info Handle : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Values For Suggestion : ĠSettings Values For Suggestion , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsessionId : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweight For Locale : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Out Weight Of Lang Model Vs Spatial Model : ĠFloat Array ĊĠĠĠ Ġ): ĠArrayList < Suggest ed Word Info > Ġ{ ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" get Suggestions ") ĊĠĠĠĠĠĠĠ Ġval Ġspell er Ġ= Ġthis . spell er Ġ?: Ġreturn ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġcomposed Data . m Typed Word . trim () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( word Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w tf (" Word Ġwas Ġinvalid !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Got Ġspell er ") ĊĊĠĠĠĠĠĠĠ Ġval Ġsuggestions Ġ= Ġmutable ListOf ( composed Data . m Typed Word ) ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠSp eller Config ( n Best Ġ= ĠN _ BEST _ SU G GEST ION _ SIZE , Ġmax Weight Ġ= ĠMAX _ WEIGHT ) ĊĠĠĠĠĠĠĠ Ġspell er . suggest ( word , Ġconfig ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuggestions . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTim ber . d ("$ suggestions ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsuggestions . map Indexed Ġ{ Ġindex , Ġsuggestion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuggest ed Word Info ( suggestion , Ġn gram Context . extract Prev Words Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuggestions . size Ġ- Ġindex , ĠSuggest ed Word Info . KIND _ COR RECTION , Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuggest ed Word Info . NOT _ AN _ INDEX , ĠSuggest ed Word Info . NOT _ A _ CONF ID ENCE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuggest ed Word Info ( suggestion , Ġn gram Context . extract Prev Words Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuggest ed Word Info . MAX _ SCORE , ĠSuggest ed Word Info . KIND _ TYPE D , Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuggest ed Word Info . NOT _ AN _ INDEX , ĠSuggest ed Word Info . NOT _ A _ CONF ID ENCE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisIn Dictionary ( word : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspell er Ġ= Ġthis . spell er Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġspell er . is Correct ( word ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠN _ BEST _ SU G GEST ION _ SIZE Ġ= Ġ 3 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ WEIGHT Ġ= Ġ 4 9 9 9 . 9 9 f ĊĠĠĠ Ġ} Ċ }