/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 Ġå¤§ åīį èī¯ ä»ĭ Ġ( OH MA E ĠR y os uke ) Ċ Ġ* Ċ Ġ* ĠThis Ġsoftware Ġis Ġreleased Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ* Ġhttp :// opensource . org / licenses / MIT Ċ Ġ*/ Ċ Ċ package Ġnet . mm 2 d . dm sex plorer . util Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġnet . mm 2 d . dm sex plorer . R Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* Ġ@ author Ġ[ å¤§ åīį èī¯ ä»ĭ Ġ( OH MA E ĠR y os uke )]( mailto : ry o @ mm 2 d . net ) Ċ Ġ*/ Ċ class ĠFull screen Helper ( ĊĠĠĠ Ġprivate Ġval Ġroot View : ĠView , ĊĠĠĠ Ġprivate Ġval Ġtop View : ĠView ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġbottom View : ĠView ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠ Ġprivate Ġval Ġenter From Top : ĠAnimation ĊĠĠĠ Ġprivate Ġval Ġenter From Bottom : ĠAnimation ĊĠĠĠ Ġprivate Ġval Ġexit To Top : ĠAnimation ĊĠĠĠ Ġprivate Ġval Ġexit To Bottom : ĠAnimation ĊĠĠĠ Ġprivate Ġval Ġhide Navigation Task Ġ= ĠRunnable Ġ{ Ġthis . hide Navigation () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġposted : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar ĠisIn Picture In Picture Mode : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġroot View . context ĊĠĠĠĠĠĠĠ Ġenter From Top Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . enter _ from _ top ) ĊĠĠĠĠĠĠĠ Ġenter From Bottom Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . enter _ from _ bottom ) ĊĠĠĠĠĠĠĠ Ġexit To Top Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . exit _ to _ top ) ĊĠĠĠĠĠĠĠ Ġexit To Bottom Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . exit _ to _ bottom ) ĊĠĠĠĠĠĠĠ Ġroot View . setOn System Ui Visibility ChangeListener Ġ{ Ġvisibility Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! posted Ġ&& Ġ! isIn Picture In Picture Mode Ġ&& Ġvisibility Ġand ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Navigation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Hide Navigation ( interval : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( hide Navigation Task ) ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ( hide Navigation Task , Ġinterval ) ĊĠĠĠĠĠĠĠ Ġposted Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Navigation ( interval : ĠLong Ġ= ĠNAV IG ATION _ INTERVAL ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Picture In Picture Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġexecute Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtop View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . visibility Ġ!= ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Animation ( enter From Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbottom View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . visibility Ġ!= ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Animation ( enter From Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġroot View . system Ui Visibility Ġ= ĠSYSTEM _ UI _ VISIBLE ĊĠĠĠĠĠĠĠ Ġpost Hide Navigation ( interval ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Navigation () Ġ{ ĊĠĠĠĠĠĠĠ Ġposted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtop View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . visibility Ġ!= ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Animation ( exit To Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbottom View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . visibility Ġ!= ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Animation ( exit To Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġroot View . system Ui Visibility Ġ= ĠSYSTEM _ UI _ IN VISIBLE ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( hide Navigation Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Navigation Immediate ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġposted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtop View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbottom View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġroot View . system Ui Visibility Ġ= ĠSYSTEM _ UI _ IN VISIBLE ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( hide Navigation Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Picture In Picture Mode Changed ( pip : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠisIn Picture In Picture Mode Ġ= Ġpip ĊĠĠĠĠĠĠĠ Ġif Ġ( pip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( hide Navigation Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Hide Navigation ( NAV IG ATION _ INTERVAL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġterminate () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( hide Navigation Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNAV IG ATION _ INTERVAL Ġ= ĠTimeUnit . SECONDS . to Millis ( 3 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSYSTEM _ UI _ VISIBLE : ĠInt Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LOW _ PROFILE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSYSTEM _ UI _ IN VISIBLE : ĠInt Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION ) ĊĊĠĠĠ Ġ} Ċ } Ċ