/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . Ċ Ġ* ĠAn imize ĠDe vs Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ- Ġ 2 0 2 0 Ċ Ġ* ĠD av in ĠA lf ar iz ky ĠPut ra ĠBas ude wa Ġ< db as ude wa @ gmail . com > Ċ Ġ* ĠThis Ġprogram Ġused Ġfor Ġwatching Ġan ime Ġwithout Ġads . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġml . dv nl abs . anim ize . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Gesture Detector . Simple On Gesture Listener Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . On Touch Listener Ċ import Ġcom . google . android . ex op layer 2 . Player Ċ import Ġcom . google . android . ex op layer 2 . Simple Exo Player Ċ import Ġcom . google . android . ex op layer 2 . ui . Player View Ċ import Ġml . dv nl abs . anim ize . ui . activity . Stream Activity Ċ import Ġkotlin . math . abs Ċ Ċ open Ġclass ĠVideo On Swipe Touch Listener ( ctx : ĠContext , Ġplayer View : ĠPlayer View , Ġplayer : ĠSimple Exo Player ) Ġ: ĠOn Touch Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġgesture Detector : ĠGest ure Detector ĊĠĠĠ Ġprivate Ġval Ġplayer View : ĠPlayer View ĊĠĠĠ Ġprivate Ġval Ġplayer : ĠSimple Exo Player ĊĠĠĠ Ġvar Ġcounter _ seek Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġval ĠmContext : ĠContext ĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler ĊĠĠĠ Ġprivate Ġval Ġrunnable : ĠRunnable ĊĠĠĠ Ġvar Ġis Count ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġstatus Ġ= Ġ"" ĊĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġv . perform Click () ĊĠĠĠĠĠĠĠ Ġreturn Ġgesture Detector . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠGest ure Listener Ġ: ĠSimple On Gesture Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠS WI PE _ THRESHOLD Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠS WI PE _ VE LOC ITY _ THRESHOLD Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Down ( e : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( e 1 : ĠMotion Event , Ġe 2 : ĠMotion Event , Ġdistance X : ĠFloat , Ġdistance Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( player . playback State Ġ== ĠPlayer . STATE _ READY Ġ|| Ġplayer . playback State Ġ== ĠPlayer . STATE _ BUFFER ING ) Ġ&& Ġ!( mContext Ġas ĠStream Activity ). is Locked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( run nable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Time Ġ= Ġplayer . current Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Count ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( distance X Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== Ġ" RE W IND ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter _ seek Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter _ seek Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . seek To ( counter _ seek Ġ* Ġ 1 0 0 0 Ġ+ Ġnow Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ" FORWARD " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( distance X Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== Ġ" FORWARD ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter _ seek Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter _ seek Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . seek To ( now Time Ġ- Ġcounter _ seek Ġ* Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ" RE W IND " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( run nable , Ġ 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Count ing ( counter _ seek ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Single Tap Up ( e : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player View . is Controller Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View . hide Controller () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View . show Controller () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Single Tap Up ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fl ing ( e 1 : ĠMotion Event , Ġe 2 : ĠMotion Event , Ġvelocity X : ĠFloat , Ġvelocity Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Y Ġ= Ġe 2 . y Ġ- Ġe 1 . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff X Ġ= Ġe 2 . x Ġ- Ġe 1 . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( diff X ) Ġ> Ġabs ( diff Y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( diff X ) Ġ> ĠS WI PE _ THRESHOLD Ġ&& Ġabs ( velocity X ) Ġ> ĠS WI PE _ VE LOC ITY _ THRESHOLD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff X Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe Right () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe Left () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( abs ( diff Y ) Ġ> ĠS WI PE _ THRESHOLD Ġ&& Ġabs ( velocity Y ) Ġ> ĠS WI PE _ VE LOC ITY _ THRESHOLD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff Y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe Top () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon Swipe Right () Ġ{} ĊĠĠĠ Ġopen Ġfun Ġon Swipe Left () Ġ{} ĊĠĠĠ Ġfun Ġon Swipe Top () Ġ{} ĊĠĠĠ Ġfun Ġon Swipe Bottom () Ġ{} ĊĊĠĠĠ Ġopen Ġfun Ġon Count ing ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// return Ġis Count ing ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġgesture Detector Ġ= ĠGest ure Detector ( ctx , ĠGest ure Listener ()) ĊĠĠĠĠĠĠĠ Ġthis . player View Ġ= Ġplayer View ĊĠĠĠĠĠĠĠ Ġthis . player Ġ= Ġplayer ĊĠĠĠĠĠĠĠ ĠmContext Ġ= Ġctx ĊĠĠĠĠĠĠĠ Ġhandler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġrunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Count ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter _ seek Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }