package Ġcom . ch ans ax . vide op layer . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . ch ans ax . vide op layer . R Ċ import Ġcom . ch ans ax . vide op layer . adapter . Grid Item Decoration Ċ import Ġcom . ch ans ax . vide op layer . adapter . Video Adapter Ċ import Ġcom . ch ans ax . vide op layer . data . Video Info Ċ import Ġcom . ch ans ax . vide op layer . view model . Player ViewModel Ċ import Ġcom . google . android . ex op layer 2 . Exo Player Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayer ViewModel : ĠPlayer ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( toolbar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ hide System Ui ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ set Support ActionBar ( toolbar )} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplayer ViewModel Ġ= ĠViewModel Providers . of ( this ). get ( Player ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġplayer ViewModel . getPlayer (). observe ( this , ĠObserver < Exo Player > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View ?. player Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsetup Video List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonClick ( item : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitem Ġas ĠInt ? ĊĠĠĠĠĠĠĠ Ġindex ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ViewModel . play Index ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Video List () Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Adapter Ġ= ĠVideo Adapter ( this @ MainActivity ) Ġ{ Ġitem Ġ-> ĠonClick ( item ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġvideo Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Grid Item Decoration ( 1 6 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ViewModel . get Video List (). observe ( this @ MainActivity , ĠObserver < List < Video Info >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Adapter . set Items ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ViewModel . fetch Video List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ> Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ViewModel . initialize Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ<= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ViewModel . release Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ> Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ViewModel . release Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ<= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ViewModel . initialize Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide System Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LOW _ PROFILE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE ) ĊĠĠĠ Ġ} Ċ } Ċ