fixes a crash when trying to delete a freshly recorded track
This commit is contained in:
parent
36b891152c
commit
c81105186f
3 changed files with 26 additions and 8 deletions
|
@ -152,8 +152,7 @@ class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDi
|
|||
// user tapped remove track
|
||||
true -> {
|
||||
// switch to TracklistFragment and remove track there
|
||||
val trackId: Long = arguments?.getLong(Keys.ARG_TRACK_ID, -1L) ?: -1L
|
||||
val bundle: Bundle = bundleOf(Keys.ARG_TRACK_ID to trackId)
|
||||
val bundle: Bundle = bundleOf(Keys.ARG_TRACK_ID to track.getTrackId())
|
||||
findNavController().navigate(R.id.tracklist_fragment, bundle)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,9 @@ 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.Dispatchers.Main
|
||||
import kotlinx.coroutines.launch
|
||||
import org.y20k.trackbook.core.TracklistElement
|
||||
import org.y20k.trackbook.helpers.LogHelper
|
||||
import org.y20k.trackbook.helpers.TrackHelper
|
||||
|
@ -116,7 +119,7 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener,
|
|||
// user tapped remove track
|
||||
true -> {
|
||||
toggleOnboardingLayout(tracklistAdapter.itemCount -1)
|
||||
tracklistAdapter.removeTrack(activity as Context, payload)
|
||||
tracklistAdapter.removeTrackAtPosition(activity as Context, payload)
|
||||
}
|
||||
// user tapped cancel
|
||||
false -> {
|
||||
|
@ -161,9 +164,10 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener,
|
|||
val deleteTrackId: Long = arguments?.getLong(Keys.ARG_TRACK_ID, -1L) ?: -1L
|
||||
arguments?.putLong(Keys.ARG_TRACK_ID, -1L)
|
||||
if (deleteTrackId != -1L) {
|
||||
val position: Int = tracklistAdapter.findPosition(deleteTrackId)
|
||||
tracklistAdapter.removeTrack(this@TracklistFragment.activity as Context, position)
|
||||
toggleOnboardingLayout(tracklistAdapter.itemCount -1)
|
||||
CoroutineScope(Main). launch {
|
||||
tracklistAdapter.removeTrackById(this@TracklistFragment.activity as Context, deleteTrackId)
|
||||
toggleOnboardingLayout(tracklistAdapter.itemCount - 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter<Re
|
|||
|
||||
|
||||
/* Removes track and track files for given position - used by TracklistFragment */
|
||||
fun removeTrack(context: Context, position: Int) {
|
||||
fun removeTrackAtPosition(context: Context, position: Int) {
|
||||
CoroutineScope(IO).launch {
|
||||
val deferred: Deferred<Tracklist> = async { FileHelper.deleteTrackSuspended(context, position, tracklist) }
|
||||
// wait for result and store in tracklist
|
||||
|
@ -125,8 +125,23 @@ class TracklistAdapter(private val fragment: Fragment) : RecyclerView.Adapter<Re
|
|||
}
|
||||
|
||||
|
||||
/* Removes track and track files for given track id - used by TracklistFragment */
|
||||
fun removeTrackById(context: Context, trackId: Long) {
|
||||
CoroutineScope(IO).launch {
|
||||
// reload tracklist //todo check if necessary
|
||||
// tracklist = FileHelper.readTracklist(context)
|
||||
val position: Int = findPosition(trackId)
|
||||
val deferred: Deferred<Tracklist> = async { FileHelper.deleteTrackSuspended(context, position, tracklist) }
|
||||
// wait for result and store in tracklist
|
||||
withContext(Main) {
|
||||
tracklist = deferred.await()
|
||||
notifyItemRemoved(position) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Finds current position of track element in adapter list */
|
||||
fun findPosition(trackId: Long): Int {
|
||||
private fun findPosition(trackId: Long): Int {
|
||||
tracklist.tracklistElements.forEachIndexed {index, tracklistElement ->
|
||||
if (tracklistElement.getTrackId() == trackId) return index
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue