package Ġcom . example . web tre kk . android sdk Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . android . ex op layer 2 . C Ċ import Ġcom . google . android . ex op layer 2 . Exo Player Ċ import Ġcom . google . android . ex op layer 2 . Media Item Ċ import Ġcom . google . android . ex op layer 2 . Player Ċ import Ġcom . google . android . ex op layer 2 . Timeline Ċ import Ġcom . google . android . ex op layer 2 . analytics . Analytics Listener Ċ import Ġcom . google . android . ex op layer 2 . audio . Audio Attributes Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Progress ive Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Track Group Array Ċ import Ġcom . google . android . ex op layer 2 . track selection . Adaptive Track Selection Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector . Parameters Builder Ċ import Ġcom . google . android . ex op layer 2 . track selection . Track Selection Array Ċ import Ġcom . google . android . ex op layer 2 . ui . Player Control View Ċ import Ġcom . google . android . ex op layer 2 . upstream . DataSource Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default DataSource Factory Ċ import Ġcom . google . android . ex op layer 2 . util . Event Logger Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġkotlinx . android . synt hetic . main . activity _ video . player View Ċ import Ġweb tre kk . android . sdk . Media Param Ċ import Ġweb tre kk . android . sdk . Tracking Params Ċ import Ġweb tre kk . android . sdk . Web tre kk Ċ import Ġkotlin . math . max ĊĊ Ċ class ĠVideo Activity Ġ: ĠAppCompatActivity (), ĠView . OnClickListener , ĊĠĠĠ ĠPlayer Control View . Visibility Listener Ġ{ ĊĠĠĠ Ġval ĠT UN NEL ING _ EXTRA Ġ= Ġ" tunnel ing " ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Video Activity " ĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠEx o Player ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmedia Source : ĠMedia Source ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtrack Selector : ĠDefault Track Selector ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtrack Selector Parameters : ĠDefault Track Selector . Parameters ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast Seen Track Group Array : ĠTrack Group Array ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstart Auto Play Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġstart Window Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠstartPosition : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmut ed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Playing Now Ġ= Ġtrue ĊĠĠĠ Ġval Ġtracking Params Ġ= ĠTracking Params () ĊĠĠĠ Ġprivate Ġval Ġurl Ġ= ĊĠĠĠĠĠĠĠ Ġ" https :// firebase storage . googleapis . com / v 0 / b / vide ostream ing - 4 8 1 cd . app spot . com / o / Mobile _ Rich _ Push . mp 4 ? alt = media & token = 3 e 9 1 5 6 fa - 5 af 7 - 4 3 4 4 - 9 efb - 7 a 8 c 8 8 2 ab 2 dc "; ĊĊĊĠĠĠ Ġprivate Ġval Ġevent Listener : ĠPlayer . Listener Ġ= Ġobject Ġ: ĠPlayer . Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Timeline Changed ( timeline : ĠTimeline ?, Ġmanifest : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Timeline Changed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tracks Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Groups : ĠTrack Group Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selections : ĠTrack Selection Array ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Tracks Changed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Loading Changed ( isLoading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Loading Changed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Player StateChanged ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay When Ready : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback State : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Player StateChanged : Ġplay When Ready Ġ= Ġ$ play When Ready Ġplayback State Ġ= Ġ$ playback State " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( playback State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Player . STATE _ ENDED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Playback Ġended !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Stop Ġplayback Ġand Ġreturn Ġto Ġstart Ġposition ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( player !!. current Position Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ ACTION Ġto Ġ" eof " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeb tre kk . getInstance (). track Media (" Video Activity ", Ġ" video Ġname ", Ġtracking Params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Start Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Player . STATE _ READY Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Player . STATE _ BUFFER ING Ġ-> ĠLog . i ( TAG , Ġ" Playback Ġbuffer ing !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Player . STATE _ IDLE Ġ-> ĠLog . i ( TAG , Ġ" Exo Player Ġidle !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Is Playing Changed ( is Playing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Playing Now Ġ= Ġis Playing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ DURATION Ġto Ġ( player !!. duration Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( player !!. current Position Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ ACTION Ġto Ġif Ġ( is Playing ) Ġ" play " Ġelse Ġ" pause " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeb tre kk . getInstance (). track Media (" Video Activity ", Ġ" video Ġname ", Ġtracking Params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Volume Changed ( volume : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Volume Changed ( volume ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( player !!. current Position Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . VOLUME Ġto Ġvolume . toInt (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . M UTE Ġto Ġif Ġ( volume . toInt () Ġ== Ġ 0 ) Ġ" 1 " Ġelse Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeb tre kk . getInstance (). track Media (" Video Activity ", Ġ" video Ġname ", Ġtracking Params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ video ) ĊĠĠĠĠĠĠĠ Ġplayer View . set Controller Visibility Listener ( this ) ĊĠĠĠĠĠĠĠ Ġplayer View . request Focus () ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠParameters Builder ( Ġ/* Ġcontext = Ġ*/ this ) ĊĠĠĠĠĠĠĠ Ġval Ġtunnel ing Ġ= Ġintent . getBoolean Extra ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT UN NEL ING _ EXTRA , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ>= Ġ 2 1 Ġ&& Ġtunnel ing ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Tunnel ing Audio SessionId ( C . generate Audio SessionId V 2 1 ( Ġ/* Ġcontext = Ġ*/ this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrack Selector Parameters Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġclear Start Position () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Media Source (): ĠMedia Source Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Factory : ĠDataSource . Factory Ġ= ĠDefault DataSource Factory ( this , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġmedia Source Factory Ġ= ĠProgress ive Media Source . Factory ( dataSource Factory ) ĊĠĠĠĠĠĠĠ Ġval Ġmedia Item Ġ= ĠMedia Item . from Uri ( Uri . parse ( url )) ĊĠĠĠĠĠĠĠ Ġreturn Ġmedia Source Factory . create Media Source ( media Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Visibility Change ( visibility : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Start Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Auto Play Ġ= Ġit . play When Ready ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Window Ġ= Ġit . current Media Item Index ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartPosition Ġ= Ġmax ( 0 , Ġit . current Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Track Selector Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrack Selector . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selector Parameters Ġ= Ġit ?. parameters ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Start Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Auto Play Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġstart Window Ġ= ĠC . INDEX _ UN SET ĊĠĠĠĠĠĠĠ ĠstartPosition Ġ= ĠC . TIME _ UN SET ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġanalytics Listener Ġ= Ġobject Ġ: ĠAnalytics Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Seek Processed ( event Time : ĠAnalytics Listener . Event Time ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Seek Started ( event Time : ĠAnalytics Listener . Event Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( event Time . current Playback Position Ms Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ ACTION Ġto Ġ" seek " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeb tre kk . getInstance (). track Media (" Video Activity ", Ġ" video Ġname ", Ġtracking Params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġevent Logger Analytics Listener Ġ= ĠEvent Logger ( track Selector ) ĊĊĠĠĠ Ġ// ĠInternal Ġmethods ĊĠĠĠ Ġprivate Ġfun Ġinitialize Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Selection Factory Ġ= ĠAdapt ive Track Selection . Factory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selector Ġ= ĠDefault Track Selector ( Ġ/* Ġcontext = Ġ*/ this , Ġtrack Selection Factory ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= Ġtrack Selector Parameters !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Source Ġ= Ġbuild Media Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Source Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= ĠEx o Player . Builder ( Ġ/* Ġcontext = Ġ*/ this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Track Selector ( track Selector !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Seen Track Group Array Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( event Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Audio Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Attributes . DEFAULT , Ġ Ġ/* Ġhandle Audio Focus = Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay When Ready Ġ= Ġstart Auto Play ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplayer ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Analytics Listener ( event Logger Analytics Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Analytics Listener ( analytics Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View . player Ġ= Ġplayer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Media Source ( media Source !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . prepare () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( player !!. current Position Ġ/ Ġ 1 0 0 0 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ> Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Player () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View ?. on Resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ<= Ġ 2 3 Ġ|| Ġplayer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Player () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View ?. on Resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( player !!. current Position Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ ACTION Ġto Ġ" stop " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠWeb tre kk . getInstance (). track Media (" Video Activity ", Ġ" video Ġname ", Ġtracking Params ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ<= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View ?. on Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ> Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View ?. on Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Player () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelease Player () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" release Player ") ĊĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( player !!. current Position Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ ACTION Ġto Ġ" eof " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠWeb tre kk . getInstance (). track Media (" Video Activity ", Ġ" video Ġname ", Ġtracking Params ) ĊĠĠĠĠĠĠĠ Ġupdate Track Selector Parameters () ĊĠĠĠĠĠĠĠ Ġupdate Start Position () ĊĠĠĠĠĠĠĠ Ġplayer ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove Analytics Listener ( event Logger Analytics Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove Analytics Listener ( analytics Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Media Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Video Surface () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// media Source Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// track Selector Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġupdate Track Selector Parameters () ĊĠĠĠĠĠĠĠ Ġupdate Start Position () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ M UTE Ġ|| ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ VOLUME _ M UTE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Params . put All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . MEDIA _ POSITION Ġto Ġ( player !!. current Position Ġ/ Ġ 1 0 0 0 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Param . M UTE Ġto Ġ( if Ġ( muted ) Ġ" 1 " Ġelse Ġ" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmut ed Ġ= Ġ! muted ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeb tre kk . getInstance (). track Media (" Video Activity ", Ġ" video Ġname ", Ġtracking Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠ Ġ} Ċ }