package Ġcom . example . or f downloader . cast Ċ Ċ import Ġandroid . net . Uri Ċ import Ġcom . example . or f downloader . data . Selections Ċ import Ġcom . google . android . gms . cast .* Ċ import Ġcom . google . android . gms . cast . framework . Session Manager Ċ import Ġcom . google . android . gms . cast . framework . media . Remote Media Client Ċ import Ġcom . google . android . gms . common . images . Web Image Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠCast Manager Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġval Ġsession Manager : ĠSession Manager , ĊĠĠĠ Ġprivate Ġval Ġselections : ĠSelection s Ċ ) Ġ: ĠSession Manager Adapter Ġ{ ĊĊĠĠĠ Ġval Ġcast Device Connected Ġget () Ġ= Ġsession Manager . current Cast Session Ġ!= Ġnull ĊĊĠĠĠ Ġfun Ġcast Stream ( uri : ĠList < String >, Ġimage Uri : ĠString ?, ĠstartPosition : ĠLong Ġ= Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġremote Media Client : ĠRemote Media Client Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Manager . current Cast Session ?. remote Media Client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġaudio Track MetaData Ġ= ĠMedia Metadata ( Media Metadata . MEDIA _ TYPE _ M US IC _ TRACK ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Metadata . KEY _ TITLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ selections . station . human Friendly Name } Ġ- Ġ${ selections . show ?. show Title }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Media Metadata . KEY _ SUB TITLE , Ġselections . show ?. show Subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri ?. let Ġ{ Ġadd Image ( Web Image ( Uri . parse ( it ))) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġqueue Items : ĠList < Media Queue Item > Ġ= Ġuri . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqueue Item Ġ= ĠMedia Info . Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stream Type ( Media Info . STREAM _ TYPE _ BUFFER ED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ContentType (" audio / mpeg 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Metadata ( audio Track MetaData ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Queue Item . Builder ( queue Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Aut oplay ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pre load Time ( 2 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Data : ĠMedia Load Request Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Load Request Data . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Queue Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Queue Data . Builder (). set Items ( queue Items ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setCurrent Time ( start Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġremote Media Client . load ( request Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent Position (): ĠLong Ġ= ĊĠĠĠĠĠĠĠ Ġsession Manager . current Cast Session ?. remote Media Client ?. approx imate Stream Position Ġ?: Ġ 0 ĊĊĠĠĠ Ġfun ĠgetCurrent Queue Item (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsession Manager . current Cast Session . remote Media Client . currentItem . media . content Id ĊĠĠĠ Ġ} Ċ Ċ }