package Ġcom . github . vk ay 9 4 . doub let ap player view example Ċ Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . github . vk ay 9 4 . doub let ap player view example . databinding . Activity Main Binding Ċ import Ġcom . github . vk ay 9 4 . doub let ap player view example . databinding . Exo Playback Control View Yt Binding Ċ import Ġcom . github . vk ay 9 4 . doub let ap player view example . fragments . Page ViewModel Ċ import Ġcom . github . vk ay 9 4 . doub let ap player view example . fragments . Seconds View Fragment Ċ import Ġcom . github . vk ay 9 4 . doub let ap player view example . fragments . Sections Pager Adapter Ċ import Ġcom . github . vk ay 9 4 . doub let ap player view example . fragments . Shape Fragment Ċ import Ġcom . github . vk ay 9 4 . d tp v . netflix . Net flix Overlay Ċ Ċ class ĠMainActivity Ġ: ĠBase Video Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġis Video Fullscreen Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcurrent Video Id Ġ= Ġ- 1 ĊĊĠĠĠ Ġ// ĠView Ġbindings ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontrols Binding : ĠEx o Playback Control View Yt Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠPage ViewModel ĊĊĠĠĠ Ġ// ĠViews Ġ( to Ġeliminate Ġrepe ating Ġ' binding .' - prefixes ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnf Overlay : ĠNet flix Overlay ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġlayout Ġviews Ġwith ĠView Ġbinding ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġbinding . root ĊĠĠĠĠĠĠĠ Ġval Ġcontrols Ġ= Ġview . findViewById < Constraint Layout >( R . id . exo _ controls _ root ) ĊĠĠĠĠĠĠĠ Ġcontrols Binding Ġ= ĠEx o Playback Control View Yt Binding . bind ( controls ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( view ) ĊĊĠĠĠĠĠĠĠ Ġnf Overlay Ġ= Ġbinding . nf Overlay ĊĠĠĠĠĠĠĠ Ġvideo Player Ġ= Ġbinding . preview Player View ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĊĠĠĠĠĠĠĠ Ġinit Double Tap Player View () ĊĠĠĠĠĠĠĠ Ġinit ViewModel () ĊĠĠĠĠĠĠĠ Ġstart Next Video () ĊĊĠĠĠĠĠĠĠ Ġval Ġsections Pager Adapter Ġ= ĠSe ctions Pager Adapter ( this , Ġsupport FragmentManager ) ĊĠĠĠĠĠĠĠ Ġsections Pager Adapter . add Fragment ( Shape Fragment . newInstance ()) ĊĠĠĠĠĠĠĠ Ġsections Pager Adapter . add Fragment ( Seconds View Fragment . newInstance ()) ĊĊĠĠĠĠĠĠĠ Ġbinding . view Pager . adapter Ġ= Ġsections Pager Adapter ĊĠĠĠĠĠĠĠ Ġbinding . tabs . setup With ViewPager ( binding . view Pager ) ĊĊĠĠĠĠĠĠĠ Ġcontrols Binding . fullscreen Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Fullscreen () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Double Tap Player View () Ġ{ ĊĠĠĠĠĠĠĠ Ġnf Overlay ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUncomment Ġthis Ġline Ġif Ġthe ĠDouble Tap Player View Ġis Ġnot Ġset Ġvia ĠXML ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// . player View ( preview Player View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform Listener ( object Ġ: ĠNet flix Overlay . Perform Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . preview Player View . use Controller Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnf Overlay . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnf Overlay . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . preview Player View . use Controller Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . preview Player View . double Tap Delay Ġ= Ġ 8 0 0 ĊĠĠĠĠĠĠĠ Ġ// ĠUncomment Ġthis Ġline Ġif Ġthe ĠPlayer Double Tap Listener Ġis Ġnot Ġset Ġvia ĠXML ĊĠĠĠĠĠĠĠ Ġ// Ġpreview Player View . controller ( yt Overlay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Page ViewModel :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtap Circle Color . value Ġ= Ġnf Overlay . tap Circle Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle BackgroundColor . value Ġ= Ġnf Overlay . circle BackgroundColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Expand Duration . value Ġ= Ġnf Overlay . animation Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Speed . value Ġ= Ġnf Overlay . icon Animation Duration ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . circle Expand Duration . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnf Overlay . animation Duration ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . tap Circle Color . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnf Overlay . tap Circle Color Int ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . circle BackgroundColor . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnf Overlay . circle BackgroundColor Int ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . icon Speed . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnf Overlay . icon Animation Duration ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Next Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġrelease Player () ĊĠĠĠĠĠĠĠ Ġinitialize Player () ĊĠĠĠĠĠĠĠ Ġnf Overlay . player ( player !! ) ĊĊĠĠĠĠĠĠĠ Ġcurrent Video Id Ġ= Ġ( current Video Id Ġ+ Ġ 1 ). rem ( Data And Utils . video List . size ) ĊĠĠĠĠĠĠĠ Ġbuild Media Source ( Uri . parse ( Data And Utils . video List [ current Video Id ])) ĊĠĠĠĠĠĠĠ Ġplayer ?. play () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Fullscreen () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Video Fullscreen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Fullscreen ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support ActionBar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ POR TRA IT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Video Fullscreen Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Fullscreen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support ActionBar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ LAND SC APE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Video Fullscreen Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ action _ github Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen In Browser ( Data And Utils . GITHUB _ LINK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ action _ change _ video Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Next Video () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Video Ġhas Ġchanged ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Video Fullscreen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Fullscreen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} Ċ }