From 222422b884c5d5ae10412da9dd13c69be7993aff Mon Sep 17 00:00:00 2001 From: Ethan Dalool Date: Sun, 3 Apr 2022 11:11:31 -0700 Subject: [PATCH] Use coroutine to show onboarding again after deleting final track. --- .../org/y20k/trackbook/TracklistFragment.kt | 35 ++++++++++++------- .../trackbook/tracklist/TracklistAdapter.kt | 9 +++++ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt b/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt index 0629631..28d3bca 100644 --- a/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt @@ -31,10 +31,11 @@ import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.* 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.helpers.FileHelper import org.y20k.trackbook.helpers.LogHelper import org.y20k.trackbook.helpers.TrackHelper import org.y20k.trackbook.helpers.UiHelper @@ -109,17 +110,25 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener, /* Overrides onYesNoDialog from YesNoDialogListener */ override fun onYesNoDialog(type: Int, dialogResult: Boolean, payload: Int, payloadString: String) { - when (type) { - Keys.DIALOG_DELETE_TRACK -> { - when (dialogResult) { - // user tapped remove track - true -> { - toggleOnboardingLayout() - tracklistAdapter.removeTrackAtPosition(activity as Context, payload) - } - // user tapped cancel - false -> { - tracklistAdapter.notifyItemChanged(payload) + CoroutineScope(Dispatchers.IO).launch { + when (type) { + Keys.DIALOG_DELETE_TRACK -> { + when (dialogResult) { + // user tapped remove track + true -> { + toggleOnboardingLayout() + val deferred: Deferred = async { tracklistAdapter.removeTrackAtPositionSuspended(activity as Context, payload) } + // wait for result and store in tracklist + withContext(Main) { + deferred.await() + toggleOnboardingLayout() + } + + } + // user tapped cancel + false -> { + tracklistAdapter.notifyItemChanged(payload) + } } } } diff --git a/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt b/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt index 5a40b97..11dd0e5 100644 --- a/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt +++ b/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt @@ -31,6 +31,8 @@ import androidx.fragment.app.Fragment import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import java.util.* +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine import kotlinx.coroutines.* import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main @@ -164,6 +166,13 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter + cont.resume(removeTrackAtPosition(context, position)) + } + } + /* Removes track and track files for given track id - used by TracklistFragment */ fun removeTrackById(context: Context, trackId: Long) { CoroutineScope(IO).launch {