package Ġcom . gi ants ol . yellow _ box Ċ Ċ import Ġandroid . animation .* Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view .* Ċ import Ġandroid . view . animation . Over shoot Interpolator Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . interpol ator . view . animation . Fast Out Slow In Interpolator Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . sin Ċ Ċ class ĠMini Box ( private Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcallback : ĠCallback ): ĠView . On Key Listener Ġ{ ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġstop Mini Box () ĊĠĠĠĠĠĠĠ Ġfun Ġadd Word ( word : ĠString ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġwm Ġ= Ġcontext . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠ Ġprivate Ġval Ġimm Ġ= Ġcontext . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĊĠĠĠ Ġprivate Ġval Ġbg View Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . view _ mini _ box _ bg , Ġnull ) Ġas ĠKey Intercept Relative Layout ĊĊĠĠĠ Ġprivate Ġval Ġclose View Ġ= Ġbg View . findViewById < View >( R . id . close ) ĊĠĠĠ Ġprivate Ġval Ġclose View Rect Ġ= ĠRect () ĊĊĠĠĠ Ġprivate Ġval Ġword Editor View Ġ= Ġbg View . findViewById < View >( R . id . word _ editor ) ĊĠĠĠ Ġprivate Ġval Ġeditor View Ġ= Ġword Editor View . findViewById < EditText >( R . id . editor ) ĊĠĠĠ Ġprivate Ġval Ġadd Button Ġ= Ġword Editor View . findViewById < View >( R . id . add ) ĊĊĠĠĠ Ġprivate Ġval Ġmini Box View Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . view _ mini _ box , Ġnull ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmini Box View Lp : ĠWindow Manager . LayoutParams ĊĠĠĠ Ġprivate Ġval Ġmini Box View Size Ġ= ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 4 8 f , Ġcontext . resources . display Metrics ). toInt () ĊĠĠĠ Ġprivate Ġval Ġmini Box View Inset Ġ= ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 4 f , Ġcontext . resources . display Metrics ). toInt () ĊĊĠĠĠ Ġprivate Ġval Ġwindow Size Ġ= ĠPoint (). apply Ġ{ Ġwm . default Display . getSize ( this ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġp vh X Ġ= ĠProperty Values Holder . of Int (" x ", Ġ 0 ) ĊĠĠĠ Ġprivate Ġval Ġp vh Y Ġ= ĠProperty Values Holder . of Int (" y ", Ġ 0 ) ĊĠĠĠ Ġprivate Ġval Ġspring Back Animator Ġ= ĠValue Animator . of Property Values Holder ( pv h X , Ġp vh Y ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠOver shoot Interpolator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġshow Word Editor Animator Ġ= ĠObject Animator . of Float ( word Editor View , Ġ" x ", Ġ 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠOver shoot Interpolator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhide Word Editor Animator Ġ= ĠObject Animator . of Float ( word Editor View , Ġ" x ", Ġ 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠOver shoot Interpolator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġword Added Animator Ġ= ĠValue Animator . of Float ( 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠFast Out Slow In Interpolator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstatus Bar Height : ĠInt ĊĊĠĠĠ Ġval Ġis Destroyed Ġget () Ġ= Ġ! mini Box View . is Attached To Window ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Bg View () ĊĠĠĠĠĠĠĠ Ġinit Mini Box View () ĊĠĠĠĠĠĠĠ Ġinit Anim ators () ĊĊĠĠĠĠĠĠĠ Ġval Ġstatus ResourceId Ġ= Ġcontext . resources . getIdentifier (" status _ bar _ height ", Ġ" dim en ", Ġ" android ") ĊĠĠĠĠĠĠĠ Ġstatus Bar Height Ġ= Ġif Ġ( status ResourceId Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . get Dimension Pixel Size ( status ResourceId ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Bg View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġget Window Params ( WindowManager . LayoutParams . MATCH _ PARENT , ĠWindow Manager . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ Ġlp . flags Ġ= Ġlp . flags Ġand ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE . inv () ĊĠĠĠĠĠĠĠ Ġwm . addView ( bg View , Ġlp ) ĊĊĠĠĠĠĠĠĠ Ġbg View . set Key Intercept Listener ( this ) ĊĠĠĠĠĠĠĠ Ġbg View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Word Editor () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Word If Possible () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġeditor View . setOn Focus ChangeListener Ġ{ Ġv , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpull Up Word Editor For Input IfNeeded () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġeditor View . setOn Editor ActionListener Ġ{ Ġv , Ġaction Id , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbg View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġclose View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġword Editor View . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Mini Box View () Ġ{ ĊĠĠĠĠĠĠĠ Ġmini Box View Lp Ġ= Ġget Window Params ( mini Box View Size , Ġmini Box View Size ) ĊĠĠĠĠĠĠĠ Ġmini Box View Lp . x Ġ= Ġwindow Size . x Ġ- Ġmini Box View Size Ġ+ Ġmini Box View Inset ĊĠĠĠĠĠĠĠ Ġmini Box View Lp . y Ġ= Ġ( window Size . y Ġ- Ġmini Box View Size Ġ- Ġstatus Bar Height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġwm . addView ( mini Box View , Ġmini Box View Lp ) ĊĊĠĠĠĠĠĠĠ Ġmini Box View . setOn Touch Listener ( object : ĠView . On Touch Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtouch S lop Ġ= ĠView Configuration . get ( context ). scaled Touch S lop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtouch Down Point Ġ= ĠPoint F () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtouch Down Raw Point Ġ= ĠPoint F () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Dragging Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw X Ġ= Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Y Ġ= Ġevent . raw Y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Down Point . set ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Down Raw Point . set ( raw X , Ġraw Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Diff X Ġ= Ġraw X Ġ- Ġtouch Down Raw Point . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Diff Y Ġ= Ġraw Y Ġ- Ġtouch Down Raw Point . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( move Diff X ) Ġ+ Ġabs ( move Diff Y ) Ġ> Ġtouch S lop Ġ&& Ġ! is Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dragging ( raw X Ġ- Ġtouch Down Point . x , Ġraw Y Ġ- Ġtouch Down Point . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Stop Dragging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġmini Box View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Word Editor () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Anim ators () Ġ{ ĊĠĠĠĠĠĠĠ Ġspring Back Animator . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx : ĠInt Ġ= Ġit . get Animated Value (" x ") Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy : ĠInt Ġ= Ġit . get Animated Value (" y ") Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View Lp . x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View Lp . y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwm . update View Layout ( mini Box View , Ġmini Box View Lp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġspring Back Animator . addListener ( object : ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator , Ġis Reverse : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View . scale X Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View . scale Y Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose View . is Activated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbg View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġshow Word Editor Animator . addListener ( object : ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Cancelled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbg View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Editor View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?, Ġis Reverse : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor View . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . show Soft Input ( editor View , ĠInput Method Manager . SHOW _ IMP LICIT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cancelled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġhide Word Editor Animator . addListener ( object : ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Cancelled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator , Ġis Reverse : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor View . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( editor View . window Token , ĠInput Method Manager . HIDE _ IMP LICIT _ ONLY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbg View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Editor View . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor View . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cancelled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġword Added Animator . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ( 1 Ġ+ Ġ 0 . 2 f Ġ* Ġsin ( it . animated Fraction Ġ* ĠMath . PI Ġ* Ġ 2 )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View . scale X Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View . scale Y Ġ= Ġscale ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Window Params ( width : ĠInt , Ġheight : ĠInt ): ĠWindow Manager . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ PHONE ĊĊĠĠĠĠĠĠĠ Ġreturn ĠWindow Manager . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , Ġheight , Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE Ġor ĠWindow Manager . LayoutParams . FLAG _ LAYOUT _ NO _ LIMIT S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠWindow Manager . LayoutParams . FLAG _ HARD WARE _ AC CELER ATED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Format . TRANSL UC ENT ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . TOP Ġor ĠGr avity . START ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Dragging ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbg View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġclose View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġhide Word Editor () ĊĊĠĠĠĠĠĠĠ Ġmini Box View . scale X Ġ= Ġ 1 . 2 f ĊĠĠĠĠĠĠĠ Ġmini Box View . scale Y Ġ= Ġ 1 . 2 f ĊĠĠĠĠĠĠĠ Ġmini Box View Lp . x Ġ= Ġx . toInt () ĊĠĠĠĠĠĠĠ Ġmini Box View Lp . y Ġ= Ġy . toInt () ĊĠĠĠĠĠĠĠ Ġwm . update View Layout ( mini Box View , Ġmini Box View Lp ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( close View Rect . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose View . getGlobal Visible Rect ( close View Rect ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclose View . is Activated Ġ= Ġclose View Rect . intersect s ( mini Box View Lp . x , Ġmini Box View Lp . y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View Lp . x Ġ+ Ġmini Box View Size , Ġmini Box View Lp . y Ġ+ Ġmini Box View Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Stop Dragging () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( close View . is Activated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . stop Mini Box () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspring Back To Wall () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġspring Back To Wall () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal X : ĠInt Ġ= Ġif Ġ( mini Box View Lp . x Ġ>= Ġwindow Size . x Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size . x Ġ- Ġmini Box View Size Ġ+ Ġmini Box View Inset ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- mini Box View Inset ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfinal Y : ĠInt Ġ= Ġmax ( 0 , Ġmin ( mini Box View Lp . y , Ġwindow Size . y Ġ- Ġmini Box View Size Ġ- Ġstatus Bar Height )) ĊĊĠĠĠĠĠĠĠ Ġp vh X . setInt Values ( mini Box View Lp . x , Ġfinal X ) ĊĠĠĠĠĠĠĠ Ġp vh Y . setInt Values ( mini Box View Lp . y , Ġfinal Y ) ĊĠĠĠĠĠĠĠ Ġspring Back Animator . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Word Editor () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Word Editor Shown ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Word Editor () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Word Editor () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Word Editor Shown () Ġ= Ġword Editor View . visibility Ġ== ĠView . VISIBLE ĊĊĠĠĠ Ġprivate Ġfun Ġhide Word Editor () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Word Editor Shown () Ġ|| Ġhide Word Editor Animator . isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshow Word Editor Animator . cancel () ĊĠĠĠĠĠĠĠ Ġhide Word Editor Animator . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mini Box View Lp . x Ġ> Ġwindow Size . x Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Float Values (( word Editor View . layout Params Ġas ĠViewGroup . Margin LayoutParams ). margin Start Ġ- Ġmini Box View Size . toFloat (), Ġwindow Size . x . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Float Values (( word Editor View . layout Params Ġas ĠViewGroup . Margin LayoutParams ). margin Start . toFloat (), Ġ- word Editor View . width . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Word Editor () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Word Editor Shown () Ġ|| Ġshow Word Editor Animator . isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhide Word Editor Animator . cancel () ĊĠĠĠĠĠĠĠ Ġshow Word Editor Animator . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mini Box View Lp . x Ġ> Ġwindow Size . x Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Float Values ( window Size . x . toFloat (), Ġ( word Editor View . layout Params Ġas ĠViewGroup . Margin LayoutParams ). margin Start Ġ- Ġmini Box View Size . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Float Values (- word Editor View . width . toFloat (), Ġ( word Editor View . layout Params Ġas ĠViewGroup . Margin LayoutParams ). margin Start . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġword Editor View . y Ġ= Ġmini Box View Lp . y . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Word If Possible () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġeditor View . text . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( word . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . add Word ( word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor View . text Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġword Added Animator . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpull Up Word Editor For Input IfNeeded () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( word Editor View . y Ġ> Ġwindow Size . y Ġ/ Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠValue Animator . of Float ( word Editor View . y , Ġwindow Size . y Ġ/ Ġ 4 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠOver shoot Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Editor View . y Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box View Lp . y Ġ= Ġvalue . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwm . update View Layout ( mini Box View , Ġmini Box View Lp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Key ( v : ĠView , ĠkeyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK Ġ&& Ġevent . action Ġ== ĠKeyEvent . ACTION _ UP Ġ&& Ġis Word Editor Shown ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Word Editor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġspring Back Animator . removeAll Listeners () ĊĠĠĠĠĠĠĠ Ġshow Word Editor Animator . removeAll Listeners () ĊĠĠĠĠĠĠĠ Ġhide Word Editor Animator . removeAll Listeners () ĊĠĠĠĠĠĠĠ Ġword Added Animator . removeAll Listeners () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( mini Box View . is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwm . remove View ( mini Box View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwm . remove View ( bg View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }