PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt

131 lines
4.9 KiB
Kotlin
Raw Normal View History

2019-04-20 05:29:45 +00:00
package code.name.monkey.retromusic.adapter
import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.IntDef
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import code.name.monkey.retromusic.R
2019-04-20 05:29:45 +00:00
import code.name.monkey.retromusic.adapter.album.AlbumFullWidthAdapter
import code.name.monkey.retromusic.adapter.artist.ArtistAdapter
import code.name.monkey.retromusic.adapter.song.SongAdapter
2019-05-15 21:01:20 +00:00
import code.name.monkey.retromusic.loaders.PlaylistSongsLoader
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.model.Home
import code.name.monkey.retromusic.model.Playlist
import code.name.monkey.retromusic.util.PreferenceUtil
import com.google.android.material.textview.MaterialTextView
class HomeAdapter(
private val activity: AppCompatActivity,
private var homes: List<Home>,
private val displayMetrics: DisplayMetrics
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemViewType(position: Int): Int {
return homes[position].homeSection
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val layout = LayoutInflater.from(activity).inflate(R.layout.section_recycler_view, parent, false)
return when (viewType) {
RECENT_ARTISTS, TOP_ARTISTS -> ArtistViewHolder(layout)
2019-01-28 10:45:51 +00:00
PLAYLISTS -> PlaylistViewHolder(layout)
else -> {
AlbumViewHolder(LayoutInflater.from(activity).inflate(R.layout.metal_section_recycler_view, parent, false))
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val home = homes[position]
when (getItemViewType(position)) {
2019-04-15 02:44:48 +00:00
RECENT_ALBUMS, TOP_ALBUMS -> {
val viewHolder = holder as AlbumViewHolder
viewHolder.bindView(home)
}
RECENT_ARTISTS, TOP_ARTISTS -> {
val viewHolder = holder as ArtistViewHolder
viewHolder.bindView(home)
}
2019-01-28 10:45:51 +00:00
PLAYLISTS -> {
val viewHolder = holder as PlaylistViewHolder
viewHolder.bindView(home)
}
}
}
override fun getItemCount(): Int {
return homes.size
}
2019-03-25 12:43:43 +00:00
fun swapData(finalList: List<Home>) {
homes = finalList
notifyDataSetChanged()
}
companion object {
2019-04-15 02:44:48 +00:00
@IntDef(RECENT_ALBUMS, TOP_ALBUMS, RECENT_ARTISTS, TOP_ARTISTS, GENRES, PLAYLISTS)
@Retention(AnnotationRetention.SOURCE)
annotation class HomeSection
2019-04-15 02:44:48 +00:00
const val RECENT_ALBUMS = 0
const val TOP_ALBUMS = 1
const val RECENT_ARTISTS = 2
const val TOP_ARTISTS = 3
const val GENRES = 4
const val PLAYLISTS = 5
}
2019-05-16 18:52:48 +00:00
private inner class AlbumViewHolder(view: View) : AbsHomeViewItem(view) {
fun bindView(home: Home) {
recyclerView.apply {
adapter = AlbumFullWidthAdapter(activity, home.arrayList as ArrayList<Album>, displayMetrics)
}
title.text = activity.getString(home.title)
text.text = activity.getString(home.subTitle)
}
}
2019-05-16 18:52:48 +00:00
private inner class ArtistViewHolder(view: View) : AbsHomeViewItem(view) {
fun bindView(home: Home) {
recyclerView.apply {
layoutManager = GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false)
2019-10-09 17:38:13 +00:00
val artistAdapter = ArtistAdapter(activity, home.arrayList as ArrayList<Artist>,
PreferenceUtil.getInstance(activity).getHomeGridStyle(activity), false, null)
adapter = artistAdapter
}
title.text = activity.getString(home.title)
text.text = activity.getString(home.subTitle)
}
}
2019-05-16 18:52:48 +00:00
private inner class PlaylistViewHolder(view: View) : AbsHomeViewItem(view) {
2019-01-28 10:45:51 +00:00
fun bindView(home: Home) {
val songs = PlaylistSongsLoader.getPlaylistSongList(activity, home.arrayList[0] as Playlist)
2019-01-28 10:45:51 +00:00
recyclerView.apply {
val songAdapter = SongAdapter(activity, songs, R.layout.item_album_card, false, null)
layoutManager = GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false)
adapter = songAdapter
}
title.text = activity.getString(home.title)
text.text = activity.getString(home.subTitle)
2019-01-28 10:45:51 +00:00
}
2019-05-16 18:52:48 +00:00
}
2019-01-28 10:45:51 +00:00
2019-05-16 18:52:48 +00:00
private open inner class AbsHomeViewItem(itemView: View) : RecyclerView.ViewHolder(itemView) {
val recyclerView: RecyclerView = itemView.findViewById(R.id.recyclerView)
val title: MaterialTextView = itemView.findViewById(R.id.title)
val text: MaterialTextView = itemView.findViewById(R.id.text)
2019-01-28 10:45:51 +00:00
}
}