package Ġcom . sample . music x . adapters Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . sample . music x . databinding . Item Track Binding Ċ import Ġcom . sample . music x . fragments . Album Song List Fragment Directions Ċ import Ġcom . sample . music x . fragments . Artist Song List Fragment Directions Ċ import Ġcom . sample . music x . fragments . Library Fragment Directions Ċ import Ġcom . sample . music x . fragments . Playlist Song List Fragment Directions Ċ import Ġcom . sample . music x . model . Track Catalog Ċ import Ġcom . sample . music x . model . Track Embedded Ċ import Ġcom . sample . music x . view models . Song ListType Ċ Ċ class ĠTrack Adapter ( val Ġtype : ĠSong ListType ) Ġ: ĊĠĠĠ ĠList Adapter < Track Embedded , ĠTrack Adapter . Track ViewHolder >( Track Diff ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠTrack ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠItem Track Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTrack ViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠTrack ViewHolder , Ġposition : ĠInt ) Ġ= Ġwith ( holder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ( getItem ( position )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠTrack ViewHolder ( private Ġval Ġbinding : ĠItem Track Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( track : ĠTrack Embedded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . track Ġ= Ġtrack ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . click Listener Ġ= Ġcreate OnClickListener ( adapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcreate OnClickListener ( position : ĠInt ) Ġ= ĠView . OnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠTrack Catalog ( getItems ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSong ListType . AL BU M Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlbum Song List Fragment Directions . action Album Song List Fragment To Playing Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSong ListType . AR TI ST Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtist Song List Fragment Directions . action Artist Song List Fragment To Playing Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSong ListType . PLAY LIST Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Song List Fragment Directions . action Playlist Song List Fragment To Playing Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSong ListType . ALL Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fragment Directions . action Library Fragment To Player Fragment ( catalog , Ġposition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit . find Nav Controller (). navigate ( direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Items (): ĠList < Track Embedded > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmutable ListOf < Track Embedded >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġitem Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( getItem ( i )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠTrack Diff Ġ: ĠDiff Util . Item Callback < Track Embedded >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠTrack Embedded , Ġnew Item : ĠTrack Embedded ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġold Item . id Ġ== Ġnew Item . id ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠTrack Embedded , Ġnew Item : ĠTrack Embedded ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġold Item Ġ== Ġnew Item Ċ }