package Ġcom . vm lo ft . develop . library . example . ui . demo . accessibility Ċ Ċ import Ġandroid . accessibility service . Accessibility Service Ċ import Ġandroid . accessibility service . Gesture Description Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Message Ċ import Ġandroid . view .* Ċ import Ġandroid . view . accessibility . Accessibility NodeInfo Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . vm lo ft . develop . library . common . utils . show Ċ Ċ import Ġcom . vm lo ft . develop . library . example . R Ċ import Ġcom . vm lo ft . develop . library . example . common . SP Manager Ċ import Ġcom . vm lo ft . develop . library . tools . service . V MA Type Find Ċ import Ġcom . vm lo ft . develop . library . example . ui . widget . TBL ive Msg ET Dialog Ċ import Ġcom . vm lo ft . develop . library . tools . utils . logger . VM Log ĊĊ Ċ /** Ċ Ġ* ĠCreate Ġby Ġl z an 1 3 Ġon Ġ 2 0 2 1 / 8 / 1 3 Ċ Ġ* Ġæı ı è¿° ï¼ļ Ċ Ġ*/ Ċ @ Suppress Lint (" Static Field Leak ") Ċ object ĠT BL ive Msg Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġwindow Manager : ĠWindow Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout Params : ĠWindow Manager . LayoutParams ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice : ĠT BL ive Msg Service ĊĊĠĠĠ Ġprivate Ġvar Ġfloat View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġis Init : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġis Start : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Init Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġservice Ġ= Ġcontext Ġas ĠT BL ive Msg Service ĊĠĠĠĠĠĠĠ Ġwindow Manager Ġ= Ġcontext . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ å±ķç¤º æ Ĥ¬ æµ ® çªĹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsetup Float Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( float View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠWindow Manager . LayoutParams () ĊĠĠĠĠĠĠĠ Ġ// Ġ ä½įç½® ä¸º åı³ ä¾§ é¡¶ éĥ¨ ĊĠĠĠĠĠĠĠ Ġlayout Params . gravity Ġ= ĠGr avity . START Ġor ĠGr avity . TOP ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å®½ é«ĺ èĩª éĢĤ åºĶ ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æ Ĥ¬ æµ ® çªĹ éĢı æĺİ ĊĠĠĠĠĠĠĠ Ġlayout Params . format Ġ= ĠPixel Format . TRANSP ARENT ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® çªĹåı£ ç±»åŀĭ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . type Ġ= ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . type Ġ= ĠWindow Manager . LayoutParams . TYPE _ SYSTEM _ ALERT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® çªĹåı£ æłĩ å¿Ĺ ç±»åŀĭ ï¼Į åħ¶ä¸Ń ĠFLAG _ NOT _ FOCUS ABLE Ġæĺ¯ æĶ¾ ç½® å½ĵåīį æ Ĥ¬ æµ ® çªĹ æĭ ¦ æĪª çĤ¹åĩ» äºĭä»¶ ï¼Į éĢł æĪĲ æ¡ Į éĿ¢ æİ§ä»¶ ä¸įåı¯ æĵįä½ľ ĊĠĠĠĠĠĠĠ Ġ// Ġä¼ļ æĭ ¦ æĪª è¾ĵåħ¥ æ¡Ĩ èİ·åıĸ çĦ ¦ çĤ¹ ĊĠĠĠĠĠĠĠ Ġlayout Params . flags Ġ= ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE Ġor ĠWindow Manager . LayoutParams . FLAG _ ALT _ FOCUS ABLE _ IM Ġor ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH _ MOD AL ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ è¦ģ çİ° å®ŀ çļĦ å¸ĥå±Ģ ĊĠĠĠĠĠĠĠ Ġfloat View Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . widget _ tb _ live _ msg _ float _ view , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ// Ġæ·»åĬł æ Ĥ¬ æµ ® çªĹ ĠView Ġ åĪ° çªĹåı£ ĊĠĠĠĠĠĠĠ Ġwindow Manager . addView ( float View , Ġlayout Params ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġå½ĵ çĤ¹åĩ» æ Ĥ¬ æµ ® çªĹ æĹ¶ ï¼Į è¿ĶåĽŀ åĪ° éĢļ è¯Ŀ çķĮéĿ¢ ĊĠĠĠĠĠĠĠ Ġfloat View ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠT BL ive Msg Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® çĽĳåĲ¬ æµ ® åĬ¨ çªĹåı£ çļĦ è§¦ æĳ ¸ ç§»åĬ¨ ĊĠĠĠĠĠĠĠ Ġfloat View ?. setOn Touch Listener ( object Ġ: ĠView . On Touch Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView ?, Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġevent . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart X Ġ= Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Y Ġ= Ġevent . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVM Log . d (" start Ġx : Ġ$ start X , Ġy : Ġ$ start Y ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVM Log . d (" move Ġx : Ġ${ event . raw X }, Ġy : Ġ${ event . raw Y }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵ ç§»åĬ¨ è·Ŀç¦» å¤§äºİ çī¹å®ļ åĢ¼ æĹ¶ ï¼Į è¡¨ç¤º æĺ¯ æĭ ĸ åĬ¨ æ Ĥ¬ æµ ® çªĹ ï¼Į åĪĻ ä¸į è§¦åıĳ åĲİ è¾¹ çļĦ çĤ¹åĩ» çĽĳåĲ¬ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( event . raw X Ġ- Ġstart X ) Ġ> Ġ 2 0 Ġ|| ĠMath . abs ( event . raw Y Ġ- Ġstart Y ) Ġ> Ġ 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Raw X Ġèİ·åıĸ è§¦ æĳ ¸ çĤ¹ çĽ¸ å¯¹äºİ å±ı å¹ķ çļĦ åĿĲæłĩ ï¼Į getX Ġ çĽ¸ å¯¹äºİ å½ĵåīį æ Ĥ¬ æµ ® çªĹ åĿĲæłĩ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæł¹æį® å½ĵåīį è§¦ æĳ ¸ çĤ¹ ĠX Ġ åĿĲæłĩ è®¡ç®Ĺ æ Ĥ¬ æµ ® çªĹ ĠX Ġ åĿĲæłĩ ï¼Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . x Ġ= Ġ( event . raw X Ġ- Ġx ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæł¹æį® å½ĵåīį è§¦ æĳ ¸ çĤ¹ ĠY Ġ åĿĲæłĩ è®¡ç®Ĺ æ Ĥ¬ æµ ® çªĹ ĠY Ġ åĿĲæłĩ ï¼Į åĩı 2 5 ä¸º çĬ¶æĢģ æłı çļĦ é«ĺåº¦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . y Ġ= Ġ( event . raw Y Ġ- Ġy Ġ- Ġ 2 5 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĪ·æĸ° æ Ĥ¬ æµ ® çªĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . update View Layout ( float View , Ġlayout Params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġfloat View ?. findViewById < View >( R . id . tb Live Msg Status IV )?. setOnClickListener Ġ{ Ġauto Msg Status () Ġ} ĊĠĠĠĠĠĠĠ Ġfloat View ?. findViewById < View >( R . id . tb Live Msg Content TV )?. setOnClickListener Ġ{ Ġshow Content ET Dialog () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åģľæŃ¢ æ Ĥ¬ æµ ® çªĹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Float View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( float View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( float View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat View Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġm Handler : ĠHandler Ġ= Ġobject Ġ: ĠHandler () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . handle Message ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Auto Msg () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĩªåĬ¨ æ¶Īæģ¯ çĬ¶æĢģ æĶ¹åıĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġauto Msg Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus IV Ġ= Ġfloat View ?. findViewById < ImageView >( R . id . tb Live Msg Status IV ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Start Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . remove Messages ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus IV ?. setImage Resource ( R . drawable . ic _ play ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Start Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . send Empty Message ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus IV ?. setImage Resource ( R . drawable . ic _ pause ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Content ET Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠT BL ive Msg ET Dialog ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠSP Manager . get (" tb Live Msg ", Ġ" content ", Ġ" æĪĳ æĿ¥ äºĨ ðŁĺ ģ ~ ") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSP Manager . get (" tb Live Msg ", Ġ" time ", Ġ" 3 0 0 0 ") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġdialog . setContent ( content ) ĊĠĠĠĠĠĠĠ Ġdialog . setTime ( time ) ĊĠĠĠĠĠĠĠ Ġdialog . set Positive ( listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġdialog . getContent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġdialog . getTime () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content . isNotEmpty () Ġ&& Ġtime . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime TV Ġ= Ġfloat View ?. findViewById < TextView >( R . id . tb Live Msg Time TV ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime TV ?. text Ġ= Ġ" éĹ´ éļĶ :$ time " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent TV Ġ= Ġfloat View ?. findViewById < TextView >( R . id . tb Live Msg Content TV ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent TV ?. text Ġ= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSP Manager . put (" tb Live Msg ", Ġ" content ", Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSP Manager . put (" tb Live Msg ", Ġ" time ", Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . show (" åĨħå®¹ ä¸įèĥ½ä¸ºç©º ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® çªĹåı£ ç±»åŀĭ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . window ?. setType ( WindowManager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . window ?. setType ( WindowManager . LayoutParams . TYPE _ PHONE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Auto Msg () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Start ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ( event . className Ġ== Ġ" com . ta ob ao . ta ol ive . room . T ao Live Video Activity ") Ġ{ ĊĠĠĠĠĠĠĠ ĠVM Log . d ("- lz - next Auto Msg - Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġchat Btn Ġ= Ġservice . findFirst ( V MA Type Find . new Id (" com . ta ob ao . ta ob ao ", Ġ" ta ol ive _ chat _ btn _ text ") Ġas ĠV MA Type Find < Any >) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġservice . click View ( chat Btn ) ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmsg ET Ġ= Ġservice . findFirst ( V MA Type Find . new Id (" com . ta ob ao . ta ob ao ", Ġ" ta ol ive _ edit _ text ") Ġas ĠV MA Type Find < Any >) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠSP Manager . get (" tb Live Msg ", Ġ" content ", Ġ" 1 ") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġservice . edit Action ( msg ET , Ġcontent ) ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsend Btn Ġ= Ġservice . findFirst ( V MA Type Find . new Id (" com . ta ob ao . ta ob ao ", Ġ" ta ol ive _ edit _ send ") Ġas ĠV MA Type Find < Any >) ĊĠĠĠĠĠĠĠ Ġservice . click View ( send Btn ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġ( SP Manager . get (" tb Live Msg ", Ġ" time ", Ġ" 3 0 0 0 ") Ġas ĠString ). to Long () ĊĠĠĠĠĠĠĠ Ġ// Ġ çĿ ¡ çľ ł Ġ 5 0 0 Ġæ¯ « ç§Ĵ ĊĠĠĠĠĠĠĠ ĠThread . sleep ( time Ġ- Ġ 4 0 0 ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åıĳéĢģ ä¸ĭ ä¸ĢæĿ¡ æ¶Īæģ¯ ĊĠĠĠĠĠĠĠ Ġm Handler . send Empty Message ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æīĭ åĬ¿ äºĭä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . N ) ĊĠĠĠ Ġfun Ġmotion Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= Ġcontext . resources . display Metrics ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġpath . moveTo (( display Metrics . width Pixels Ġ/ Ġ 2 ). toFloat (), Ġ( display Metrics . height Pixels Ġ* Ġ 2 Ġ/ Ġ 3 ). toFloat ()) Ġ// ä»İ å±ı å¹ķ çļĦ 2 / 3 å¤Ħ å¼Ģå§ĭ æ»ĳ åĬ¨ ĊĠĠĠĠĠĠĠ Ġpath . lineTo ( 1 0 . 0 f , Ġ( display Metrics . height Pixels Ġ* Ġ 2 Ġ/ Ġ 3 ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= ĠGest ure Description . Stroke Description ( path , Ġ 0 , Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġservice . dispatch Gesture ( Gesture Description . Builder (). add Stroke ( sd ). build (), Ġobject Ġ: ĠAccessibility Service . Gesture Result Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed ( gesture Description : ĠGest ure Description ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Completed ( gesture Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVM Log . d (" æīĭ åĬ¿ æĪĲåĬŁ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( gesture Description : ĠGest ure Description ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Cancelled ( gesture Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVM Log . d (" æīĭ åĬ¿ å¤±è´¥ ï¼Į è¯· éĩį åĲ¯ æīĭæľº åĨį è¯ķ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» æĵįä½ľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclick Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġces : ĠAccessibility NodeInfo ? Ġ= Ġservice . findFirst ( V MA Type Find . new Text (" æµĭè¯ķ æİ§ä»¶ ", Ġtrue ) Ġas ĠV MA Type Find < Any >) ĊĠĠĠĠĠĠĠ Ġif Ġ( ces Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVM Log . d (" æī¾ æµĭè¯ķ æİ§ä»¶ å¤±è´¥ ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . click View ( ces ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éķ¿ æĮī æĵįä½ľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlong Click Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVM Log . e (" 7 . 0 åıĬ ä»¥ä¸Ĭ æīįèĥ½ ä½¿çĶ¨ æīĭ åĬ¿ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġces : ĠAccessibility NodeInfo ? Ġ= Ġservice . findFirst ( V MA Type Find . new Text (" æµĭè¯ķ æİ§ä»¶ ", Ġtrue ) Ġas ĠV MA Type Find < Any >) ĊĠĠĠĠĠĠĠ Ġif Ġ( ces Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVM Log . e (" æī¾ æµĭè¯ķ æİ§ä»¶ å¤±è´¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// è¿ĻéĩĮ ä¸ºäºĨ ç¤º èĮĥ æīĭ åĬ¿ çļĦ æķĪæŀľ ĊĠĠĠĠĠĠĠ Ġ// Ġces . perform Action ( Accessibility NodeInfo . ACTION _ LONG _ CLICK );// éķ¿ æĮī ĊĊĠĠĠĠĠĠĠ Ġ// è¿ĻéĩĮ ä¸ºäºĨ ç¤º èĮĥ æīĭ åĬ¿ çļĦ æķĪæŀľ ĊĠĠĠĠĠĠĠ Ġval Ġabs XY Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġces . get Bounds In Screen ( abs XY ) ĊĠĠĠĠĠĠĠ Ġ// ĠH ong B ao Service . m Service . dispatch Gesture Click ( abs XY . left Ġ+ Ġ( abs XY . right Ġ- Ġabs XY . left ) Ġ/ Ġ 2 , Ġabs XY . top Ġ+ Ġ( abs XY . bottom Ġ- Ġabs XY . top ) Ġ/ Ġ 2 );// æīĭ åĬ¿ çĤ¹åĩ» æķĪæŀľ ĊĊĠĠĠĠĠĠĠ Ġ// æīĭ åĬ¿ éķ¿ æĮī æķĪæŀľ ĊĠĠĠĠĠĠĠ Ġ// æİ§ä»¶ æŃ£ ä¸ŃéĹ´ ĊĠĠĠĠĠĠĠ Ġservice . dispatch Gesture Long Click ( abs XY . left Ġ+ Ġ( abs XY . right Ġ- Ġabs XY . left ) Ġ/ Ġ 2 , Ġabs XY . top Ġ+ Ġ( abs XY . bottom Ġ- Ġabs XY . top ) Ġ/ Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç³»ç»Ł è¿ĶåĽŀ äºĭä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġback Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . perform Global Action ( Accessibility Service . GLOBAL _ ACTION _ BACK ) ĊĠĠĠ Ġ} Ċ Ċ }