package Ġcom . hw . lists 1 Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Media Controller Ċ import Ġandroid . widget . Video View Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . android . material . floating action button . Extended Floating ActionButton Ċ import Ġkotlinx . android . synt hetic . main . item _ video .* ĊĊ Ċ class ĠMedia Content Adapter () Ġ: RecyclerView . Adapter < RecyclerView . ViewHolder >() Ċ { ĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġ ĠTYPE _ VIDEO = 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ PI CTURE = 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmedia : Mutable List < Media Content > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġset Media ( input Media : Mutable List < Media Content > Ġ= Ġmutable ListOf ()){ ĊĠĠĠĠĠĠĠ Ġmedia Ġ= Ġinput Media ĊĠĠĠĠĠĠĠ Ġ// Log . d (" B AP ER "," media Ġsize Ġ= Ġ${ media . size }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( view Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ VIDEO -> Video Holder ( parent . inflate ( R . layout . item _ video )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ PI CTURE -> Picture Holder ( parent . inflate ( R . layout . item _ picture )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse -> error (" Incorrect Ġview Type Ġ= Ġ$ view Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( media [ position ]){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMedia Content . Video -> ĠTYPE _ VIDEO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMedia Content . Picture -> ĠTYPE _ PI CTURE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( holder ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVideo Holder ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( media [ position ]. let Ġ{ Ġit Ġas ? ĠMedia Content . Video Ġ} ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Media Ġat Ġposition =$ position Ġis Ġnot Ġa Ġvideo ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPicture Holder ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( media [ position ]. let Ġ{ Ġit Ġas ? ĠMedia Content . Picture Ġ} ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Media Ġat Ġposition =$ position Ġis Ġnot Ġa Ġpicture ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse -> error (" Incorrect Ġview Ġholder Ġ= Ġ$ holder ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġmedia . size ĊĊĠĠĠ Ġabstract Ġclass ĠBase Media Holder ( view : ĠView ): RecyclerView . ViewHolder ( view ) ĊĊĠĠĠ Ġclass ĠVideo Holder ( view : View ): Base Media Holder ( view ){ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvideo View : ĠVideo View Ġ= Ġview . findViewById ( R . id . video View ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplay Button : ĠButton Ġ= Ġview . findViewById ( R . id . play Button ) ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( media : Media Content . Video ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . set Video URI ( Uri . parse ( media . url )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . seek To ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Button . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠPicture Holder ( view : View ): Base Media Holder ( view ){ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠimageView : ĠImageView Ġ= Ġview . findViewById ( R . id . imageView ) ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( media : ĠMedia Content . Picture ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . d (" B AP ER ", Ġ" media Ġpicture Ġurl Ġ= "+ media . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( item View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( media . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . ic _ baseline _ error _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( imageView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }