package Ġdv ach movie . architecture . binding Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . databinding . Binding Adapter Ċ 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 . source . Concat en ating Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Progress ive Media Source Ċ import Ġcom . google . android . ex op layer 2 . ui . Player 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 . upstream . Default Http DataSource Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġdv ach movie . architecture . binding . Binding Cache . pos Ċ import Ġdv ach movie . fragment . movie . Player Cache Ċ Ċ @ Binding Adapter (" cookie ") Ċ fun ĠPlayer View . bind Cookie ( cookies : ĠString ) Ġ{ ĊĠĠĠ ĠBinding Cache . cookie Ġ= Ġcookies ĊĠĠĠ Ġif Ġ( Binding Cache . media . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġbind Player ( this ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" movie ") Ċ fun ĠPlayer View . bind Movie ( url Video : ĠList < Uri > ?) Ġ{ ĊĠĠĠ Ġif Ġ( url Video Ġ== Ġnull ) Ġreturn ĊĠĠĠ Ġif Ġ( url Video . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠBinding Cache . media Ġ= Ġurl Video ĊĠĠĠĠĠĠĠ Ġ( this . player Ġas ĠSimple Exo Player ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! Player Cache . is Prepared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Player ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" movie _ position ") Ċ fun ĠPlayer View . bind Current Position ( value : ĠPair < Int , ĠLong >) Ġ{ ĊĠĠĠ Ġpos Ġ= Ġvalue ĊĠĠĠ Ġval Ġdefault Ġ= Ġ 0 . to Long () ĊĠĠĠ Ġif Ġ( pos . second Ġ== Ġdefault ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . player ?. seek To Default Position ( pos . first ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . player ?. seek To ( pos . first , Ġpos . second ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġbind Player ( player View : ĠPlayer View ) Ġ{ ĊĠĠĠ Ġif Ġ( Binding Cache . media . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( player View . player Ġas ĠSimple Exo Player ). set Media Source ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Media Sources By Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBinding Cache . media , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ( player View . player Ġas ĠSimple Exo Player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġcreate Media Sources By Uri ( ĊĠĠĠ Ġurl Video : ĠList < Uri > ?, ĊĠĠĠ Ġcontext : ĠContext Ċ ): ĠConcat en ating Media Source Ġ{ ĊĠĠĠ Ġval Ġagent Ġ= ĠUtil . getUser Agent ( context , Ġ" AppName ") ĊĠĠĠ Ġval Ġdefault Http DataSource Ġ= ĠDefault Http DataSource . Factory () ĊĠĠĠ Ġdefault Http DataSource . set UserAgent ( agent ) ĊĊĠĠĠ Ġdefault Http DataSource . setDefault Request Properties ( map Of ( Pair (" Cookie ", ĠBinding Cache . cookie ))) ĊĊĠĠĠ Ġval ĠdataSource Factory : ĠDataSource . Factory Ġ= ĠDefault DataSource Factory ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġnull , Ġdefault Http DataSource ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġmedia Sources Ġ= ĠConcat en ating Media Source () ĊĠĠĠ Ġurl Video ?. map Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġmedia Item Ġ= ĠMedia Item . Builder (). set Uri ( url ). build () ĊĠĠĠĠĠĠĠ ĠProgress ive Media Source . Factory ( dataSource Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( media Item ) ĊĠĠĠ Ġ} ?. let Ġ{ Ġmedia Sources . add Media Sources ( it ) Ġ} ĊĠĠĠ Ġreturn Ġmedia Sources Ċ } Ċ