Skip to content

Commit

Permalink
Endless radio and related tracks (Fixed #162)
Browse files Browse the repository at this point in the history
  • Loading branch information
maxrave-dev committed Dec 15, 2023
1 parent 0c3fcf9 commit e5c7b46
Show file tree
Hide file tree
Showing 22 changed files with 1,237 additions and 530 deletions.
10 changes: 10 additions & 0 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 11 additions & 5 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,13 @@ android {
buildTypes {
release {
isMinifyEnabled = false
proguardFiles (getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
debug {
applicationIdSuffix = ".dev"
}
}
compileOptions {
Expand Down Expand Up @@ -76,7 +82,7 @@ dependencies {
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")

//ExoPlayer
val media3_version= "1.1.1"
val media3_version = "1.2.0"

implementation("androidx.media3:media3-exoplayer:$media3_version")
implementation("androidx.media3:media3-ui:$media3_version")
Expand All @@ -99,9 +105,9 @@ dependencies {
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

implementation("androidx.room:room-runtime:2.6.0")
implementation("androidx.room:room-ktx:2.6.0")
ksp("androidx.room:room-compiler:2.6.0")
implementation("androidx.room:room-runtime:2.6.1")
implementation("androidx.room:room-ktx:2.6.1")
ksp("androidx.room:room-compiler:2.6.1")
//Legacy Support
implementation("androidx.legacy:legacy-support-v4:1.0.0")
//Coroutines
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.maxrave.simpmusic.data.model.home.Content
import com.maxrave.simpmusic.databinding.ItemHomeContentArtistBinding
import com.maxrave.simpmusic.databinding.ItemHomeContentPlaylistBinding
import com.maxrave.simpmusic.databinding.ItemHomeContentSongBinding
import com.maxrave.simpmusic.databinding.ItemHomeContentVideoBinding
import com.maxrave.simpmusic.extension.connectArtists
import com.maxrave.simpmusic.extension.toListName

Expand Down Expand Up @@ -63,16 +64,43 @@ class HomeItemContentAdapter(private var listContent: ArrayList<Content>, privat
}
}
}
inner class PlaylistViewHolder(var binding: ItemHomeContentPlaylistBinding, var listener: onPlaylistItemClickListener): RecyclerView.ViewHolder(binding.root){

inner class VideoViewHolder(
var binding: ItemHomeContentVideoBinding,
var listener: onSongItemClickListener
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener {listener.onPlaylistItemClick(bindingAdapterPosition)}
binding.root.setOnClickListener { listener.onSongItemClick(bindingAdapterPosition) }
}
fun bind(content: Content){
with(binding){

fun bind(content: Content) {
with(binding) {
if (content.thumbnails.isNotEmpty()) {
ivArt.load(content.thumbnails.lastOrNull()?.url)
}
tvSongName.text = content.title
tvSongName.isSelected = true
tvArtistName.text = content.artists.toListName().firstOrNull()
tvArtistName.isSelected = true
tvAlbumName.text = content.album?.name ?: context.getString(R.string.videos)
tvAlbumName.isSelected = true
}
}
}

inner class PlaylistViewHolder(
var binding: ItemHomeContentPlaylistBinding,
var listener: onPlaylistItemClickListener
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener { listener.onPlaylistItemClick(bindingAdapterPosition) }
}

fun bind(content: Content) {
with(binding) {
if (content.thumbnails.size > 1) {
ivArt.load(content.thumbnails[1].url)
}
else{
} else {
ivArt.load(content.thumbnails[0].url)
}
tvTitle.text = content.title
Expand Down Expand Up @@ -129,7 +157,16 @@ class HomeItemContentAdapter(private var listContent: ArrayList<Content>, privat
SONG -> SongViewHolder(ItemHomeContentSongBinding.inflate(inflate, parent, false), mSongListener)
PLAYLIST -> PlaylistViewHolder(ItemHomeContentPlaylistBinding.inflate(inflate, parent, false), mPlaylistListener)
ALBUM -> AlbumViewHolder(ItemHomeContentPlaylistBinding.inflate(inflate, parent, false), mAlbumListener)
ARTIST -> ArtistViewHolder(ItemHomeContentArtistBinding.inflate(inflate, parent, false), mArtistListener)
ARTIST -> ArtistViewHolder(
ItemHomeContentArtistBinding.inflate(inflate, parent, false),
mArtistListener
)

VIDEO -> VideoViewHolder(
ItemHomeContentVideoBinding.inflate(inflate, parent, false),
mSongListener
)

else -> throw IllegalArgumentException("Invalid view type")
}
}
Expand All @@ -140,6 +177,7 @@ class HomeItemContentAdapter(private var listContent: ArrayList<Content>, privat
is PlaylistViewHolder -> holder.bind(listContent[position])
is AlbumViewHolder -> holder.bind(listContent[position])
is ArtistViewHolder -> holder.bind(listContent[position])
is VideoViewHolder -> holder.bind(listContent[position])
}
}

Expand All @@ -150,13 +188,14 @@ class HomeItemContentAdapter(private var listContent: ArrayList<Content>, privat
ARTIST
else
PLAYLIST
} else if ((temp.browseId != null && temp.videoId == null) || (temp.browseId != null && temp.videoId == "") ) {
} else if ((temp.browseId != null && temp.videoId == null) || (temp.browseId != null && temp.videoId == "")) {
if (temp.browseId.startsWith("UC"))
ARTIST
else
ALBUM
}
else{
} else if (temp.thumbnails.firstOrNull()?.width != temp.thumbnails.firstOrNull()?.height) {
VIDEO
} else {
SONG
}
}
Expand All @@ -170,5 +209,6 @@ class HomeItemContentAdapter(private var listContent: ArrayList<Content>, privat
private const val PLAYLIST = 2
private const val ALBUM = 3
private const val ARTIST = 4
private const val VIDEO = 5
}
}
Loading

0 comments on commit e5c7b46

Please sign in to comment.