From 21e4293adb71062483fbd8aa160d1c0ee89193b7 Mon Sep 17 00:00:00 2001 From: birdbird <6892457-tzugen@users.noreply.gitlab.com> Date: Thu, 6 Jul 2023 20:49:29 +0000 Subject: [PATCH] Merge branch 'root' into 'develop' Avoid rare NPE See merge request ultrasonic/ultrasonic!1073 (cherry picked from commit 7209779b64820572910059fdd24342bb73734b54) ecee57e1 Avoid rare NPE --- .../ultrasonic/activity/NavigationActivity.kt | 2 +- .../ultrasonic/fragment/SettingsFragment.kt | 2 +- .../org/moire/ultrasonic/util/Storage.kt | 33 ++++++++++++------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 76df1ea5..160677b1 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -306,7 +306,7 @@ class NavigationActivity : AppCompatActivity() { Storage.reset() lifecycleScope.launch(Dispatchers.IO) { - Storage.ensureRootIsAvailable() + Storage.checkForErrorsWithCustomRoot() } setMenuForServerCapabilities() 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 700bde05..d007c399 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt @@ -344,7 +344,7 @@ class SettingsFragment : // Clear download queue. mediaPlayerManager.clear() Storage.reset() - Storage.ensureRootIsAvailable() + Storage.checkForErrorsWithCustomRoot() } private fun setDebugLogToFile(writeLog: Boolean) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt index f6b5b9d2..933730f4 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt @@ -22,19 +22,23 @@ import timber.log.Timber object Storage { val mediaRoot: ResettableLazy = ResettableLazy { - getRoot()!! + val ret = getRoot() + rootNotFoundError = ret.second + ret.first } + var rootNotFoundError: Boolean = false + fun reset() { StorageFile.storageFilePathDictionary.clear() StorageFile.notExistingPathDictionary.clear() mediaRoot.reset() + rootNotFoundError = false Timber.i("StorageFile caches were reset") } - fun ensureRootIsAvailable() { - val root = getRoot() - if (root == null) { + fun checkForErrorsWithCustomRoot() { + if (rootNotFoundError) { Settings.customCacheLocation = false Settings.cacheLocationUri = "" Util.toast(UApp.applicationContext(), R.string.settings_cache_location_error) @@ -98,18 +102,25 @@ object Storage { return success } - private fun getRoot(): AbstractFile? { + private fun getRoot(): Pair { return if (Settings.customCacheLocation) { - if (Settings.cacheLocationUri.isBlank()) return null + if (Settings.cacheLocationUri.isBlank()) return Pair(getDefaultRoot(), true) val documentFile = DocumentFile.fromTreeUri( UApp.applicationContext(), Uri.parse(Settings.cacheLocationUri) - ) ?: return null - if (!documentFile.exists()) return null - StorageFile(null, documentFile.uri, documentFile.name!!, documentFile.isDirectory) + ) ?: return Pair(getDefaultRoot(), true) + if (!documentFile.exists()) return Pair(getDefaultRoot(), true) + Pair( + StorageFile(null, documentFile.uri, documentFile.name!!, documentFile.isDirectory), + false + ) } else { - val file = File(FileUtil.defaultMusicDirectory.path) - JavaFile(null, file) + Pair(getDefaultRoot(), false) } } + + private fun getDefaultRoot(): JavaFile { + val file = File(FileUtil.defaultMusicDirectory.path) + return JavaFile(null, file) + } }