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

216 lines
7.6 KiB
Kotlin
Raw Normal View History

2019-04-20 05:29:45 +00:00
package code.name.monkey.retromusic.adapter
import android.util.DisplayMetrics
2019-12-01 11:28:57 +00:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2020-07-13 20:39:47 +00:00
import android.widget.TextView
import androidx.annotation.IntDef
import androidx.appcompat.app.AppCompatActivity
2019-11-21 16:31:39 +00:00
import androidx.appcompat.widget.AppCompatTextView
2019-12-01 11:28:57 +00:00
import androidx.recyclerview.widget.GridLayoutManager
2020-01-09 20:53:18 +00:00
import androidx.recyclerview.widget.LinearLayoutManager
2019-12-01 11:28:57 +00:00
import androidx.recyclerview.widget.RecyclerView
2020-07-13 20:39:47 +00:00
import code.name.monkey.appthemehelper.ThemeStore
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-10-12 10:28:07 +00:00
import code.name.monkey.retromusic.extensions.show
2020-07-13 20:39:47 +00:00
import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.helper.MusicPlayerRemote
2019-05-15 21:01:20 +00:00
import code.name.monkey.retromusic.loaders.PlaylistSongsLoader
2020-07-13 20:39:47 +00:00
import code.name.monkey.retromusic.model.*
2020-06-06 18:57:28 +00:00
import code.name.monkey.retromusic.util.PreferenceUtil
2020-07-13 20:39:47 +00:00
import com.bumptech.glide.Glide
class HomeAdapter(
2020-01-17 17:19:06 +00:00
private val activity: AppCompatActivity,
private val displayMetrics: DisplayMetrics
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
2020-02-17 11:20:08 +00:00
private var list = listOf<Home>()
2019-12-01 11:28:57 +00:00
override fun getItemViewType(position: Int): Int {
return list[position].homeSection
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val layout = LayoutInflater.from(activity)
2020-01-09 20:53:18 +00:00
.inflate(R.layout.section_recycler_view, parent, false)
2019-12-01 11:28:57 +00:00
return when (viewType) {
RECENT_ARTISTS, TOP_ARTISTS -> ArtistViewHolder(layout)
2020-07-14 13:46:16 +00:00
FAVOURITES -> PlaylistViewHolder(layout)
2020-07-13 20:39:47 +00:00
SUGGESTIONS -> {
SuggestionsViewHolder(
LayoutInflater.from(activity).inflate(
R.layout.item_suggestions,
parent,
false
)
)
}
2019-12-01 11:28:57 +00:00
else -> {
2020-01-09 20:53:18 +00:00
AlbumViewHolder(
LayoutInflater.from(activity).inflate(
R.layout.metal_section_recycler_view,
parent,
false
)
)
2019-12-01 11:28:57 +00:00
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (getItemViewType(position)) {
RECENT_ALBUMS -> {
val viewHolder = holder as AlbumViewHolder
2020-07-13 20:39:47 +00:00
viewHolder.bindView(
list[position].arrayList as List<Album>,
R.string.recent_albums
)
2019-12-01 11:28:57 +00:00
}
TOP_ALBUMS -> {
val viewHolder = holder as AlbumViewHolder
2020-07-13 20:39:47 +00:00
viewHolder.bindView(
list[position].arrayList as List<Album>,
R.string.top_albums
)
2019-12-01 11:28:57 +00:00
}
RECENT_ARTISTS -> {
val viewHolder = holder as ArtistViewHolder
2020-07-13 20:39:47 +00:00
viewHolder.bindView(
list[position].arrayList as List<Artist>,
R.string.recent_artists
)
2019-12-01 11:28:57 +00:00
}
TOP_ARTISTS -> {
val viewHolder = holder as ArtistViewHolder
2020-07-13 20:39:47 +00:00
viewHolder.bindView(list[position].arrayList as List<Artist>, R.string.top_artists)
2019-12-01 11:28:57 +00:00
}
2020-07-13 20:39:47 +00:00
SUGGESTIONS -> {
val viewHolder = holder as SuggestionsViewHolder
viewHolder.bindView(
list[position].arrayList as List<Song>
)
2019-12-01 11:28:57 +00:00
}
2020-07-14 13:46:16 +00:00
FAVOURITES -> {
val viewHolder = holder as PlaylistViewHolder
viewHolder.bindView(
list[position].arrayList as List<Playlist>,
R.string.favorites
)
}
2019-12-01 11:28:57 +00:00
}
}
override fun getItemCount(): Int {
return list.size
}
2020-02-17 11:20:08 +00:00
fun swapData(sections: List<Home>) {
2019-12-01 11:28:57 +00:00
list = sections
notifyDataSetChanged()
}
companion object {
2020-07-14 13:46:16 +00:00
@IntDef(RECENT_ALBUMS, TOP_ALBUMS, RECENT_ARTISTS, TOP_ARTISTS, SUGGESTIONS, FAVOURITES)
2019-12-01 11:28:57 +00:00
@Retention(AnnotationRetention.SOURCE)
annotation class HomeSection
const val RECENT_ALBUMS = 3
const val TOP_ALBUMS = 1
const val RECENT_ARTISTS = 2
const val TOP_ARTISTS = 0
2020-07-14 13:46:16 +00:00
const val SUGGESTIONS = 5
const val FAVOURITES = 4
2019-12-01 11:28:57 +00:00
}
private inner class AlbumViewHolder(view: View) : AbsHomeViewItem(view) {
2020-07-13 20:39:47 +00:00
fun bindView(list: List<Album>, titleRes: Int) {
2019-12-01 11:28:57 +00:00
if (list.isNotEmpty()) {
recyclerView.apply {
show()
adapter = AlbumFullWidthAdapter(activity, list, displayMetrics)
}
title.text = activity.getString(titleRes)
}
}
}
inner class ArtistViewHolder(view: View) : AbsHomeViewItem(view) {
2020-07-13 20:39:47 +00:00
fun bindView(list: List<Artist>, titleRes: Int) {
2019-12-01 11:28:57 +00:00
if (list.isNotEmpty()) {
2020-05-09 09:18:29 +00:00
val manager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
val artistAdapter = ArtistAdapter(
activity,
list,
2020-06-06 18:57:28 +00:00
PreferenceUtil.homeGridStyle,
2020-05-09 09:18:29 +00:00
null
)
2019-12-01 11:28:57 +00:00
recyclerView.apply {
show()
2020-05-09 09:18:29 +00:00
layoutManager = manager
2019-12-01 11:28:57 +00:00
adapter = artistAdapter
}
title.text = activity.getString(titleRes)
}
}
}
2020-07-13 20:39:47 +00:00
private inner class SuggestionsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val images = listOf(
R.id.image1,
R.id.image2,
R.id.image3,
R.id.image4,
R.id.image5,
R.id.image6,
R.id.image7,
R.id.image8
)
fun bindView(arrayList: List<Song>) {
val color = ThemeStore.accentColor(activity)
itemView.findViewById<TextView>(R.id.text).setTextColor(color)
images.forEachIndexed { index, i ->
itemView.findViewById<View>(i).setOnClickListener {
MusicPlayerRemote.playNext(arrayList[index])
}
SongGlideRequest.Builder.from(Glide.with(activity), arrayList[index])
.asBitmap()
.build()
.into(itemView.findViewById(i))
}
}
}
2019-12-01 11:28:57 +00:00
private inner class PlaylistViewHolder(view: View) : AbsHomeViewItem(view) {
2020-07-13 20:39:47 +00:00
fun bindView(arrayList: List<Playlist>, titleRes: Int) {
2019-12-01 11:28:57 +00:00
if (arrayList.isNotEmpty()) {
val songs = PlaylistSongsLoader.getPlaylistSongList(activity, arrayList[0])
if (songs.isNotEmpty()) {
recyclerView.apply {
show()
2020-02-25 13:15:23 +00:00
val songAdapter =
SongAdapter(activity, songs, R.layout.item_album_card, null)
layoutManager =
GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false)
2019-12-01 11:28:57 +00:00
adapter = songAdapter
}
title.text = activity.getString(titleRes)
}
}
}
}
open inner class AbsHomeViewItem(itemView: View) : RecyclerView.ViewHolder(itemView) {
val recyclerView: RecyclerView = itemView.findViewById(R.id.recyclerView)
val title: AppCompatTextView = itemView.findViewById(R.id.title)
}
2019-10-24 20:08:09 +00:00
}