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.

This commit is contained in:
MohitMaliFtechiz 2024-08-12 15:35:49 +05:30
parent 7008e7b90b
commit 4cc76fbd89
3 changed files with 29 additions and 6 deletions

View File

@ -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) {

View File

@ -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 {

View File

@ -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"
}
}