/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ * Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . example . ex op layer Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . example . ex op layer . databinding . Activity Player Binding Ċ import Ġcom . google . android . ex op layer 2 . Media Item Ċ import Ġcom . google . android . ex op layer 2 . Simple Exo Player Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ Ċ /** Ċ Ġ* ĠA Ġfullscreen Ġactivity Ġto Ġplay Ġaudio Ġor Ġvideo Ġstreams . Ċ Ġ*/ Ċ class ĠPlayer Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠSimple Exo Player ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġplay When Ready Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġcurrent Window Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġplayback Position Ġ= Ġ 0 L ĊĊĠĠĠ Ġ// obtain Ġreference Ġto Ġthe Ġview Ġtree Ġfrom Ġactivity _ player Ġxml Ġfile ĊĠĠĠ Ġ// lazy (...) Ġ- ĠKo it lin Ġdelegate Ġfor Ġlazy Ġinitializing Ġa Ġvalue Ġfor ĊĠĠĠ Ġ// the Ġfirst Ġtime Ġit Ġis Ġused Ġ( here Ġin Ġon C Re ate Ġcallback Ġof Ġactivity ) ĊĠĠĠ Ġprivate Ġval Ġview Binding Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Player Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// set Ġroot Ġof Ġview Ġtree ( xml ) Ġas Ġthe Ġcontent Ġview Ġof Ġthis Ġactivity ĊĠĠĠ Ġ// " Also Ġcheck Ġto Ġsee Ġthat Ġthe Ġvideo View Ġproperty Ġis Ġvisible Ġon Ġyour ĊĠĠĠ Ġ// Ġview Binding Ġreference , Ġand Ġthat Ġits Ġtype Ġis ĠPlayer View ." ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( view Binding . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// method Ġto Ġcreate ĠSimple Exo Player ĊĠĠĠ Ġprivate Ġfun Ġinitialize Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer Ġ= ĠSimple Exo Player . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġex o Player Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . video View . player Ġ= Ġex o Player ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Item Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Item . from Uri ( getString ( R . string . media _ url _ mp 4 )) Ġ// create Ġmedia Ġitem , Ġtakes ĠURI Ġof Ġmedia Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . set Media Item ( media Item ) Ġ// add Ġmedia Ġitem Ġto Ġthe Ġplayer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// supply Ġstate Ġinfo Ġsaved Ġfrom Ġrelease Player () Ġto Ġplayer Ġduring Ġinitialization ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . play When Ready Ġ= Ġplay When Ready ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . seek To ( current Window , Ġplayback Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . prepare () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// override Ġfour Ġmethods Ġto Ġimplement Ġapp Ġlifecycle ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinitialize Ġthe Ġplayer Ġin ĠonStart Ġor Ġon Resume ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// app Ġcan Ġbe Ġvisible Ġbut Ġnot Ġactive Ġin Ġsplit Ġwindow Ġmode ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ>= Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġhide System Ui () ĊĠĠĠĠĠĠĠ Ġif Ġ(( Util . SDK _ INT Ġ< Ġ 2 4 Ġ|| Ġplayer Ġ== Ġnull )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ< Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Player () Ġ// release Ġresources ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ>= Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Player () Ġ// release Ġresources ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġmethod Ġcalled Ġin Ġon Resume , Ġallows Ġyou Ġto Ġhave Ġa Ġfull - screen Ġexperience ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" In lined Api ") ĊĠĠĠ Ġprivate Ġfun Ġhide System Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . video View . system Ui Visibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LOW _ PROFILE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE _ STICK Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRelease Ġplayer 's Ġresources Ġ& Ġdest ro ys Ġit , Ġcalled Ġin Ġon Pause Ġand Ġon Stop . ĊĠĠĠĠ Ġ* Ġ ĠAllows Ġyou Ġto Ġresume Ġplayback Ġfrom Ġwhere Ġthe Ġuser Ġleft Ġoff Ġ- ĠAll Ġyou Ġneed Ġto Ġdo Ġis Ġsupply Ġthis Ġstate Ġinformation Ġwhen Ġyou Ġinitialize Ġyour Ġplayer . ĊĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrelease Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback Position Ġ= Ġthis . current Position Ġ// play / pause Ġusing Ġplay When Ready ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Window Ġ= Ġthis . current Window Index Ġ// Ġcurrent Ġwindow Ġindex Ġusing Ġcurrent Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay When Ready Ġ= Ġthis . play When Ready Ġ// current Ġplayback Ġposition Ġusing Ġcurrent Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplayer Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊ Ċ }