100 lines
3.5 KiB
Kotlin
100 lines
3.5 KiB
Kotlin
package org.moire.ultrasonic.adapters
|
|
|
|
import android.content.Context
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.ImageView
|
|
import android.widget.TextView
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
import com.drakeet.multitype.ItemViewBinder
|
|
import java.lang.ref.WeakReference
|
|
import java.util.Random
|
|
import org.koin.core.component.KoinComponent
|
|
import org.koin.core.component.inject
|
|
import org.moire.ultrasonic.R
|
|
import org.moire.ultrasonic.subsonic.ImageLoaderProvider
|
|
import org.moire.ultrasonic.util.AlbumHeader
|
|
import org.moire.ultrasonic.util.Util
|
|
|
|
/**
|
|
* This Binder can bind a list of entries into a Header
|
|
*/
|
|
class HeaderViewBinder(
|
|
context: Context
|
|
) : ItemViewBinder<AlbumHeader, HeaderViewBinder.ViewHolder>(), KoinComponent {
|
|
|
|
private val weakContext: WeakReference<Context> = WeakReference(context)
|
|
private val random: Random = Random()
|
|
private val imageLoaderProvider: ImageLoaderProvider by inject()
|
|
|
|
// Set our layout files
|
|
val layout = R.layout.select_album_header
|
|
|
|
override fun onCreateViewHolder(inflater: LayoutInflater, parent: ViewGroup): ViewHolder {
|
|
return ViewHolder(inflater.inflate(layout, parent, false))
|
|
}
|
|
|
|
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
|
val coverArtView: ImageView = itemView.findViewById(R.id.select_album_art)
|
|
val titleView: TextView = itemView.findViewById(R.id.select_album_title)
|
|
val artistView: TextView = itemView.findViewById(R.id.select_album_artist)
|
|
val durationView: TextView = itemView.findViewById(R.id.select_album_duration)
|
|
val songCountView: TextView = itemView.findViewById(R.id.select_album_song_count)
|
|
val yearView: TextView = itemView.findViewById(R.id.select_album_year)
|
|
val genreView: TextView = itemView.findViewById(R.id.select_album_genre)
|
|
}
|
|
|
|
override fun onBindViewHolder(holder: ViewHolder, item: AlbumHeader) {
|
|
|
|
val context = weakContext.get() ?: return
|
|
val resources = context.resources
|
|
|
|
val artworkSelection = random.nextInt(item.childCount)
|
|
|
|
imageLoaderProvider.getImageLoader().loadImage(
|
|
holder.coverArtView, item.entries[artworkSelection], false,
|
|
Util.getAlbumImageSize(context)
|
|
)
|
|
|
|
holder.titleView.text = item.name
|
|
|
|
// Don't show a header if all entries are videos
|
|
if (item.isAllVideo) {
|
|
return
|
|
}
|
|
|
|
val artist: String = when {
|
|
item.artists.size == 1 -> item.artists.iterator().next()
|
|
item.grandParents.size == 1 -> item.grandParents.iterator().next()
|
|
else -> context.resources.getString(R.string.common_various_artists)
|
|
}
|
|
holder.artistView.text = artist
|
|
|
|
val genre: String = if (item.genres.size == 1) {
|
|
item.genres.iterator().next()
|
|
} else {
|
|
context.resources.getString(R.string.common_multiple_genres)
|
|
}
|
|
|
|
holder.genreView.text = genre
|
|
|
|
val year: String = if (item.years.size == 1) {
|
|
item.years.iterator().next().toString()
|
|
} else {
|
|
resources.getString(R.string.common_multiple_years)
|
|
}
|
|
|
|
holder.yearView.text = year
|
|
|
|
val songs = resources.getQuantityString(
|
|
R.plurals.select_album_n_songs, item.childCount,
|
|
item.childCount
|
|
)
|
|
holder.songCountView.text = songs
|
|
|
|
val duration = Util.formatTotalDuration(item.totalDuration)
|
|
holder.durationView.text = duration
|
|
}
|
|
}
|