Use coroutine to show onboarding again after deleting final track.
This commit is contained in:
parent
d6a14956e1
commit
222422b884
2 changed files with 31 additions and 13 deletions
|
@ -31,10 +31,11 @@ import androidx.recyclerview.widget.DefaultItemAnimator
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
import kotlinx.coroutines.launch
|
import org.y20k.trackbook.core.Tracklist
|
||||||
import org.y20k.trackbook.core.TracklistElement
|
import org.y20k.trackbook.core.TracklistElement
|
||||||
|
import org.y20k.trackbook.helpers.FileHelper
|
||||||
import org.y20k.trackbook.helpers.LogHelper
|
import org.y20k.trackbook.helpers.LogHelper
|
||||||
import org.y20k.trackbook.helpers.TrackHelper
|
import org.y20k.trackbook.helpers.TrackHelper
|
||||||
import org.y20k.trackbook.helpers.UiHelper
|
import org.y20k.trackbook.helpers.UiHelper
|
||||||
|
@ -109,13 +110,20 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener,
|
||||||
|
|
||||||
/* Overrides onYesNoDialog from YesNoDialogListener */
|
/* Overrides onYesNoDialog from YesNoDialogListener */
|
||||||
override fun onYesNoDialog(type: Int, dialogResult: Boolean, payload: Int, payloadString: String) {
|
override fun onYesNoDialog(type: Int, dialogResult: Boolean, payload: Int, payloadString: String) {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
when (type) {
|
when (type) {
|
||||||
Keys.DIALOG_DELETE_TRACK -> {
|
Keys.DIALOG_DELETE_TRACK -> {
|
||||||
when (dialogResult) {
|
when (dialogResult) {
|
||||||
// user tapped remove track
|
// user tapped remove track
|
||||||
true -> {
|
true -> {
|
||||||
toggleOnboardingLayout()
|
toggleOnboardingLayout()
|
||||||
tracklistAdapter.removeTrackAtPosition(activity as Context, payload)
|
val deferred: Deferred<Unit> = async { tracklistAdapter.removeTrackAtPositionSuspended(activity as Context, payload) }
|
||||||
|
// wait for result and store in tracklist
|
||||||
|
withContext(Main) {
|
||||||
|
deferred.await()
|
||||||
|
toggleOnboardingLayout()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// user tapped cancel
|
// user tapped cancel
|
||||||
false -> {
|
false -> {
|
||||||
|
@ -125,6 +133,7 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// toggle onboarding layout
|
// toggle onboarding layout
|
||||||
|
|
|
@ -31,6 +31,8 @@ import androidx.fragment.app.Fragment
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.coroutines.resume
|
||||||
|
import kotlin.coroutines.suspendCoroutine
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
|
@ -164,6 +166,13 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter<Re
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Suspend function: Wrapper for removeTrackAtPosition */
|
||||||
|
suspend fun removeTrackAtPositionSuspended(context: Context, position: Int) {
|
||||||
|
return suspendCoroutine { cont ->
|
||||||
|
cont.resume(removeTrackAtPosition(context, position))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Removes track and track files for given track id - used by TracklistFragment */
|
/* Removes track and track files for given track id - used by TracklistFragment */
|
||||||
fun removeTrackById(context: Context, trackId: Long) {
|
fun removeTrackById(context: Context, trackId: Long) {
|
||||||
CoroutineScope(IO).launch {
|
CoroutineScope(IO).launch {
|
||||||
|
|
Loading…
Reference in a new issue