/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 0 8 Ġ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 . keyboard Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Context Theme Wrapper Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġcom . android . input method . event . Event Ċ import Ġcom . android . input method . keyboard . Keyboard Layout Set . Keyboard Layout Set Exception Ċ import Ġcom . android . input method . keyboard . emoji . Emoji Pa let tes View Ċ import Ġcom . android . input method . keyboard . internal . Keyboard State Ċ import Ġcom . android . input method . keyboard . internal . Keyboard Texts Set Ċ import Ġcom . android . input method . latin .* Ċ import Ġcom . android . input method . latin . define . Production Flags Ċ import Ġcom . android . input method . latin . settings . Settings Ċ import Ġcom . android . input method . latin . settings . Settings Values Ċ import Ġcom . android . input method . latin . utils .* Ċ Ċ class ĠKeyboard Switch er Ġprivate Ġconstructor () // ĠInt ention al Ġempty Ġconstructor Ġfor Ġsingleton . ĊĠĠĠ Ġ: ĠKeyboard State . Switch Actions Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠmCurrent Input View : ĠInput View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Main Keyboard Frame : ĠView ĊĠĠĠ Ġvar Ġmain Keyboard View : ĠMain Keyboard View ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Emoji Pa let tes View : ĠEmoji Pa let tes View ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Latin IME : ĠLat in IME ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Rich Imm : ĠRich Input Method Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm State : ĠKeyboard State ĊĊĠĠĠ Ġprivate Ġvar Ġm Is Hardware Accel erated Drawing Enabled : ĠBoolean Ġ= Ġfalse ĊĊĊĠĠĠ Ġprivate Ġvar Ġm Keyboard Layout Set : ĠKeyboard Layout Set ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠTODO : ĠThe Ġfollowing Ġ{@ link ĠKeyboard Texts Set } Ġshould Ġbe Ġin Ġ{@ link ĠKeyboard Layout Set }. ĊĠĠĠ Ġprivate Ġval Ġm Keyboard Texts Set Ġ= ĠKeyboard Texts Set () ĊĊĠĠĠ Ġprivate Ġvar Ġm Keyboard Theme : ĠKeyboard Theme ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Theme Context : ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġkeyboard : ĠKeyboard ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( main Keyboard View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Keyboard View !!. keyboard ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠ Ġval Ġkeyboard Switch State : ĠKeyboard Switch State ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhidden Ġ= Ġ! is Showing Emoji Pa let tes Ġ&& Ġ( m Keyboard Layout Set Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġmain Keyboard View Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ! main Keyboard View !!. is Shown ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKeyboard Switch State . HIDDEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Showing Emoji Pa let tes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKeyboard Switch State . E MO JI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Showing Keyboard Id ( Keyboard Id . ELEMENT _ SYMBOL S _ SHIFT ED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKeyboard Switch State . SYMBOL S _ SHIFT ED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKeyboard Switch State . OTHER ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġis Showing Emoji Pa let tes : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis :: m Emoji Pa let tes View . isInitialized Ġ&& Ġm Emoji Pa let tes View . is Shown ĊĊĠĠĠ Ġval Ġis Showing More Keys Panel : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( is Showing Emoji Pa let tes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġmain Keyboard View !!. is Showing More Keys Panel ĊĊĠĠĠ Ġval Ġvisible Keyboard View : ĠView ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( is Showing Emoji Pa let tes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġmain Keyboard View ĊĊĠĠĠ Ġval Ġkeyboard Shift Mode : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeyboard Ġ= Ġkeyboard Ġ?: Ġreturn ĠWord Composer . CAPS _ MODE _ OFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( keyboard . m Id . m Element Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyboard Id . ELEMENT _ ALPH AB ET _ SHIFT _ LOCK ED , ĠKeyboard Id . ELEMENT _ ALPH AB ET _ SHIFT _ LOCK _ SHIFT ED Ġ-> Ġreturn ĠWord Composer . CAPS _ MODE _ MAN UAL _ SHIFT _ LOCK ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyboard Id . ELEMENT _ ALPH AB ET _ MAN UAL _ SHIFT ED Ġ-> Ġreturn ĠWord Composer . CAPS _ MODE _ MAN UAL _ SHIFT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyboard Id . ELEMENT _ ALPH AB ET _ AUT OM AT IC _ SHIFT ED Ġ-> Ġreturn ĠWord Composer . CAPS _ MODE _ AUTO _ SHIFT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĠWord Composer . CAPS _ MODE _ OFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcurrent Keyboard Script Id : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( null Ġ== Ġm Keyboard Layout Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScript Utils . SCRIPT _ UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġm Keyboard Layout Set !!. script Id ĊĊĠĠĠ Ġprivate Ġfun Ġinit Internal ( latin I me : ĠLat in IME ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Latin IME Ġ= Ġlatin I me ĊĠĠĠĠĠĠĠ Ġm Rich Imm Ġ= ĠRich Input Method Manager . getInstance () ĊĠĠĠĠĠĠĠ Ġm State Ġ= ĠKeyboard State ( this ) ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġm Is Hardware Accel erated Drawing Enabled Ġ= Ġm Latin IME . enable Hardware Acceleration () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Keyboard Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtheme Updated Ġ= Ġupdate Keyboard Theme And Context Theme Wrapper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Latin IME , ĠKeyboard Theme . getKey board Theme ( m Latin IME Ġ/* Ġcontext Ġ*/ )) ĊĠĠĠĠĠĠĠ Ġif Ġ( theme Updated Ġ&& Ġmain Keyboard View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Latin IME . setInput View ( onCreate Input View ( m Is Hardware Accel erated Drawing Enabled )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Keyboard Theme And Context Theme Wrapper ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Theme : ĠKeyboard Theme ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyboard Theme Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Theme Context Ġ== Ġnull Ġ|| Ġkeyboard Theme Ġ!= Ġm Keyboard Theme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Keyboard Theme Ġ= Ġkeyboard Theme ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Theme Context Ġ= ĠContext Theme Wrapper ( context , Ġkeyboard Theme . m Style Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyboard Layout Set . on Keyboard Theme Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Keyboard ( editor Info : ĠEditor Info , Ġsettings Values : ĠSettings Values , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Auto Caps State : ĠInt , Ġcurrent Re capitalize State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġm Theme Context Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠKeyboard Layout Set . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġeditor Info ) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠ Ġval Ġkeyboard Width Ġ= ĠResource Utils . getDefault Keyboard Width ( res ) ĊĠĠĠĠĠĠĠ Ġval Ġkeyboard Height Ġ= ĠResource Utils . getKey board Height ( res , Ġsettings Values ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Keyboard Geometry ( keyboard Width , Ġkeyboard Height ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Subtype ( m Rich Imm . current Subtype ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Voice Input Key Enabled ( settings Values . m Shows Voice Input Key ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Language Switch Key Enabled ( m Latin IME . should Show Language Switch Key ()) ĊĠĠĠĠĠĠĠ Ġbuilder . set Split Layout Enabled ByUser ( Production Flags . IS _ SPLIT _ KEY BOARD _ SUPPORTED Ġ&& Ġsettings Values . m Is Split Keyboard Enabled ) ĊĠĠĠĠĠĠĠ Ġm Keyboard Layout Set Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State . on Load Keyboard ( current Auto Caps State , Ġcurrent Re capitalize State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Keyboard Texts Set . set Locale ( m Rich Imm . current Subtype Locale , Ġm Theme Context !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠKeyboard Layout Set Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" loading Ġkeyboard Ġfailed : Ġ" Ġ+ Ġe . m Keyboard Id , Ġe . cause ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ ĠException Logger . sentry . record Breadcrumb ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB readcrumb Builder () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Current Ġsubtype : Ġ" Ġ+ Ġm Rich Imm . current Subtype . toString ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ // ĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Keyboard State () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyboard Ġ!= Ġnull Ġ|| Ġis Showing Emoji Pa let tes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State . on Save Keyboard State () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Hide Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( main Keyboard View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Keyboard View !!. on Hide Window () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Keyboard ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle State : ĠKeyboard Switch State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġ{@ link ĠMain Keyboard View } Ġvisible Ġand Ġhide Ġ{@ link ĠEmoji Pa let tes View }. ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Settings Values Ġ= ĠSettings . getInstance (). current ĊĠĠĠĠĠĠĠ Ġset Main Keyboard Frame ( current Settings Values , Ġtoggle State ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġpass Ġthis Ġobject Ġto Ġset Keyboard Ġinstead Ġof Ġgetting Ġthe Ġcurrent Ġvalues . ĊĠĠĠĠĠĠĠ Ġval Ġkeyboard View Ġ= Ġmain Keyboard View ĊĠĠĠĠĠĠĠ Ġval Ġold Keyboard Ġ= Ġkeyboard View !!. keyboard ĊĠĠĠĠĠĠĠ Ġval Ġnew Keyboard Ġ= Ġm Keyboard Layout Set !!. getKey board ( keyboard Id ) ĊĠĠĠĠĠĠĠ Ġkeyboard View . set Keyboard ( new Keyboard ) ĊĠĠĠĠĠĠĠ ĠmCurrent Input View . set Keyboard Top Padding ( new Keyboard . m Top Padding ) ĊĠĠĠĠĠĠĠ Ġkeyboard View . set Key Preview Popup Enabled ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Popup On , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Popup Dismiss Delay ) ĊĠĠĠĠĠĠĠ Ġkeyboard View . set Key Preview Animation Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Has Custom Key Preview Animation Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Show Up Start X Scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Show Up Start Y Scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Show Up Duration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Dismiss End X Scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Dismiss End Y Scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings Values . m Key Preview Dismiss Duration ) ĊĠĠĠĠĠĠĠ Ġkeyboard View . update Shortcut Key ( m Rich Imm . is Shortcut I me Ready ) ĊĠĠĠĠĠĠĠ Ġval Ġsubtype Changed Ġ= Ġold Keyboard Ġ== Ġnull Ġ|| Ġnew Keyboard . m Id . m Subtype Ġ!= Ġold Keyboard . m Id . m Subtype ĊĠĠĠĠĠĠĠ Ġval Ġlanguage On Space bar Format Type Ġ= ĠLanguage On Space bar Utils ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Language On Space bar Format Type ( new Keyboard . m Id . m Subtype !! ) ĊĠĠĠĠĠĠĠ Ġval Ġhas Multiple Enabled IME s Or Sub types Ġ= Ġm Rich Imm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Multiple Enabled IME s Or Sub types ( true Ġ/* Ġshould Include Aux iliary Sub types Ġ*/) ĊĠĠĠĠĠĠĠ Ġkeyboard View . start Display Language On Space bar ( subtype Changed , Ġlanguage On Space bar Format Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Multiple Enabled IME s Or Sub types ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠRemove Ġthis Ġmethod . ĠCome Ġup Ġwith Ġa Ġmore Ġcomprehensive Ġway Ġto Ġreset Ġthe Ġkeyboard Ġlayout ĊĠĠĠ Ġ// Ġwhen Ġa Ġkeyboard Ġlayout Ġset Ġdoesn 't Ġget Ġre loaded Ġin ĠLat in IME . onStart Input View Internal (). ĊĠĠĠ Ġfun Ġreset Keyboard State To Alphabet ( current Auto Caps State : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Re capitalize State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State . on Reset Keyboard State To Alphabet ( current Auto Caps State , Ġcurrent Re capitalize State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonPress Key ( code : ĠInt , Ġis Single Pointer : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Auto Caps State : ĠInt , Ġcurrent Re capitalize State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State . on Press Key ( code , Ġis Single Pointer , Ġcurrent Auto Caps State , Ġcurrent Re capitalize State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Release Key ( code : ĠInt , Ġwith Sl iding : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Auto Caps State : ĠInt , Ġcurrent Re capitalize State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State . on Release Key ( code , Ġwith Sl iding , Ġcurrent Auto Caps State , Ġcurrent Re capitalize State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Finish Sl iding Input ( current Auto Caps State : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Re capitalize State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State . on Finish Sl iding Input ( current Auto Caps State , Ġcurrent Re capitalize State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Alphabet Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Alphabet Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Keyboard ( Keyboard Id . ELEMENT _ ALPH AB ET , ĠKeyboard Switch State . OTHER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Alphabet Manual Shift ed Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Alphabet Manual Shift ed Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Keyboard ( Keyboard Id . ELEMENT _ ALPH AB ET _ MAN UAL _ SHIFT ED , ĠKeyboard Switch State . OTHER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Alphabet Automatic Shift ed Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Alphabet Automatic Shift ed Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Keyboard ( Keyboard Id . ELEMENT _ ALPH AB ET _ AUT OM AT IC _ SHIFT ED , ĠKeyboard Switch State . OTHER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Alphabet Shift Locked Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Alphabet Shift Locked Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Keyboard ( Keyboard Id . ELEMENT _ ALPH AB ET _ SHIFT _ LOCK ED , ĠKeyboard Switch State . OTHER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Alphabet Shift Lock Shift ed Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Alphabet Shift Lock Shift ed Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Keyboard ( Keyboard Id . ELEMENT _ ALPH AB ET _ SHIFT _ LOCK _ SHIFT ED , ĠKeyboard Switch State . OTHER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Symbols Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Symbols Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Keyboard ( Keyboard Id . ELEMENT _ SYMBOL S , ĠKeyboard Switch State . OTHER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Symbols Shift ed Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Symbols Shift ed Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Keyboard ( Keyboard Id . ELEMENT _ SYMBOL S _ SHIFT ED , ĠKeyboard Switch State . SYMBOL S _ SHIFT ED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis I me Sup pressed By Hardware Keyboard ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Values : ĠSettings Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle State : ĠKeyboard Switch State ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsettings Values . m Has Hardware Keyboard Ġ&& Ġtoggle State Ġ== ĠKeyboard Switch State . HIDDEN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Main Keyboard Frame ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Values : ĠSettings Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle State : ĠKeyboard Switch State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvisibility Ġ= Ġif Ġ( is I me Sup pressed By Hardware Keyboard ( settings Values , Ġtoggle State )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġmain Keyboard View !!. visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġvisibility Ġof Ġ{@ link Ġ# m Keyboard View } Ġmust Ġbe Ġaligned Ġwith Ġ{@ link Ġ# Main Keyboard Frame }. ĊĠĠĠĠĠĠĠ Ġ// Ġ@ see Ġ# get Visible Keyboard View () Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġ@ see ĠLat in IME # on Compute Inset ( android . input method service . Input Method Service . Insets ) ĊĠĠĠĠĠĠĠ Ġm Main Keyboard Frame . visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View . stop Emoji Pa let tes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġset Emoji Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Emoji Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġkeyboard Ġ= Ġm Keyboard Layout Set !!. getKey board ( Keyboard Id . ELEMENT _ ALPH AB ET ) ĊĠĠĠĠĠĠĠ Ġm Main Keyboard Frame . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġvisibility Ġof Ġ{@ link Ġ# m Keyboard View } Ġmust Ġbe Ġaligned Ġwith Ġ{@ link Ġ# Main Keyboard Frame }. ĊĠĠĠĠĠĠĠ Ġ// Ġ@ see Ġ# get Visible Keyboard View () Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġ@ see ĠLat in IME # on Compute Inset ( android . input method service . Input Method Service . Insets ) ĊĠĠĠĠĠĠĠ Ġmain Keyboard View !!. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View . start Emoji Pa let tes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Keyboard Texts Set . getText ( Keyboard Texts Set . SWITCH _ TO _ ALPHA _ KEY _ LABEL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Keyboard View !!. key Visual Attribute , Ġkeyboard . m Icons Set ) ĊĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠKeyboard Switch State Ġconstructor ( internal Ġval Ġm Keyboard Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHID DEN (- 1 ), ĊĠĠĠĠĠĠĠ ĠSYMBOL S _ SHIFT ED ( Keyboard Id . ELEMENT _ SYMBOL S _ SHIFT ED ), ĊĠĠĠĠĠĠĠ ĠE MO JI ( Keyboard Id . ELEMENT _ E MO JI _ REC ENTS ), ĊĠĠĠĠĠĠĠ ĠOTHER (- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Toggle Keyboard ( toggle State : ĠKeyboard Switch State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent State Ġ= Ġkeyboard Switch State ĊĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" on Toggle Keyboard () Ġ: ĠCurrent Ġ= Ġ$ currentState Ġ: ĠToggle Ġ= Ġ$ toggle State ") ĊĠĠĠĠĠĠĠ Ġif Ġ( currentState Ġ== Ġtoggle State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Latin IME . stop Showing Input View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Latin IME . hide Window () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Alphabet Keyboard () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Latin IME . start Showing Input View ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toggle State Ġ== ĠKeyboard Switch State . E MO JI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Emoji Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View . stop Emoji Pa let tes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Main Keyboard Frame . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Keyboard View !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Keyboard ( toggle State . m Keyboard Id , Ġtoggle State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFuture Ġmethod Ġfor Ġrequesting Ġan Ġupdating Ġto Ġthe Ġshift Ġstate . ĊĠĠĠ Ġoverride Ġfun Ġrequest Updating Shift State ( auto Caps Flags : ĠInt , Ġre capitalize Mode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" request Updating Shift State : Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġauto Caps Flags =" Ġ+ ĠC aps Mode Utils . flags ToString ( auto Caps Flags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġre capitalize Mode =" Ġ+ ĠRe capitalize Status . mode ToString ( re capitalize Mode )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm State . on Update Shift State ( auto Caps Flags , Ġre capitalize Mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġstart Double Tap Shift Key Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ TIMER _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" start Double Tap Shift Key Timer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġkeyboard View Ġ= Ġmain Keyboard View ĊĠĠĠĠĠĠĠ Ġkeyboard View ?. start Double Tap Shift Key Timer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun Ġcancel Double Tap Shift Key Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ TIMER _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Alphabet Keyboard ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġkeyboard View Ġ= Ġmain Keyboard View ĊĠĠĠĠĠĠĠ Ġkeyboard View ?. cancel Double Tap Shift Key Timer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠImplements Ġ{@ link ĠKeyboard State . Switch Actions }. ĊĠĠĠ Ġoverride Ġfun ĠisIn Double Tap Shift Key Timeout (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Keyboard State . Switch Actions . DEBUG _ TIMER _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" isIn Double Tap Shift Key Timeout ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġkeyboard View Ġ= Ġmain Keyboard View ĊĠĠĠĠĠĠĠ Ġreturn Ġkeyboard View Ġ!= Ġnull Ġ&& Ġkeyboard View . isIn Double Tap Shift Key Timeout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġstate Ġmachine Ġto Ġfigure Ġout Ġwhen Ġto Ġautomatically Ġswitch Ġback Ġto Ġthe Ġprevious Ġmode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Event ( event : ĠEvent , Ġcurrent Auto Caps State : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Re capitalize State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State . on Event ( event , Ġcurrent Auto Caps State , Ġcurrent Re capitalize State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Showing Keyboard Id ( var arg Ġkeyboard Ids : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( main Keyboard View Ġ== Ġnull Ġ|| Ġ! main Keyboard View !!. is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactive Keyboard Id Ġ= Ġmain Keyboard View !!. keyboard !!. m Id . m Element Id ĊĠĠĠĠĠĠĠ Ġfor Ġ( keyboard Id Ġin Ġkeyboard Ids ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active Keyboard Id Ġ== Ġkeyboard Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġde allocate Memory () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Keyboard View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cancel All O ngo ing Events () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . de allocate Memory () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View . stop Emoji Pa let tes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonCreate Input View ( is Hardware Accel erated Drawing Enabled : ĠBoolean ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Keyboard View ?. closing () ĊĊĠĠĠĠĠĠĠ ĠKeyboard Theme . getKey board Theme ( m Latin IME )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Keyboard Theme And Context Theme Wrapper ( m Latin IME , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Input View Ġ= ĠLayoutInflater . from ( m Theme Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . input _ view , Ġnull ) Ġas ĠInput View ĊĠĠĠĠĠĠĠ ĠmCurrent Input View Ġ= Ġcurrent Input View ĊĠĠĠĠĠĠĠ Ġm Main Keyboard Frame Ġ= Ġcurrent Input View . findViewById ( R . id . main _ keyboard _ frame ) ĊĊĠĠĠĠĠĠĠ Ġval Ġkeyboard View Ġ= Ġcurrent Input View . findViewById < View >( R . id . keyboard _ view ) Ġas ĠMain Keyboard View ĊĠĠĠĠĠĠĠ Ġkeyboard View . set Hardware Accel erated Drawing Enabled ( is Hardware Accel erated Drawing Enabled ) ĊĠĠĠĠĠĠĠ Ġkeyboard View . set Keyboard ActionListener ( m Latin IME ) ĊĠĠĠĠĠĠĠ Ġmain Keyboard View Ġ= Ġkeyboard View ĊĊĠĠĠĠĠĠĠ Ġval Ġemoji Pa let tes View Ġ= Ġcurrent Input View . findViewById < View >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . emoji _ pa let tes _ view ) Ġas ĠEmoji Pa let tes View ĊĠĠĠĠĠĠĠ Ġemoji Pa let tes View . set Hardware Accel erated Drawing Enabled ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Hardware Accel erated Drawing Enabled ) ĊĠĠĠĠĠĠĠ Ġemoji Pa let tes View . set Keyboard ActionListener ( m Latin IME ) ĊĠĠĠĠĠĠĠ Ġm Emoji Pa let tes View Ġ= Ġemoji Pa let tes View ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Input View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠKeyboard Switch er :: class . java . simple Name ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠKeyboard Switch er () ĊĊĠĠĠĠĠĠĠ Ġfun Ġinit ( latin I me : ĠLat in IME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . init Internal ( latin I me ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ