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
 | 
					                    // user tapped remove track
 | 
				
			||||||
                    true -> {
 | 
					                    true -> {
 | 
				
			||||||
                        // switch to TracklistFragment and remove track there
 | 
					                        // 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 track.getTrackId())
 | 
				
			||||||
                        val bundle: Bundle = bundleOf(Keys.ARG_TRACK_ID to trackId)
 | 
					 | 
				
			||||||
                        findNavController().navigate(R.id.tracklist_fragment, bundle)
 | 
					                        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.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.Dispatchers.Main
 | 
				
			||||||
 | 
					import kotlinx.coroutines.launch
 | 
				
			||||||
import org.y20k.trackbook.core.TracklistElement
 | 
					import org.y20k.trackbook.core.TracklistElement
 | 
				
			||||||
import org.y20k.trackbook.helpers.LogHelper
 | 
					import org.y20k.trackbook.helpers.LogHelper
 | 
				
			||||||
import org.y20k.trackbook.helpers.TrackHelper
 | 
					import org.y20k.trackbook.helpers.TrackHelper
 | 
				
			||||||
| 
						 | 
					@ -116,7 +119,7 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener,
 | 
				
			||||||
                    // user tapped remove track
 | 
					                    // user tapped remove track
 | 
				
			||||||
                    true -> {
 | 
					                    true -> {
 | 
				
			||||||
                        toggleOnboardingLayout(tracklistAdapter.itemCount -1)
 | 
					                        toggleOnboardingLayout(tracklistAdapter.itemCount -1)
 | 
				
			||||||
                        tracklistAdapter.removeTrack(activity as Context, payload)
 | 
					                        tracklistAdapter.removeTrackAtPosition(activity as Context, payload)
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    // user tapped cancel
 | 
					                    // user tapped cancel
 | 
				
			||||||
                    false -> {
 | 
					                    false -> {
 | 
				
			||||||
| 
						 | 
					@ -161,11 +164,12 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener,
 | 
				
			||||||
            val deleteTrackId: Long = arguments?.getLong(Keys.ARG_TRACK_ID, -1L) ?: -1L
 | 
					            val deleteTrackId: Long = arguments?.getLong(Keys.ARG_TRACK_ID, -1L) ?: -1L
 | 
				
			||||||
            arguments?.putLong(Keys.ARG_TRACK_ID, -1L)
 | 
					            arguments?.putLong(Keys.ARG_TRACK_ID, -1L)
 | 
				
			||||||
            if (deleteTrackId != -1L) {
 | 
					            if (deleteTrackId != -1L) {
 | 
				
			||||||
                val position: Int = tracklistAdapter.findPosition(deleteTrackId)
 | 
					                CoroutineScope(Main). launch {
 | 
				
			||||||
                tracklistAdapter.removeTrack(this@TracklistFragment.activity as Context, position)
 | 
					                    tracklistAdapter.removeTrackById(this@TracklistFragment.activity as Context, deleteTrackId)
 | 
				
			||||||
                    toggleOnboardingLayout(tracklistAdapter.itemCount - 1)
 | 
					                    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 */
 | 
					    /* 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 {
 | 
					        CoroutineScope(IO).launch {
 | 
				
			||||||
            val deferred: Deferred<Tracklist> = async { FileHelper.deleteTrackSuspended(context, position, tracklist) }
 | 
					            val deferred: Deferred<Tracklist> = async { FileHelper.deleteTrackSuspended(context, position, tracklist) }
 | 
				
			||||||
            // wait for result and store in 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 */
 | 
					    /* 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 ->
 | 
					        tracklist.tracklistElements.forEachIndexed {index, tracklistElement ->
 | 
				
			||||||
            if (tracklistElement.getTrackId() == trackId) return index
 | 
					            if (tracklistElement.getTrackId() == trackId) return index
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue