package Ġimg ui . example . android Ċ Ċ import Ġandroid . app . Native Activity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . view . KeyEvent Ċ import Ġjava . util . concurrent . Linked BlockingQueue Ċ Ċ class ĠMainActivity Ġ: ĠNative Activity () Ġ{ ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Soft Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Method Manager Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġinput Method Manager . show Soft Input ( this . window . decor View , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Soft Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Method Manager Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( this . window . decor View . window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠQueue Ġfor Ġthe ĠUnicode Ġcharacters Ġto Ġbe Ġpol led Ġfrom Ġnative Ġcode Ġ( via Ġpoll Unicode Char ()) ĊĠĠĠ Ġprivate Ġvar Ġunicode Character Queue : ĠLinked BlockingQueue < Int > Ġ= ĠLinked BlockingQueue () ĊĊĠĠĠ Ġ// ĠWe Ġassume Ġdispatch KeyEvent () Ġof Ġthe ĠNative Activity Ġis Ġactually Ġcalled Ġfor Ġevery ĊĠĠĠ Ġ// ĠKeyEvent Ġand Ġnot Ġconsumed Ġby Ġany ĠView Ġbefore Ġit Ġreaches Ġhere ĊĠĠĠ Ġoverride Ġfun Ġdispatch KeyEvent ( event : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠKeyEvent . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunicode Character Queue . offer ( event . get Unicode Char ( event . meta State )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch KeyEvent ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpoll Unicode Char (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġunicode Character Queue . poll () Ġ?: Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ