From 4cc76fbd89a6da59edb30d621c0a33d22eaa5083 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Mon, 12 Aug 2024 15:35:49 +0530 Subject: [PATCH] Added migration code to move from the internal app directory to the public app directory upon application update. This ensures that after updating, users will automatically start using the public directory for downloads without needing to configure storage settings. --- .../kiwixmobile/main/KiwixMainActivity.kt | 21 +++++++++++++++++++ .../kiwixmobile/core/main/CoreMainActivity.kt | 7 +------ .../core/utils/SharedPreferenceUtil.kt | 7 +++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt index 9b7476d40..a39306f6f 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt @@ -33,12 +33,15 @@ import androidx.navigation.NavDestination import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.setupWithNavController import com.google.android.material.navigation.NavigationView +import eu.mhutti1.utils.storage.StorageDeviceUtils import org.kiwix.kiwixmobile.BuildConfig import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions import org.kiwix.kiwixmobile.core.dao.NewBookDao import org.kiwix.kiwixmobile.core.downloader.fetch.DOWNLOAD_NOTIFICATION_TITLE import org.kiwix.kiwixmobile.core.main.CoreMainActivity +import org.kiwix.kiwixmobile.core.utils.EXTERNAL_SELECT_POSITION +import org.kiwix.kiwixmobile.core.utils.INTERNAL_SELECT_POSITION import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange import org.kiwix.kiwixmobile.databinding.ActivityKiwixMainBinding import org.kiwix.kiwixmobile.kiwixActivityComponent @@ -114,6 +117,24 @@ class KiwixMainActivity : CoreMainActivity() { onNavigationItemSelected(item) } activityKiwixMainBinding.bottomNavView.setupWithNavController(navController) + migrateInternalToPublicAppDirectory() + } + + private fun migrateInternalToPublicAppDirectory() { + if (!sharedPreferenceUtil.prefIsAppDirectoryMigrated) { + val writableStoragePaths = StorageDeviceUtils.getWritableStorage(this) + val targetStoragePath = when (sharedPreferenceUtil.storagePosition) { + INTERNAL_SELECT_POSITION -> + sharedPreferenceUtil.getPublicDirectoryPath(writableStoragePaths[0].name) + + EXTERNAL_SELECT_POSITION -> writableStoragePaths.getOrNull(1)?.name + else -> null + } + targetStoragePath?.let { + sharedPreferenceUtil.putPrefStorage(it) + sharedPreferenceUtil.putPrefAppDirectoryMigrated(true) + } + } } override fun onConfigurationChanged(newConfig: Configuration) { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt index a45bef9e3..488bbc073 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt @@ -114,12 +114,7 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider { } } - setMainActivityToCoreApp().also { - // Creates the public app-specific directory for existing users who have not - // configured storage, allowing them to copy their ZIM files into this - // public directory. This directory is created only once. - sharedPreferenceUtil.defaultPublicStorage() - } + setMainActivityToCoreApp() if (!sharedPreferenceUtil.prefIsBookmarksMigrated) { // run the migration on background thread to avoid any UI related issues. CoroutineScope(Dispatchers.IO).launch { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt index 043b7d50b..b9a9cc302 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt @@ -103,6 +103,9 @@ class SharedPreferenceUtil @Inject constructor(val context: Context) { val prefIsHistoryMigrated: Boolean get() = sharedPreferences.getBoolean(PREF_HISTORY_MIGRATED, false) + val prefIsAppDirectoryMigrated: Boolean + get() = sharedPreferences.getBoolean(PREF_APP_DIRECTORY_TO_PUBLIC_MIGRATED, false) + val prefStorage: String get() { val storage = sharedPreferences.getString(PREF_STORAGE, null) @@ -146,6 +149,9 @@ class SharedPreferenceUtil @Inject constructor(val context: Context) { fun putPrefNotesMigrated(isMigrated: Boolean) = sharedPreferences.edit { putBoolean(PREF_NOTES_MIGRATED, isMigrated) } + fun putPrefAppDirectoryMigrated(isMigrated: Boolean) = + sharedPreferences.edit { putBoolean(PREF_APP_DIRECTORY_TO_PUBLIC_MIGRATED, isMigrated) } + fun putPrefLanguage(language: String) = sharedPreferences.edit { putString(PREF_LANG, language) } @@ -310,5 +316,6 @@ class SharedPreferenceUtil @Inject constructor(val context: Context) { const val PREF_RECENT_SEARCH_MIGRATED = "pref_recent_search_migrated" const val PREF_HISTORY_MIGRATED = "pref_history_migrated" const val PREF_NOTES_MIGRATED = "pref_notes_migrated" + const val PREF_APP_DIRECTORY_TO_PUBLIC_MIGRATED = "pref_app_directory_to_public_migrated" } }