/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠT ink off ĠBank Ċ Ġ* Ċ Ġ* Ġ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 Ġru . t ink off . ac qu iring . sdk . ui . custom view . edit card Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . text . Selection Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method .* Ċ import Ġru . t ink off . ac qu iring . sdk . ui . custom view . edit card . editable . Edit Card Editable Ċ import Ġru . t ink off . ac qu iring . sdk . ui . custom view . edit card . keyboard . Secure Keyboard Ċ Ċ /** Ċ Ġ* Ġ@ author ĠM ari ya ĠCh ern y ad ie va Ċ Ġ*/ Ċ internal Ġclass ĠEdit Card Input Connection ( private Ġval Ġview : ĠView ) Ġ: ĠInput Connection , ĠSecure Keyboard . On Key ClickListener Ġ{ ĊĊĠĠĠ Ġvar Ġeditable : ĠEdit Card Editable ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġeditable Ġ= ĠEdit Card Editable () ĊĠĠĠĠĠĠĠ Ġeditable . setText Watcher ( view Ġas ĠText Watcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetCurrent Editable ( editable : ĠEdit Card Editable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . editable Ġ= Ġeditable ĊĠĠĠĠĠĠĠ Ġthis . editable . setText Watcher ( view Ġas ĠText Watcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcommit Text ( text : ĠCharSequence ?, Ġnew Cursor Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġtext . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( str . toInt OrNull () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSelection . getSelection Start ( editable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠSelection . getSelection End ( editable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . replace ( start , Ġend , Ġstr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose Connection () Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġcommit Completion ( text : ĠCompletion Info ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Comp osing Region ( start : ĠInt , Ġend : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform ContextMenu Action ( id : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Selection ( start : ĠInt , Ġend : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġst Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġvar Ġen Ġ= Ġend ĊĊĠĠĠĠĠĠĠ Ġval Ġlen Ġ= Ġeditable . length ĊĠĠĠĠĠĠĠ Ġif Ġ( st Ġ> Ġlen Ġ|| Ġen Ġ> Ġlen Ġ|| Ġst Ġ< Ġ 0 Ġ|| Ġen Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġst Ġ= Ġlen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen Ġ= Ġlen ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSelection . setSelection ( editable , Ġst , Ġen ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Cursor Updates ( cursor Update Mode : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Handler (): ĠHandler ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Sur rounding Text In Code Points ( before Length : ĠInt , Ġafter Length : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Extract ed Text ( request : ĠExtract ed Text Request ?, Ġflags : ĠInt ): ĠExtract ed Text ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Batch Edit (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Comp osing Text ( text : ĠCharSequence ?, Ġnew Cursor Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Meta Key States ( states : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Batch Edit (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Selected Text ( flags : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġst Ġ= ĠSelection . getSelection Start ( editable ) ĊĠĠĠĠĠĠĠ Ġval Ġen Ġ= ĠSelection . getSelection End ( editable ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( flags Ġand ĠInput Connection . GET _ TEXT _ WITH _ STY LES Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . sub Sequence ( st , Ġen ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreport Fullscreen Mode ( enabled : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Sur rounding Text ( before Length : ĠInt , Ġafter Length : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSelection . getSelection Start ( editable ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠSelection . getSelection End ( editable ) ĊĠĠĠĠĠĠĠ Ġeditable . delete ( start Ġ- Ġ 1 , Ġend ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Cursor Caps Mode ( req Modes : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetText Before Cursor ( n : ĠInt , Ġflags : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbefore Ġ= Ġn ĊĠĠĠĠĠĠĠ Ġif Ġ( editable . length Ġ< Ġbefore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġeditable . length ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( n Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġeditable . substring ( 0 , Ġbefore ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetText After Cursor ( n : ĠInt , Ġflags : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( editable . length Ġ< Ġn Ġ|| Ġn Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġeditable . substring ( n , Ġeditable . length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Private Command ( action : ĠString ?, Ġdata : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend KeyEvent ( event : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSelection . getSelection Start ( editable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠSelection . getSelection End ( editable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . keyCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ DEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . delete ( start Ġ- Ġ 1 , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ 0 , ĠKeyEvent . KEYCODE _ 1 , ĠKeyEvent . KEYCODE _ 2 , ĠKeyEvent . KEYCODE _ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ 4 , ĠKeyEvent . KEYCODE _ 5 , ĠKeyEvent . KEYCODE _ 6 , ĠKeyEvent . KEYCODE _ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ 8 , ĠKeyEvent . KEYCODE _ 9 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . replace ( start , Ġend , Ġevent . number . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ ENTER Ġ-> Ġview . on KeyDown ( event . keyCode , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . ACTION _ UP Ġ-> Ġview . on KeyUp ( event . keyCode , Ġevent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish Comp osing Text (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcommit Correction ( correction Info : ĠCorre ction Info ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcommit Content ( input Content Info : ĠInput Content Info , Ġflags : ĠInt , Ġopts : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Editor Action ( editor Action : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent Time Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠ Ġsend KeyEvent ( KeyEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . ACTION _ DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ ENTER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . FLAG _ SOFT _ KEY BOARD Ġor ĠKeyEvent . FLAG _ KEEP _ TO UCH _ MODE Ġor ĠKeyEvent . FLAG _ EDITOR _ ACTION ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsend KeyEvent ( KeyEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . ACTION _ UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ ENTER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( KeyEvent . FLAG _ SOFT _ KEY BOARD Ġor ĠKeyEvent . FLAG _ KEEP _ TO UCH _ MODE Ġor ĠKeyEvent . FLAG _ EDITOR _ ACTION )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Key Click ( keyCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSelection . getSelection Start ( editable ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠSelection . getSelection End ( editable ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ<= Ġ 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . replace ( start , Ġend , ĠkeyCode . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditable . delete ( start Ġ- Ġ 1 , Ġend ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . on KeyUp ( keyCode , Ġnull ) ĊĠĠĠ Ġ} Ċ }