package Ġjp . j ug g ler . sub way to oter . table čĊč Ċ import Ġandroid . content . Content Values č Ċ import Ġandroid . database . Cursor č Ċ import Ġandroid . database . sqlite . SQLite Database č Ċ import Ġjp . j ug g ler . sub way to oter . global . app Database č Ċ import Ġjp . j ug g ler . util . Log Category č Ċ import Ġjp . j ug g ler . util . Table Companion č Ċ import Ġjp . j ug g ler . util . Word T rie Tree čĊč Ċ object ĠM uted Word Ġ: ĠTable Companion Ġ{ čĊčĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLog Category (" Mut ed Word ") čĊčĊĠĠĠ Ġoverride Ġval Ġtable Ġ= Ġ" word _ mute " čĊĠĠĠ Ġconst Ġval ĠCOL _ ID Ġ= Ġ"_ id " čĊĠĠĠ Ġconst Ġval ĠCOL _ NAME Ġ= Ġ" name " čĊĠĠĠ Ġprivate Ġconst Ġval ĠCOL _ TIME _ SAVE Ġ= Ġ" time _ save " čĊčĊĠĠĠ Ġoverride Ġfun Ġon DB Create ( db : ĠSQLite Database ) Ġ{ čĊĠĠĠĠĠĠĠ Ġlog . d (" on DB Create !") čĊĠĠĠĠĠĠĠ Ġdb . exec SQL ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" create Ġtable Ġif Ġnot Ġexists Ġ$ table čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ($ COL _ ID ĠINTEGER ĠPRIMARY ĠKEY čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, $ COL _ NAME Ġtext Ġnot Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, $ COL _ TIME _ SAVE Ġinteger Ġnot Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) """. trim Indent () čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġdb . exec SQL (" create Ġunique Ġindex Ġif Ġnot Ġexists Ġ${ table }_ name Ġon Ġ$ table ( name )") čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon DB Upgrade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( old Version Ġ< Ġ 1 1 Ġ&& Ġnew Version Ġ>= Ġ 1 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġon DB Create ( db ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġsave ( word : ĠString ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( word Ġ== Ġnull ) Ġreturn čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcv Ġ= ĠContent Values () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcv . put ( COL _ NAME , Ġword ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcv . put ( COL _ TIME _ SAVE , Ġnow ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Database . replace ( table , Ġnull , Ġcv ) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( ex , Ġ" save Ġfailed .") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġcreate Cursor (): ĠCursor Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġapp Database . query ( table , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġ"$ COL _ NAME Ġasc ") čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġdelete ( name : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Database . delete ( table , Ġ"$ COL _ NAME = ?", ĠarrayOf ( name )) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( ex , Ġ" delete Ġfailed .") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// ĉ private Ġstatic Ġfinal ĠString [] Ġis Mut ed _ projection Ġ= Ġnew ĠString []{ COL _ NAME }; čĊĠĠĠ Ġ// ĉ private Ġstatic Ġfinal ĠString ĠĠ Ġis Mut ed _ where Ġ= ĠCOL _ NAME +" =? "; čĊĠĠĠ Ġ// ĉ private Ġstatic Ġfinal ĠThread Local < String []> Ġis Mut ed _ where _ arg Ġ= Ġnew ĠThread Local < String [] >() Ġ{ čĊĠĠĠ Ġ// ĉ ĉ @ Override Ġprotected ĠString [] Ġinitial Value () Ġ{ čĊĠĠĠ Ġ// ĉĉ ĉ return Ġnew ĠString [ 1 ]; čĊĠĠĠ Ġ// ĉ ĉ } čĊĠĠĠ Ġ// ĉ }; čĊĠĠĠ Ġ// ĉ public Ġstatic Ġboolean Ġis Mut ed ( ĠString Ġapp _ name Ġ){ čĊĠĠĠ Ġ// ĉ ĉ if ( Ġapp _ name Ġ== Ġnull Ġ) Ġreturn Ġfalse ; čĊĠĠĠ Ġ// ĉ ĉ try { čĊĠĠĠ Ġ// ĉĉ ĉ String [] Ġwhere _ arg Ġ= Ġis Mut ed _ where _ arg . get (); čĊĠĠĠ Ġ// ĉĉ ĉ where _ arg [ 0 ] Ġ= Ġapp _ name ; čĊĠĠĠ Ġ// ĉĉ ĉ Cursor Ġcursor Ġ= ĠApp 1 . get DB (). query ( Ġtable , Ġis Mut ed _ projection , is Mut ed _ where Ġ, Ġwhere _ arg , Ġnull , Ġnull , Ġnull Ġ); čĊĠĠĠ Ġ// ĉĉ ĉ try { čĊĠĠĠ Ġ// ĉĉĉ ĉ if ( Ġcursor . moveTo First () Ġ){ čĊĠĠĠ Ġ// ĉĉĉĉ ĉ return Ġtrue ; čĊĠĠĠ Ġ// ĉĉĉ ĉ } čĊĠĠĠ Ġ// ĉĉ ĉ } finally { čĊĠĠĠ Ġ// ĉĉĉ ĉ cursor . close (); čĊĠĠĠ Ġ// ĉĉ ĉ } čĊĠĠĠ Ġ// ĉ ĉ } catch ( ĠThrowable Ġex Ġ){ čĊĠĠĠ Ġ// ĉĉ ĉ warning . e ( Ġex , Ġ" load Ġfailed ." Ġ); čĊĠĠĠ Ġ// ĉ ĉ } čĊĠĠĠ Ġ// ĉ ĉ return Ġfalse ; čĊĠĠĠ Ġ// ĉ } čĊčĊĠĠĠ Ġval Ġname Set : ĠWord T rie Tree čĊĠĠĠĠĠĠĠ Ġget () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Ġ= ĠWord T rie Tree () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Database . query ( table , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ Ġcursor Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx _ name Ġ= Ġcursor . getColumnIndex ( COL _ NAME ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġcursor . getString ( idx _ name ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdst . add ( s ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . trace ( ex ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdst čĊĠĠĠĠĠĠĠ Ġ} č Ċ } čĊ