package Ġcom . hl . u ikit Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context Wrapper Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . EditText Ċ Ċ class ĠFocus able Layout Helper Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Focus able Views Ġ= Ġmutable ListOf < View >() ĊĠĠĠ Ġprivate Ġvar Ġm Parent : ĠViewGroup ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġon Layout ( parent : ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Focus able Views . clear () ĊĠĠĠĠĠĠĠ Ġgeneration Focus able Views ( parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgeneration Focus able Views ( parent : ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Parent Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġparent . child Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġparent . getChild At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneration Focus able Views ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠEditText ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Focus able Views . add ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdispatch Touch Event ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . x . toInt () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . y . toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġtouch Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( v Ġin Ġm Focus able Views ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v . touch On View ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġm Parent ?. context ĊĠĠĠĠĠĠĠ Ġif Ġ(! touch Focus able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. getActivity ()?. current Focus ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager ?. hide Soft Input From Window ( it . window Token , ĠInput Method Manager . SHOW _ FOR CED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . touch On View ( x : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġget Drawing Rect ( rect ) ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġget Location On Screen ( location ) ĊĠĠĠĠĠĠĠ Ġrect . left Ġ= Ġlocation [ 0 ] ĊĠĠĠĠĠĠĠ Ġrect . top Ġ= Ġlocation [ 1 ] ĊĠĠĠĠĠĠĠ Ġrect . right Ġ= Ġrect . right Ġ+ Ġlocation [ 0 ] ĊĠĠĠĠĠĠĠ Ġrect . bottom Ġ= Ġrect . bottom Ġ+ Ġlocation [ 1 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġrect . contains ( x , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠContext . getActivity (): ĠActivity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠContext Wrapper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġbase Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getActivity () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }