2019-04-20 05:29:45 +00:00
|
|
|
package code.name.monkey.retromusic.adapter
|
2019-01-19 06:18:26 +00:00
|
|
|
|
2019-06-23 17:39:06 +00:00
|
|
|
import android.content.res.ColorStateList
|
2019-01-19 06:18:26 +00:00
|
|
|
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.LinearLayoutManager
|
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
2019-06-23 17:39:06 +00:00
|
|
|
import code.name.monkey.appthemehelper.ThemeStore
|
2019-01-19 06:18:26 +00:00
|
|
|
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.*
|
2019-01-19 06:18:26 +00:00
|
|
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
2019-06-23 17:23:50 +00:00
|
|
|
import com.google.android.material.chip.Chip
|
2019-01-19 06:18:26 +00:00
|
|
|
|
|
|
|
|
2019-03-25 12:43:43 +00:00
|
|
|
class HomeAdapter(private val activity: AppCompatActivity, private var homes: List<Home>, private val displayMetrics: DisplayMetrics) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
2019-01-19 06:18:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
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)
|
2019-01-19 06:18:26 +00:00
|
|
|
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
|
|
|
|
2019-01-19 06:18:26 +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)
|
|
|
|
}
|
2019-01-19 06:18:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun getItemCount(): Int {
|
|
|
|
return homes.size
|
|
|
|
}
|
|
|
|
|
2019-03-25 12:43:43 +00:00
|
|
|
fun swapData(finalList: List<Home>) {
|
|
|
|
homes = finalList
|
|
|
|
notifyDataSetChanged()
|
|
|
|
}
|
|
|
|
|
2019-01-19 06:18:26 +00:00
|
|
|
companion object {
|
|
|
|
|
2019-04-15 02:44:48 +00:00
|
|
|
@IntDef(RECENT_ALBUMS, TOP_ALBUMS, RECENT_ARTISTS, TOP_ARTISTS, GENRES, PLAYLISTS)
|
2019-01-19 06:18:26 +00:00
|
|
|
@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-01-19 06:18:26 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2019-05-16 18:52:48 +00:00
|
|
|
private inner class AlbumViewHolder(view: View) : AbsHomeViewItem(view) {
|
2019-01-19 06:18:26 +00:00
|
|
|
fun bindView(home: Home) {
|
|
|
|
recyclerView.apply {
|
|
|
|
adapter = AlbumFullWidthAdapter(activity, home.arrayList as ArrayList<Album>, displayMetrics)
|
|
|
|
}
|
2019-06-23 17:23:50 +00:00
|
|
|
chip.text = activity.getString(home.title)
|
|
|
|
chip.setChipIconResource(home.icon)
|
2019-01-19 06:18:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-16 18:52:48 +00:00
|
|
|
private inner class ArtistViewHolder(view: View) : AbsHomeViewItem(view) {
|
2019-01-19 06:18:26 +00:00
|
|
|
fun bindView(home: Home) {
|
|
|
|
recyclerView.apply {
|
|
|
|
layoutManager = GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false)
|
|
|
|
val artistAdapter = ArtistAdapter(activity, home.arrayList as ArrayList<Artist>, PreferenceUtil.getInstance().getHomeGridStyle(context!!), false, null)
|
|
|
|
adapter = artistAdapter
|
|
|
|
}
|
2019-06-23 17:23:50 +00:00
|
|
|
chip.text = activity.getString(home.title)
|
|
|
|
chip.setChipIconResource(home.icon)
|
2019-01-19 06:18:26 +00:00
|
|
|
}
|
|
|
|
}
|
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) {
|
2019-08-02 08:59:40 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
}
|
2019-06-23 17:23:50 +00:00
|
|
|
chip.text = activity.getString(home.title)
|
|
|
|
chip.setChipIconResource(home.icon)
|
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)
|
2019-06-23 17:23:50 +00:00
|
|
|
val chip: Chip = itemView.findViewById(R.id.chipHead)
|
2019-06-23 17:39:06 +00:00
|
|
|
|
|
|
|
init {
|
|
|
|
chip.apply { chipBackgroundColor = ColorStateList.valueOf(ThemeStore.primaryColor(context)) }
|
|
|
|
}
|
2019-01-28 10:45:51 +00:00
|
|
|
}
|
2019-01-19 06:18:26 +00:00
|
|
|
}
|