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