From 9736ae451a34e68ba91963840100a66206a37bc1 Mon Sep 17 00:00:00 2001 From: birdbird <6892457-tzugen@users.noreply.gitlab.com> Date: Sun, 3 Dec 2023 14:12:10 +0000 Subject: [PATCH] Avoid two exceptions --- .../ultrasonic/fragment/SettingsFragment.kt | 7 +--- .../ultrasonic/service/DownloadService.kt | 40 +++++++++---------- .../service/ExternalStorageMonitor.kt | 6 ++- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt index 8d697581..a67d1782 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt @@ -17,7 +17,6 @@ import androidx.preference.PreferenceFragmentCompat import java.io.File import kotlin.math.ceil import org.koin.core.component.KoinComponent -import org.koin.core.component.inject import org.moire.ultrasonic.R import org.moire.ultrasonic.app.UApp import org.moire.ultrasonic.fragment.FragmentTitle.setTitle @@ -28,7 +27,7 @@ import org.moire.ultrasonic.log.FileLoggerTree.Companion.getLogFileSizes import org.moire.ultrasonic.log.FileLoggerTree.Companion.plantToTimberForest import org.moire.ultrasonic.log.FileLoggerTree.Companion.uprootFromTimberForest import org.moire.ultrasonic.provider.SearchSuggestionProvider -import org.moire.ultrasonic.service.MediaPlayerManager +import org.moire.ultrasonic.service.DownloadService import org.moire.ultrasonic.service.RxBus import org.moire.ultrasonic.util.ConfirmationDialog import org.moire.ultrasonic.util.Constants @@ -62,8 +61,6 @@ class SettingsFragment : private var debugLogToFile: CheckBoxPreference? = null private var customCacheLocation: CheckBoxPreference? = null - private val mediaPlayerManager: MediaPlayerManager by inject() - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.settings, rootKey) } @@ -344,7 +341,7 @@ class SettingsFragment : Settings.cacheLocationUri = path // Clear download queue. - mediaPlayerManager.clear() + DownloadService.clearDownloads() Storage.reset() Storage.checkForErrorsWithCustomRoot() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt index 0bf444a5..f414ce05 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadService.kt @@ -200,26 +200,6 @@ class DownloadService : Service(), KoinComponent { } } - private fun updateLiveData() { - val temp: MutableList = ArrayList() - temp.addAll(activeDownloads.values.map { it.downloadTrack.track }) - temp.addAll(downloadQueue.map { x -> x.track }) - observableDownloads.postValue(temp.distinct().sorted()) - } - - private fun clearDownloads() { - // Clear the pending queue - while (!downloadQueue.isEmpty()) { - postState(downloadQueue.remove().track, DownloadState.IDLE) - } - // Cancel all active downloads - for (download in activeDownloads) { - download.value.cancel() - } - activeDownloads.clear() - updateLiveData() - } - // We should use a single notification builder, otherwise the notification may not be updated // Set some values that never change private val notificationBuilder: NotificationCompat.Builder by lazy { @@ -344,6 +324,26 @@ class DownloadService : Service(), KoinComponent { } } + private fun updateLiveData() { + val temp: MutableList = ArrayList() + temp.addAll(activeDownloads.values.map { it.downloadTrack.track }) + temp.addAll(downloadQueue.map { x -> x.track }) + observableDownloads.postValue(temp.distinct().sorted()) + } + + fun clearDownloads() { + // Clear the pending queue + while (!downloadQueue.isEmpty()) { + postState(downloadQueue.remove().track, DownloadState.IDLE) + } + // Cancel all active downloads + for (download in activeDownloads) { + download.value.cancel() + } + activeDownloads.clear() + updateLiveData() + } + private fun setSaveFlagForTracks( shouldPin: Boolean, tracks: List diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/ExternalStorageMonitor.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/ExternalStorageMonitor.kt index 86cee2b8..1ad026f7 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/ExternalStorageMonitor.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/ExternalStorageMonitor.kt @@ -42,6 +42,10 @@ class ExternalStorageMonitor { } fun onDestroy() { - applicationContext().unregisterReceiver(ejectEventReceiver) + // avoid race conditions + try { + applicationContext().unregisterReceiver(ejectEventReceiver) + } catch (ignored: Exception) { + } } }