package Ġio . github . ha 2 z ak ura . android sk k Ċ Ċ import Ġandroid . input method service . Input Method Service Ċ import Ġandroid . view . KeyEvent Ċ Ċ internal Ġclass ĠSK K Sticky Shift ( private Ġval Ġm Is : ĠInput Method Service ) Ġ{ ĊĠĠĠ Ġprivate Ġenum Ġclass ĠState Ġ{ ĠSTATE _ NONE , ĠSTATE _ ON , ĠSTATE _ LOCK ED Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm State Ġ= ĠState . STATE _ NONE ĊĠĠĠ Ġprivate Ġvar Ġis Pressed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Used Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ Ġclear State () Ġ} ĊĊĠĠĠ Ġfun Ġclear State () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġic Ġ= Ġm Is . current Input Connection ĊĠĠĠĠĠĠĠ Ġic ?. clear Meta Key States ( MASK _ SHIFT _ STAT ES ) ĊĊĠĠĠĠĠĠĠ Ġm State Ġ= ĠState . STATE _ NONE ĊĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Used Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpress () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsend Ġa Ġkey Ġpress Ġevent Ġalso Ġto Ġan Ġeditor ĊĠĠĠĠĠĠĠ Ġm Is . current Input Connection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . send KeyEvent ( KeyEvent ( KeyEvent . ACTION _ DOWN , ĠKeyEvent . KEYCODE _ SHIFT _ LEFT )) ĊĊĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Used Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm State Ġ= Ġwhen Ġ( m State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . STATE _ NONE ĠĠ Ġ-> ĠState . STATE _ ON Ġ// Ġoff Ġ-> Ġon ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . STATE _ ON ĠĠĠĠ Ġ-> ĠState . STATE _ LOCK ED Ġ// Ġon Ġ-> Ġlocked ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . STATE _ LOCK ED Ġ-> ĠState . STATE _ NONE Ġ// Ġlocked Ġ-> Ġoff ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsend Ġa Ġkey Ġrelease Ġevent Ġalso Ġto Ġan Ġeditor ĊĠĠĠĠĠĠĠ Ġval Ġic Ġ= Ġm Is . current Input Connection ĊĠĠĠĠĠĠĠ Ġic ?. send KeyEvent ( KeyEvent ( KeyEvent . ACTION _ UP , ĠKeyEvent . KEYCODE _ SHIFT _ LEFT )) ĊĊĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( m State Ġ== ĠState . STATE _ ON Ġ&& Ġis Used ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= ĠState . STATE _ NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġic ?. clear Meta Key States ( MASK _ SHIFT _ STAT ES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Ġ-> Ġoff ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠuseState (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m State Ġ== ĠState . STATE _ ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Pressed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstay Ġon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Used Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= ĠState . STATE _ NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is . current Input Connection ?. clear Meta Key States ( MASK _ SHIFT _ STAT ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Ġ-> Ġoff ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKeyEvent . META _ SHIFT _ ON ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMASK _ SHIFT _ STAT ES Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . META _ SHIFT _ ON Ġor ĠKeyEvent . META _ SHIFT _ LEFT _ ON Ġor ĠKeyEvent . META _ SHIFT _ RIGHT _ ON ĊĠĠĠ Ġ} Ċ } Ċ