package Ġcom . ch ory an . jun ep acket . activity Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . ch ory an . jun ep acket . R Ċ import Ġcom . ch ory an . jun ep acket . inter f . IM edia Frame Position Listener Ċ import Ġcom . ch ory an . jun ep acket . player . Exo Player Helper Ċ import Ġcom . ch ory an . jun ep acket . util . Media Util Ċ import Ġcom . google . android . ex op layer 2 . C Ċ import Ġkotlinx . android . synt hetic . main . activity _ two _ ex op layer .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ /** Ċ Ġ* Ġ@ author : ĠCho R yan ĠQu an Ċ Ġ* Ġ@ date : Ġ 6 / 1 0 / 2 1 Ċ Ġ*/ Ċ class ĠActivity Exo Player Two Ġ: ĠAppCompatActivity ( R . layout . activity _ two _ ex op layer ), ĊĠĠĠ ĠI Media Frame Position Listener Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġm Exo Player Helper : ĠEx o Player Helper ĊĠĠĠ Ġlateinit Ġvar Ġm Exo Player Params : ĠEx o Player Helper . Exo Player Helper Param ĊĠĠĠ Ġprivate Ġvar Ġsource Duration : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġm Exo Player Helper Ġ= ĠEx o Player Helper . getInstance () ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( m Exo Player Helper ) ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġtv _ content _ path . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Duration Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Util . get Media Duration ( RESOURCE _ PATH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ content _ path . text Ġ= Ġ" path : Ġ$ RESOURCE _ PATH Ġ; Ġduration : Ġ$ source Duration " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Params () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Exo Player Params Ġ= Ġm Exo Player Helper . Exo Player Helper Param () ĊĠĠĠĠĠĠĠ Ġm Exo Player Params . media Uri Ġ= ĠRESOURCE _ PATH ĊĠĠĠĠĠĠĠ Ġm Exo Player Params . media Duration Ġ= Ġsource Duration ?. to Long () Ġ?: ĠC . TIME _ END _ OF _ SOURCE ĊĠĠĠĠĠĠĠ Ġm Exo Player Params . target Surface Ġ= Ġpv _ ex op layer _ two . provide Display () ĊĠĠĠĠĠĠĠ Ġm Exo Player Helper . init Exo Player ( this , Ġm Exo Player Params ) ĊĠĠĠĠĠĠĠ Ġm Exo Player Helper . i Media Frame Position Listener Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġview _ video _ position ?. media Duration Ġ= Ġm Exo Player Params . media Duration ĊĠĠĠĠĠĠĠ Ġview _ video _ position ?. exo Player Helper Ġ= Ġm Exo Player Helper ĊĠĠĠĠĠĠĠ Ġview _ video _ position ?. set Clip Position ( m Exo Player Params . media Uri , Ġ 0 , ĠC . TIME _ END _ OF _ SOURCE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġm Exo Player Helper . release Exo Player () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRESOURCE _ PATH Ġ= Ġ"/ sd card / DC IM / Camera / 2 0 2 1 0 5 1 9 _ 1 3 2 8 1 5 . mp 4 " ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Media Position Change ( ĊĠĠĠĠĠĠĠ Ġpresentation Time Us : ĠLong , ĊĠĠĠĠĠĠĠ Ġcontent Position : ĠLong , ĊĠĠĠĠĠĠĠ Ġpercentage : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview _ video _ position ?. progress Percent Ġ= Ġpercentage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Media End ( last Frame Presentation Time Us : ĠLong ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Media Clip Apply ( media StartTime Us : ĠLong , Ġmedia EndTime Us : ĠLong ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Media Pause () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Size Changed ( ĊĠĠĠĠĠĠĠ Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠ Ġheight : ĠInt , ĊĠĠĠĠĠĠĠ Ġun applied Rotation Degrees : ĠInt , ĊĠĠĠĠĠĠĠ Ġpixel Width Height Ratio : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Play Back Error () Ġ{ ĊĊĠĠĠ Ġ} Ċ }