Browse Source

Merge branch 'feature/50-display-if-album-is-available-offline' into 'develop'

#50 - Display if whole album is downloaded or cached

Closes #50

See merge request funkwhale/funkwhale-android!37
housekeeping/remove-warnings
Ryan Harg 3 years ago
parent
commit
1b6251259e
  1. 60
      app/src/main/java/audio/funkwhale/ffa/fragments/TracksFragment.kt
  2. 5
      app/src/main/res/layout/fragment_tracks.xml

60
app/src/main/java/audio/funkwhale/ffa/fragments/TracksFragment.kt

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
package audio.funkwhale.ffa.fragments
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.os.Bundle
import android.view.Gravity
import android.view.View
@ -12,12 +14,31 @@ import audio.funkwhale.ffa.adapters.TracksAdapter @@ -12,12 +14,31 @@ import audio.funkwhale.ffa.adapters.TracksAdapter
import audio.funkwhale.ffa.repositories.FavoritedRepository
import audio.funkwhale.ffa.repositories.FavoritesRepository
import audio.funkwhale.ffa.repositories.TracksRepository
import audio.funkwhale.ffa.utils.*
import audio.funkwhale.ffa.utils.Album
import audio.funkwhale.ffa.utils.Command
import audio.funkwhale.ffa.utils.CommandBus
import audio.funkwhale.ffa.utils.Event
import audio.funkwhale.ffa.utils.EventBus
import audio.funkwhale.ffa.utils.Request
import audio.funkwhale.ffa.utils.RequestBus
import audio.funkwhale.ffa.utils.Response
import audio.funkwhale.ffa.utils.Track
import audio.funkwhale.ffa.utils.getMetadata
import audio.funkwhale.ffa.utils.maybeLoad
import audio.funkwhale.ffa.utils.maybeNormalizeUrl
import audio.funkwhale.ffa.utils.toast
import audio.funkwhale.ffa.utils.wait
import com.google.android.exoplayer2.offline.Download
import com.preference.PowerPreference
import com.squareup.picasso.Picasso
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation
import kotlinx.android.synthetic.main.fragment_tracks.*
import kotlinx.android.synthetic.main.fragment_tracks.actions
import kotlinx.android.synthetic.main.fragment_tracks.artist
import kotlinx.android.synthetic.main.fragment_tracks.cover
import kotlinx.android.synthetic.main.fragment_tracks.play
import kotlinx.android.synthetic.main.fragment_tracks.scroller
import kotlinx.android.synthetic.main.fragment_tracks.title
import kotlinx.android.synthetic.main.fragment_tracks.tracks
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.flow.collect
@ -67,6 +88,35 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() { @@ -67,6 +88,35 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() {
watchEventBus()
}
override fun onDataFetched(data: List<Track>) {
when {
data.all { it.downloaded } -> {
title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.downloaded, 0, 0, 0)
title.compoundDrawables.forEach {
it?.colorFilter =
PorterDuffColorFilter(
requireContext().getColor(R.color.downloaded),
PorterDuff.Mode.SRC_IN
)
}
}
data.all { it.cached } -> {
title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.downloaded, 0, 0, 0)
title.compoundDrawables.forEach {
it?.colorFilter =
PorterDuffColorFilter(
requireContext().getColor(R.color.cached),
PorterDuff.Mode.SRC_IN
)
}
}
else -> {
title.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0)
}
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -136,7 +186,8 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() { @@ -136,7 +186,8 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() {
setOnMenuItemClickListener {
when (it.itemId) {
R.id.play_secondary -> when (PowerPreference.getDefaultFile().getString("play_order")) {
R.id.play_secondary -> when (PowerPreference.getDefaultFile()
.getString("play_order")) {
"in_order" -> CommandBus.send(Command.ReplaceQueue(adapter.data.shuffled()))
else -> CommandBus.send(Command.ReplaceQueue(adapter.data))
}
@ -196,7 +247,8 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() { @@ -196,7 +247,8 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() {
private suspend fun refreshDownloadedTrack(download: Download) {
if (download.state == Download.STATE_COMPLETED) {
download.getMetadata()?.let { info ->
adapter.data.withIndex().associate { it.value to it.index }.filter { it.key.id == info.id }.toList().getOrNull(0)?.let { match ->
adapter.data.withIndex().associate { it.value to it.index }.filter { it.key.id == info.id }
.toList().getOrNull(0)?.let { match ->
withContext(Main) {
adapter.data[match.second].downloaded = true
adapter.notifyItemChanged(match.second)

5
app/src/main/res/layout/fragment_tracks.xml

@ -181,7 +181,10 @@ @@ -181,7 +181,10 @@
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
tools:text="Absolution" />
app:drawableStartCompat="@drawable/downloaded"
app:drawableTint="@color/controlColor"
tools:text="Absolution"
android:drawablePadding="8dp"/>
</LinearLayout>

Loading…
Cancel
Save