Added ability to not fetch on create for fragments. Added animation on queue change.
This commit is contained in:
parent
2d5e73dcd4
commit
a63f3f7e68
|
@ -2,6 +2,7 @@ package com.github.apognu.otter.activities
|
||||||
|
|
||||||
import android.animation.Animator
|
import android.animation.Animator
|
||||||
import android.animation.AnimatorListenerAdapter
|
import android.animation.AnimatorListenerAdapter
|
||||||
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
@ -9,6 +10,7 @@ import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.view.animation.AccelerateDecelerateInterpolator
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
|
@ -298,6 +300,16 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is Event.QueueChanged -> {
|
||||||
|
findViewById<View>(R.id.nav_queue)?.let { view ->
|
||||||
|
ObjectAnimator.ofFloat(view, View.ROTATION, 0f, 360f).let {
|
||||||
|
it.duration = 500
|
||||||
|
it.interpolator = AccelerateDecelerateInterpolator()
|
||||||
|
it.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ class BrowseFragment : Fragment() {
|
||||||
tabs.getTabAt(0)?.select()
|
tabs.getTabAt(0)?.select()
|
||||||
|
|
||||||
pager.adapter = adapter
|
pager.adapter = adapter
|
||||||
pager.offscreenPageLimit = 4
|
pager.offscreenPageLimit = 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ class FavoritesFragment : FunkwhaleFragment<Track, FavoritesAdapter>() {
|
||||||
|
|
||||||
lateinit var favoritesRepository: FavoritesRepository
|
lateinit var favoritesRepository: FavoritesRepository
|
||||||
|
|
||||||
|
override var fetchOnCreate = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,9 @@ abstract class FunkwhaleFragment<D : Any, A : FunkwhaleAdapter<D, *>> : Fragment
|
||||||
lateinit var repository: Repository<D, *>
|
lateinit var repository: Repository<D, *>
|
||||||
lateinit var adapter: A
|
lateinit var adapter: A
|
||||||
|
|
||||||
|
open var fetchOnCreate = true
|
||||||
|
private var initialFetched = false
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
return inflater.inflate(viewRes, container, false)
|
return inflater.inflate(viewRes, container, false)
|
||||||
}
|
}
|
||||||
|
@ -49,14 +52,7 @@ abstract class FunkwhaleFragment<D : Any, A : FunkwhaleAdapter<D, *>> : Fragment
|
||||||
|
|
||||||
swiper?.isRefreshing = true
|
swiper?.isRefreshing = true
|
||||||
|
|
||||||
repository.fetch().untilNetwork {
|
if (fetchOnCreate) fetch()
|
||||||
swiper?.isRefreshing = false
|
|
||||||
|
|
||||||
onDataFetched(it)
|
|
||||||
|
|
||||||
adapter.data = it.toMutableList()
|
|
||||||
adapter.notifyDataSetChanged()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
@ -74,7 +70,24 @@ abstract class FunkwhaleFragment<D : Any, A : FunkwhaleAdapter<D, *>> : Fragment
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!fetchOnCreate) fetch()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun onDataFetched(data: List<D>) {}
|
open fun onDataFetched(data: List<D>) {}
|
||||||
|
|
||||||
|
private fun fetch() {
|
||||||
|
if (!initialFetched) {
|
||||||
|
initialFetched = true
|
||||||
|
|
||||||
|
repository.fetch().untilNetwork {
|
||||||
|
swiper?.isRefreshing = false
|
||||||
|
|
||||||
|
onDataFetched(it)
|
||||||
|
|
||||||
|
adapter.data = it.toMutableList()
|
||||||
|
adapter.notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,8 @@ class FavoritesRepository(override val context: Context?) : Repository<Track, Tr
|
||||||
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>) = data.map {
|
||||||
it.apply {
|
it.favorite = true
|
||||||
it.favorite = true
|
it
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addFavorite(id: Int) {
|
fun addFavorite(id: Int) {
|
||||||
|
|
|
@ -51,6 +51,8 @@ class HttpUpstream<D : Any, R : FunkwhaleResponse<D>>(private val behavior: Beha
|
||||||
{ response ->
|
{ response ->
|
||||||
val data = data.plus(response.getData())
|
val data = data.plus(response.getData())
|
||||||
|
|
||||||
|
log(data.size.toString())
|
||||||
|
|
||||||
if (behavior == Behavior.Progressive || response.next == null) {
|
if (behavior == Behavior.Progressive || response.next == null) {
|
||||||
channel.offer(Repository.Response(Repository.Origin.Network, data))
|
channel.offer(Repository.Response(Repository.Origin.Network, data))
|
||||||
} else {
|
} else {
|
||||||
|
@ -75,6 +77,8 @@ class HttpUpstream<D : Any, R : FunkwhaleResponse<D>>(private val behavior: Beha
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun get(url: String): Result<R, FuelError> {
|
suspend fun get(url: String): Result<R, FuelError> {
|
||||||
|
log(url)
|
||||||
|
|
||||||
val token = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("access_token")
|
val token = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("access_token")
|
||||||
|
|
||||||
val (_, response, result) = Fuel
|
val (_, response, result) = Fuel
|
||||||
|
|
Loading…
Reference in New Issue