/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 3 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . android . input method . latin . input logic Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . os . Message Ċ Ċ import Ġcom . android . input method . compat . Looper Compat Utils Ċ import Ġcom . android . input method . latin . Latin IME Ċ import Ġcom . android . input method . latin . Suggest ed Words Ċ import Ġcom . android . input method . latin . Suggest . On Get Suggest ed Words Callback Ċ import Ġcom . android . input method . latin . common . Input Pointers Ċ Ċ /** Ċ Ġ* ĠA Ġhelper Ġto Ġmanage Ġdeferred Ġtasks Ġfor Ġthe Ġinput Ġlogic . Ċ Ġ*/ Ċ internal Ġopen Ġclass ĠInput Logic Handler Ġ: ĠHandler . Callback Ġ{ ĊĠĠĠ Ġval Ġm Non UIT hread Handler : ĠHandler ? ĊĠĠĠ Ġ// ĠTODO : Ġremove Ġthis Ġreference . ĊĠĠĠ Ġval Ġm Latin IME : ĠLat in IME ? ĊĠĠĠ Ġval Ġm Input Logic : ĠInput Logic ? ĊĠĠĠ Ġprivate Ġval Ġm Lock Ġ= ĠAny () ĊĠĠĠ Ġvar ĠisIn Batch Input : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset Ġ// Ġsynchronized Ġusing Ġ{@ link Ġ# m Lock }. ĊĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Non UIT hread Handler Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Latin IME Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Input Logic Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( latin IME : ĠLat in IME , Ġinput Logic : ĠInput Logic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Thread Ġ= ĠHandler Thread ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Logic Handler :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġhandler Thread . start () ĊĠĠĠĠĠĠĠ Ġm Non UIT hread Handler Ġ= ĠHandler ( handler Thread . lo oper , Ġthis ) ĊĠĠĠĠĠĠĠ Ġm Latin IME Ġ= Ġlatin IME ĊĠĠĠĠĠĠĠ Ġm Input Logic Ġ= Ġinput Logic ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Non UIT hread Handler !!. remove Callbacks And Messages ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIn Ġunit Ġtests , Ġwe Ġcreate Ġseveral Ġinstances Ġof ĠLat in IME , Ġwhich Ġresults Ġin Ġseveral Ġinstances ĊĠĠĠ Ġ// Ġof ĠInput Logic Handler . ĠTo Ġavoid Ġthese Ġhandlers Ġl ing ering , Ġwe Ġcall Ġthis . ĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Non UIT hread Handler !!. lo oper . quit S af ely () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġa Ġmessage . ĊĠĠĠĠ Ġ* Ġ@ see Ġandroid . os . Handler . Callback . handle Message ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠCalled Ġon Ġthe ĠNon - UI Ġhandler Ġthread Ġby Ġthe ĠHandler Ġcode . ĊĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( msg . what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMSG _ GET _ SU G GEST ED _ WORDS Ġ-> Ġm Latin IME !!. get Suggest ed Words ( msg . arg 1 Ġ/* Ġinput Style Ġ*/, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . arg 2 Ġ/* Ġsequence Number Ġ*/, Ġmsg . obj Ġas ĠOn Get Suggest ed Words Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCalled Ġon Ġthe ĠUI Ġthread Ġby ĠInput Logic . ĊĠĠĠ Ġopen Ġfun ĠonStart Batch Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Batch Input Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFetch Ġsuggestions Ġcorresponding Ġto Ġan Ġupdate Ġof Ġa Ġbatch Ġinput . ĊĠĠĠĠ Ġ* Ġ@ param Ġbatch Pointers Ġthe Ġupdated Ġpointers , Ġincluding Ġthe Ġpart Ġthat Ġwas Ġpassed Ġlast Ġtime . ĊĠĠĠĠ Ġ* Ġ@ param Ġsequence Number Ġthe Ġsequence Ġnumber Ġassociated Ġwith Ġthis Ġbatch Ġinput . ĊĠĠĠĠ Ġ* Ġ@ param Ġis Tail Batch Input Ġtrue Ġif Ġthis Ġis Ġthe Ġend Ġof Ġa Ġbatch Ġinput , Ġfalse Ġif Ġit 's Ġan Ġupdate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠThis Ġmethod Ġcan Ġbe Ġcalled Ġfrom Ġany Ġthread Ġand Ġwill Ġsee Ġto Ġit Ġthat Ġthe Ġcorrect Ġthreads ĊĠĠĠ Ġ// Ġare Ġused Ġfor Ġparts Ġthat Ġrequire Ġit . ĠThis Ġmethod Ġwill Ġsend Ġa Ġmessage Ġto Ġthe ĠNon - UI Ġhandler ĊĠĠĠ Ġ// Ġthread Ġto Ġpull Ġsuggestions , Ġand Ġget Ġthe Ġin lined Ġcallback Ġto Ġget Ġcalled Ġon Ġthe ĠNon - UI ĊĠĠĠ Ġ// Ġhandler Ġthread . ĠIf Ġthis Ġis Ġthe Ġend Ġof Ġa Ġbatch Ġinput , Ġthe Ġcallback Ġwill Ġthen Ġproceed Ġto ĊĠĠĠ Ġ// Ġsend Ġa Ġmessage Ġto Ġthe ĠUI Ġhandler Ġin ĠLat in IME Ġso Ġthat Ġshowing Ġsuggestions Ġcan Ġbe Ġdone Ġon ĊĠĠĠ Ġ// Ġthe ĠUI Ġthread . ĊĠĠĠ Ġprivate Ġfun Ġupdate Batch Input ( batch Pointers : ĠInput Pointers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠInt , Ġis Tail Batch Input : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isIn Batch Input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBatch Ġinput Ġhas Ġended Ġor Ġcanceled Ġwhile Ġthe Ġmessage Ġwas Ġbeing Ġdelivered . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Input Logic !!. word Composer . set Batch Input Pointers ( batch Pointers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠOn Get Suggest ed Words Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Get Suggest ed Words ( suggest ed Words : ĠSuggest ed Words ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Gesture Suggestions With Preview Visual s ( suggest ed Words , Ġis Tail Batch Input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Suggest ed Words ( if Ġ( is Tail Batch Input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuggest ed Words . INPUT _ STYLE _ TAIL _ BATCH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuggest ed Words . INPUT _ STYLE _ UPDATE _ BATCH , Ġsequence Number , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Gesture Suggestions With Preview Visual s ( suggest ed Words For Batch Input : ĠSuggest ed Words , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Tail Batch Input : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuggested Words To Show Suggestions : ĠSuggest ed Words ĊĠĠĠĠĠĠĠ Ġ// ĠWe 're Ġnow Ġinside Ġthe Ġcallback . ĠThis Ġalways Ġruns Ġon Ġthe ĠNon - UI Ġthread , ĊĠĠĠĠĠĠĠ Ġ// Ġno Ġmatter Ġwhat Ġthread Ġupdate Batch Input Ġwas Ġoriginally Ġcalled Ġon . ĊĠĠĠĠĠĠĠ Ġif Ġ( suggest ed Words For Batch Input . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġold Ġsuggestions Ġif Ġwe Ġdon 't Ġhave Ġany Ġnew Ġones . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPrevious Ġsuggestions Ġare Ġfound Ġin ĠInput Logic # m Suggest ed Words . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSince Ġthese Ġare Ġthe Ġmost Ġrecent Ġones Ġand Ġwe Ġjust Ġre computed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnew Ġones Ġto Ġupdate Ġthem , Ġthen Ġthe Ġprevious Ġones Ġare Ġthere . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuggested Words To Show Suggestions Ġ= Ġm Input Logic !!. m Suggest ed Words ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuggested Words To Show Suggestions Ġ= Ġsuggested Words For Batch Input ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Latin IME !!. m Handler . show Gesture Preview And Suggestion Strip ( suggest ed Words To Show Suggestions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Tail Batch Input Ġ/* Ġdismiss Gesture Floating Preview Text Ġ*/) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Tail Batch Input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Batch Input Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġfollowing Ġcall Ġs chedules Ġon End Batch Input Internal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġbe Ġcalled Ġon Ġthe ĠUI Ġthread . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Latin IME . m Handler . show Tail Batch Input Result ( suggest ed Words To Show Suggestions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġa Ġbatch Ġinput . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġf etches Ġsuggestions Ġand Ġupdates Ġthe Ġsuggestion Ġstrip Ġand Ġthe Ġfloating Ġtext Ġpreview . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbatch Pointers Ġthe Ġupdated Ġbatch Ġpointers . ĊĠĠĠĠ Ġ* Ġ@ param Ġsequence Number Ġthe Ġsequence Ġnumber Ġassociated Ġwith Ġthis Ġbatch Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠCalled Ġon Ġthe ĠUI Ġthread Ġby ĠInput Logic . ĊĠĠĠ Ġopen Ġfun ĠonUpdate Batch Input ( batch Pointers : ĠInput Pointers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Batch Input ( batch Pointers , Ġsequence Number , Ġfalse Ġ/* Ġis Tail Batch Input Ġ*/) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel Ġa Ġbatch Ġinput . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġas Ġopposed Ġto Ġupdate Tail Batch Input , Ġwe Ġdo Ġthe ĠUI Ġside Ġof Ġthis Ġimmediately Ġon Ġthe ĊĠĠĠĠ Ġ* Ġsame Ġthread , Ġrather Ġthan Ġget Ġthis Ġto Ġcall Ġa Ġmethod Ġin ĠLat in IME . ĠThis Ġis Ġbecause ĊĠĠĠĠ Ġ* Ġcancel ing Ġa Ġbatch Ġinput Ġdoes Ġnot Ġnecess it ate Ġthe Ġlong Ġoperation Ġof Ġpulling Ġsuggestions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠCalled Ġon Ġthe ĠUI Ġthread Ġby ĠInput Logic . ĊĠĠĠ Ġopen Ġfun Ġon Cancel Batch Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Batch Input Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrigger Ġan Ġupdate Ġfor Ġa Ġtail Ġbatch Ġinput . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA Ġtail Ġbatch Ġinput Ġis Ġthe Ġlast Ġupdate Ġfor Ġa Ġgesture , Ġthe Ġone Ġthat Ġis Ġtriggered Ġafter Ġthe ĊĠĠĠĠ Ġ* Ġuser Ġl ifts Ġtheir Ġfinger . ĠThis Ġmethod Ġs chedules Ġfetching Ġsuggestions Ġon Ġthe Ġnon - UI Ġthread , ĊĠĠĠĠ Ġ* Ġthen Ġwhen Ġthe Ġsuggestions Ġare Ġcomputed Ġit Ġcomes Ġback Ġon Ġthe ĠUI Ġthread Ġto Ġupdate Ġthe ĊĠĠĠĠ Ġ* Ġsuggestion Ġstrip , Ġcommit Ġthe Ġfirst Ġsuggestion , Ġand Ġdismiss Ġthe Ġfloating Ġtext Ġpreview . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbatch Pointers Ġthe Ġupdated Ġbatch Ġpointers . ĊĠĠĠĠ Ġ* Ġ@ param Ġsequence Number Ġthe Ġsequence Ġnumber Ġassociated Ġwith Ġthis Ġbatch Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠCalled Ġon Ġthe ĠUI Ġthread Ġby ĠInput Logic . ĊĠĠĠ Ġopen Ġfun Ġupdate Tail Batch Input ( batch Pointers : ĠInput Pointers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Batch Input ( batch Pointers , Ġsequence Number , Ġtrue Ġ/* Ġis Tail Batch Input Ġ*/) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget Suggest ed Words ( input Style : ĠInt , Ġsequence Number : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : ĠOn Get Suggest ed Words Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Non UIT hread Handler ?. obtain Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMSG _ GET _ SU G GEST ED _ WORDS , Ġinput Style , Ġsequence Number , Ġcallback )?. send To Target () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget Suggest ed Words ( input Style : ĠInt , Ġsequence Number : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ(( Suggest ed Words ) Ġ-> ĠUnit )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Non UIT hread Handler ?. obtain Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMSG _ GET _ SU G GEST ED _ WORDS , Ġinput Style , Ġsequence Number , Ġobject : ĠOn Get Suggest ed Words Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Get Suggest ed Words ( suggest ed Words : ĠSuggest ed Words ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( suggest ed Words ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ?. send To Target () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMSG _ GET _ SU G GEST ED _ WORDS Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ// ĠA Ġhandler Ġthat Ġnever Ġdoes Ġanything . ĠThis Ġis Ġused Ġfor Ġcases Ġwhere Ġevents Ġcome Ġbefore Ġanything ĊĠĠĠĠĠĠĠ Ġ// Ġis Ġinitialized , Ġthough Ġprobably Ġonly Ġthe Ġmonkey Ġcan Ġactually Ġdo Ġthis . ĊĠĠĠĠĠĠĠ Ġval ĠNULL _ HANDLER : ĠInput Logic Handler Ġ= Ġobject Ġ: ĠInput Logic Handler () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreset () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Batch Input () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonUpdate Batch Input ( batch Pointers : ĠInput Pointers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancel Batch Input () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Tail Batch Input ( batch Pointers : ĠInput Pointers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Suggest ed Words ( sessionId : ĠInt , Ġsequence Number : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : ĠOn Get Suggest ed Words Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ