Add downloaded indicators in favorites view.
This commit is contained in:
parent
a2caba8bd1
commit
94fd3d51aa
|
@ -74,6 +74,11 @@ class FavoritesAdapter(private val context: Context?, private val favoriteListen
|
||||||
false -> holder.favorite.setColorFilter(context.getColor(R.color.colorSelected))
|
false -> holder.favorite.setColorFilter(context.getColor(R.color.colorSelected))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
when (favorite.downloaded) {
|
||||||
|
true -> holder.title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.downloaded, 0, 0, 0)
|
||||||
|
false -> holder.title.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
holder.favorite.setOnClickListener {
|
holder.favorite.setOnClickListener {
|
||||||
favoriteListener.onToggleFavorite(favorite.id, !favorite.favorite)
|
favoriteListener.onToggleFavorite(favorite.id, !favorite.favorite)
|
||||||
|
|
||||||
|
@ -91,6 +96,7 @@ class FavoritesAdapter(private val context: Context?, private val favoriteListen
|
||||||
when (it.itemId) {
|
when (it.itemId) {
|
||||||
R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(favorite)))
|
R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(favorite)))
|
||||||
R.id.track_play_next -> CommandBus.send(Command.PlayNext(favorite))
|
R.id.track_play_next -> CommandBus.send(Command.PlayNext(favorite))
|
||||||
|
R.id.track_pin -> CommandBus.send(Command.PinTrack(favorite))
|
||||||
R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(favorite))
|
R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(favorite))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.github.apognu.otter.R
|
import com.github.apognu.otter.R
|
||||||
import com.github.apognu.otter.adapters.FavoritesAdapter
|
import com.github.apognu.otter.adapters.FavoritesAdapter
|
||||||
import com.github.apognu.otter.repositories.FavoritesRepository
|
import com.github.apognu.otter.repositories.FavoritesRepository
|
||||||
|
import com.github.apognu.otter.repositories.TracksRepository
|
||||||
import com.github.apognu.otter.utils.*
|
import com.github.apognu.otter.utils.*
|
||||||
import kotlinx.android.synthetic.main.fragment_favorites.*
|
import kotlinx.android.synthetic.main.fragment_favorites.*
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
|
@ -46,6 +47,16 @@ class FavoritesFragment : FunkwhaleFragment<Track, FavoritesAdapter>() {
|
||||||
when (message) {
|
when (message) {
|
||||||
is Event.TrackPlayed -> refreshCurrentTrack()
|
is Event.TrackPlayed -> refreshCurrentTrack()
|
||||||
is Event.RefreshTrack -> refreshCurrentTrack()
|
is Event.RefreshTrack -> refreshCurrentTrack()
|
||||||
|
is Event.DownloadChanged -> {
|
||||||
|
val downloaded = TracksRepository.getDownloadedIds() ?: listOf()
|
||||||
|
|
||||||
|
adapter.data = adapter.data.map {
|
||||||
|
it.downloaded = downloaded.contains(it.id)
|
||||||
|
it
|
||||||
|
}.toMutableList()
|
||||||
|
|
||||||
|
adapter.notifyDataSetChanged()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,8 +123,7 @@ class TracksFragment : FunkwhaleFragment<Track, TracksAdapter>() {
|
||||||
is Event.TrackPlayed -> refreshCurrentTrack()
|
is Event.TrackPlayed -> refreshCurrentTrack()
|
||||||
is Event.RefreshTrack -> refreshCurrentTrack()
|
is Event.RefreshTrack -> refreshCurrentTrack()
|
||||||
is Event.DownloadChanged -> {
|
is Event.DownloadChanged -> {
|
||||||
(repository as? TracksRepository)?.let { repository ->
|
val downloaded = TracksRepository.getDownloadedIds() ?: listOf()
|
||||||
val downloaded = repository.getDownloadedIds() ?: listOf()
|
|
||||||
|
|
||||||
adapter.data = adapter.data.map {
|
adapter.data = adapter.data.map {
|
||||||
it.downloaded = downloaded.contains(it.id)
|
it.downloaded = downloaded.contains(it.id)
|
||||||
|
@ -137,7 +136,6 @@ class TracksFragment : FunkwhaleFragment<Track, TracksAdapter>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun refreshCurrentTrack() {
|
private fun refreshCurrentTrack() {
|
||||||
GlobalScope.launch(Main) {
|
GlobalScope.launch(Main) {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.google.gson.reflect.TypeToken
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
import java.io.BufferedReader
|
import java.io.BufferedReader
|
||||||
|
|
||||||
class FavoritesRepository(override val context: Context?) : Repository<Track, TracksCache>() {
|
class FavoritesRepository(override val context: Context?) : Repository<Track, TracksCache>() {
|
||||||
|
@ -19,9 +20,14 @@ class FavoritesRepository(override val context: Context?) : Repository<Track, Tr
|
||||||
override fun cache(data: List<Track>) = TracksCache(data)
|
override fun cache(data: List<Track>) = TracksCache(data)
|
||||||
override fun uncache(reader: BufferedReader) = gsonDeserializerOf(TracksCache::class.java).deserialize(reader)
|
override fun uncache(reader: BufferedReader) = gsonDeserializerOf(TracksCache::class.java).deserialize(reader)
|
||||||
|
|
||||||
override fun onDataFetched(data: List<Track>) = data.map {
|
override fun onDataFetched(data: List<Track>): List<Track> = runBlocking {
|
||||||
it.favorite = true
|
val downloaded = TracksRepository.getDownloadedIds() ?: listOf()
|
||||||
it
|
|
||||||
|
data.map { track ->
|
||||||
|
track.favorite = true
|
||||||
|
track.downloaded = downloaded.contains(track.id)
|
||||||
|
track
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addFavorite(id: Int) {
|
fun addFavorite(id: Int) {
|
||||||
|
|
|
@ -18,21 +18,7 @@ class TracksRepository(override val context: Context?, albumId: Int) : Repositor
|
||||||
override fun cache(data: List<Track>) = TracksCache(data)
|
override fun cache(data: List<Track>) = TracksCache(data)
|
||||||
override fun uncache(reader: BufferedReader) = gsonDeserializerOf(TracksCache::class.java).deserialize(reader)
|
override fun uncache(reader: BufferedReader) = gsonDeserializerOf(TracksCache::class.java).deserialize(reader)
|
||||||
|
|
||||||
override fun onDataFetched(data: List<Track>): List<Track> = runBlocking {
|
companion object {
|
||||||
val favorites = FavoritedRepository(context).fetch(Origin.Network.origin)
|
|
||||||
.map { it.data }
|
|
||||||
.toList()
|
|
||||||
.flatten()
|
|
||||||
|
|
||||||
val downloaded = getDownloadedIds() ?: listOf()
|
|
||||||
|
|
||||||
data.map { track ->
|
|
||||||
track.favorite = favorites.contains(track.id)
|
|
||||||
track.downloaded = downloaded.contains(track.id)
|
|
||||||
track
|
|
||||||
}.sortedBy { it.position }
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun getDownloadedIds(): List<Int>? {
|
suspend fun getDownloadedIds(): List<Int>? {
|
||||||
return RequestBus.send(Request.GetDownloads).wait<com.github.apognu.otter.utils.Response.Downloads>()?.let { response ->
|
return RequestBus.send(Request.GetDownloads).wait<com.github.apognu.otter.utils.Response.Downloads>()?.let { response ->
|
||||||
val ids: MutableList<Int> = mutableListOf()
|
val ids: MutableList<Int> = mutableListOf()
|
||||||
|
@ -50,4 +36,20 @@ class TracksRepository(override val context: Context?, albumId: Int) : Repositor
|
||||||
ids
|
ids
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDataFetched(data: List<Track>): List<Track> = runBlocking {
|
||||||
|
val favorites = FavoritedRepository(context).fetch(Origin.Network.origin)
|
||||||
|
.map { it.data }
|
||||||
|
.toList()
|
||||||
|
.flatten()
|
||||||
|
|
||||||
|
val downloaded = getDownloadedIds() ?: listOf()
|
||||||
|
|
||||||
|
data.map { track ->
|
||||||
|
track.favorite = favorites.contains(track.id)
|
||||||
|
track.downloaded = downloaded.contains(track.id)
|
||||||
|
track
|
||||||
|
}.sortedBy { it.position }
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue