package Ġvideo Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . air bnb . lott ie . Lot tie Animation View Ċ 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 . Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Progress ive Media Source Ċ import Ġcom . google . android . ex op layer 2 . ui . AspectRatio Frame Layout Ċ 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 . on ur can . ex ov ideo reference . R Ċ import Ġcom . on ur can . ex ov ideo reference . utils . Number Convert or Ċ import Ġcontracts . On Interact Ċ Ċ class ĠH ms G ms Video ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ), ĠOn Interact Ġ{ ĊĊĠĠĠ Ġval Ġparent Ġ= ĠitemView ĊĊĠĠĠ Ġvar Ġplayer View : ĠPlayer View ĊĠĠĠ Ġprivate Ġval Ġcontent Info Layout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġval Ġvideo Name : ĠTextView ĊĊĠĠĠ Ġval Ġs Lo vel y : ĠTextView ĊĠĠĠ Ġval Ġs Message : ĠTextView ĊĠĠĠ Ġval Ġs Share : ĠTextView ĊĊĠĠĠ Ġprivate Ġvar Ġdialog Ġ= ĠDialog ( parent . context , ĠR . style . Blur Theme ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv ServiceProvider : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Video Url : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Video Sender : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Video Sender ID : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Width Height : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Play Mode : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Bit rate : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Video Lo vel y : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Video Comments : ĠTextView ĊĊĠĠĠ Ġprivate Ġval Ġlo tt ie Animation View : ĠL ot tie Animation View ĊĊĠĠĠ Ġprivate Ġvar Ġinfo Panel Btn : ĠImage Button ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayer : ĠSimple Exo Player ĊĠĠĠ Ġprivate Ġvar Ġplay When Ready Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġcurrent Window Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġplayback Position : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer View Ġ= Ġparent . findViewById ( R . id . player View ) ĊĠĠĠĠĠĠĠ Ġcontent Info Layout Ġ= Ġparent . findViewById ( R . id . content _ info ) ĊĠĠĠĠĠĠĠ Ġvideo Name Ġ= Ġparent . findViewById ( R . id . video _ name ) ĊĊĠĠĠĠĠĠĠ Ġlo tt ie Animation View Ġ= Ġparent . findViewById ( R . id . lott ie View ) ĊĊĠĠĠĠĠĠĠ Ġs Lo vel y Ġ= Ġparent . findViewById ( R . id . lo vel y ) ĊĠĠĠĠĠĠĠ Ġs Message Ġ= Ġparent . findViewById ( R . id . comment ) ĊĠĠĠĠĠĠĠ Ġs Share Ġ= Ġparent . findViewById ( R . id . share ) ĊĠĠĠĠĠĠĠ Ġinfo Panel Btn Ġ= Ġparent . findViewById ( R . id . info _ panel _ btn ) ĊĊĠĠĠĠĠĠĠ Ġlo tt ie Animation View . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġinit Dialog () ĊĠĠĠĠĠĠĠ Ġinit UI ( R . style . Dialog Slide ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshare Uri ( uri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsharing Intent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠ Ġsharing Intent . type Ġ= Ġ" text / html " ĊĠĠĠĠĠĠĠ Ġsharing Intent . putExtra ( Intent . EXTRA _ SUBJECT , Ġ" Share ĠVideo Ġ- ĠEnter tain ment ") ĊĠĠĠĠĠĠĠ Ġsharing Intent . putExtra ( Intent . EXTRA _ TEXT , Ġuri ) ĊĠĠĠĠĠĠĠ Ġparent . context . startActivity ( Intent . create Chooser ( sharing Intent , Ġ" Share ĠVideo ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġdialog . window !!. setLayout ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġdialog . window !!. attributes . window Animations Ġ= ĠR . style . Dialog Slide ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( R . layout . dialog _ video _ info ) ĊĠĠĠĠĠĠĠ Ġdialog . set Canceled On Touch Outside ( true ) ĊĊĠĠĠĠĠĠĠ Ġv ServiceProvider Ġ= Ġdialog . findViewById ( R . id . d _ video _ service _ provider ) ĊĠĠĠĠĠĠĠ Ġv Video Url Ġ= Ġdialog . findViewById ( R . id . d _ video _ url ) ĊĠĠĠĠĠĠĠ Ġv Video Sender Ġ= Ġdialog . findViewById ( R . id . d _ video _ sender ) ĊĠĠĠĠĠĠĠ Ġv Video Sender ID Ġ= Ġdialog . findViewById ( R . id . d _ video _ sender _ id ) ĊĠĠĠĠĠĠĠ Ġv Width Height Ġ= Ġdialog . findViewById ( R . id . d _ video _ width _ height ) ĊĠĠĠĠĠĠĠ Ġv Play Mode Ġ= Ġdialog . findViewById ( R . id . d _ video _ play _ mode ) ĊĠĠĠĠĠĠĠ Ġv Bit rate Ġ= Ġdialog . findViewById ( R . id . d _ video _ bit rate ) ĊĠĠĠĠĠĠĠ Ġv Video Lo vel y Ġ= Ġdialog . findViewById ( R . id . d _ video _ given _ lo vel ies ) ĊĠĠĠĠĠĠĠ Ġv Video Comments Ġ= Ġdialog . findViewById ( R . id . d _ video _ total _ comments ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind Dialog Info ( v Url : ĠString , Ġv Sender : ĠString , Ġv Sender ID : ĠString , Ġv Lo vel y : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Video Url . text Ġ= Ġv Url ĊĠĠĠĠĠĠĠ Ġv Video Sender . text Ġ= Ġv Sender ĊĠĠĠĠĠĠĠ Ġv Video Sender ID . text Ġ= Ġv Sender ID ĊĠĠĠĠĠĠĠ Ġv Video Lo vel y . text Ġ= ĠNumber Convert or . pretty Count ( v Lo vel y . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind Inform ative Dialog () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġv Exit Ġ= Ġdialog . findViewById < TextView >( R . id . d _ exit ) ĊĊĠĠĠĠĠĠĠ Ġv ServiceProvider . text Ġ= Ġparent . context . getString ( R . string . gms _ video ) ĊĠĠĠĠĠĠĠ Ġv Width Height . text Ġ= Ġparent . context . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . video _ width _ height _ params , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer View . width . toString (), Ġplayer View . width . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġv Play Mode . text Ġ= Ġplayer View . player . toString () ĊĠĠĠĠĠĠĠ Ġv Bit rate . text Ġ= Ġ"${ player . audio Stream Type }" ĊĊĠĠĠĠĠĠĠ Ġv Exit . setOnClickListener Ġ{ Ġdialog . dismiss () Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit UI ( type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinfo Panel Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Inform ative Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind Comments ( v Comments : String ){ ĊĠĠĠĠĠĠĠ Ġv Video Comments . text Ġ= ĠNumber Convert or . pretty Count ( v Comments . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Media Source ( uri : ĠUri ): ĠMedia Source Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Factory : ĠDataSource . Factory Ġ= ĠDefault DataSource Factory ( parent . context , Ġ" ex op ") ĊĠĠĠĠĠĠĠ Ġreturn ĠProgress ive Media Source . Factory ( dataSource Factory ). create Media Source ( uri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġready Player ( video Url : ĠString , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer Ġ= ĠSimple Exo Player . Builder ( parent . context ). build () ĊĠĠĠĠĠĠĠ Ġplayer View . player Ġ= Ġplayer ĊĠĠĠĠĠĠĠ Ġval Ġmedia Item Ġ= ĠMedia Item . from Uri ( Uri . parse ( video Url )) ĊĠĠĠĠĠĠĠ Ġplayer . set Media Item ( media Item ) ĊĊĠĠĠĠĠĠĠ Ġvideo Name . text Ġ= Ġname ĊĊĠĠĠĠĠĠĠ Ġplayer View . resize Mode Ġ= ĠAs pect Ratio Frame Layout . RE SIZE _ MODE _ FIT ĊĊĠĠĠĠĠĠĠ Ġplayer . play When Ready Ġ= Ġplay When Ready ĊĠĠĠĠĠĠĠ Ġlo tt ie Animation View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġplayer . seek To ( current Window , Ġplayback Position ) ĊĠĠĠĠĠĠĠ Ġplayer . prepare () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġplay When Ready Ġ= Ġplayer . play When Ready ĊĠĠĠĠĠĠĠ Ġplayback Position Ġ= Ġplayer . current Position ĊĠĠĠĠĠĠĠ Ġcurrent Window Ġ= Ġplayer . current Window Index ĊĠĠĠĠĠĠĠ Ġplayer . release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind Visibility () Ġ{} Ċ }