package Ġcom . ga um ala . q alog . service Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . Motion Event .* Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . ImageView Ċ import Ġcom . ga um ala . q alog . R Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . max Ċ Ċ class ĠShare Button ( ctx : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġview Ġ= Ġcreate View ( ctx ) ĊĠĠĠ Ġprivate Ġval Ġmax Click Distance Ġ= Ġdp To Px ( ctx , Ġ 3 ) ĊĠĠĠ Ġprivate Ġval Ġmax Click Duration Ġ= Ġ 2 0 0 L ĊĊĠĠĠ Ġfun Ġattach ( ctx : ĠContext , Ġwm : ĠWindow Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcreate LayoutParams ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtouch Listener Ġ= Ġcreate On Touch Listener Ġ{ Ġnew X , Ġnew Y Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . x Ġ= Ġnew X . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . y Ġ= Ġnew Y . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwm . update View Layout ( view , Ġparams ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . setOn Touch Listener ( touch Listener ) ĊĊĠĠĠĠĠĠĠ Ġwm . addView ( view , Ġparams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġclick Listener Ġ= Ġ{ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate On Touch Listener ( update Position : Ġ( Float , ĠFloat ) Ġ-> ĠUnit ): ĠView . On Touch Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject : ĠView . On Touch Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ref Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ref Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Start Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Start Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtouch Be gan At Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch ( view : ĠView , Ġe : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġview . layout Params Ġas ĠWindow Manager . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ref Ġ= Ġparams . x . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ref Ġ= Ġparams . y . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Start Ġ= Ġe . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Start Ġ= Ġe . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Be gan At Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Diff Ġ= Ġe . raw X Ġ- Ġx Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Diff Ġ= Ġe . raw Y Ġ- Ġy Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Position ( x Ref Ġ- Ġx Diff , Ġy Ref Ġ+ Ġy Diff ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Diff Ġ= Ġmax ( abs ( e . raw X Ġ- Ġx Start ), Ġabs ( e . raw Y Ġ- Ġy Start )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Diff Ġ= ĠSystem . currentTimeMillis () Ġ- Ġtouch Be gan At ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Diff Ġ< Ġmax Click Duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġdistance Diff Ġ< Ġmax Click Distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate LayoutParams ( ctx : ĠContext ): ĠWindow Manager . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") Ġval Ġtype Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< Ġ 2 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ PHONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġdp To Px ( ctx , Ġ 5 6 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠWindow Manager . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize , Ġsize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Format . TRANSL UC ENT ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġparams . gravity Ġ= ĠGr avity . TOP Ġor ĠGr avity . END ĊĠĠĠĠĠĠĠ Ġparams . y Ġ= Ġdp To Px ( ctx , Ġ 1 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġparams ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdetach ( wm : ĠWindow Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwm . remove View ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdp To Px ( ctx : ĠContext , Ġd ps : ĠInt ): ĠFloat Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ps . toFloat (), Ġctx . resources . display Metrics ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate View ( ctx : ĠContext ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠImageView ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġdp To Px ( ctx , Ġ 1 6 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setImage Resource ( R . drawable . ic _ qa _ log _ share _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Padding ( padding , Ġpadding , Ġpadding , Ġpadding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setBackground Resource ( R . drawable . qa _ log _ btn _ bg ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . elevation Ġ= Ġdp To Px ( ctx , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }