Trigger moving database if dataOnExternalStorage changed by import

This commit is contained in:
PhilKes 2025-01-13 18:05:43 +01:00 committed by Phil
parent b55c01c94a
commit 02e97768ce
4 changed files with 31 additions and 5 deletions

View file

@ -135,7 +135,7 @@ class SettingsFragment : Fragment() {
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
result.data?.data?.let { uri ->
if (model.preferences.import(requireContext(), uri)) {
if (model.importPreferences(requireContext(), uri)) {
showToast(R.string.import_settings_success)
} else {
showToast(R.string.import_settings_failure)
@ -446,7 +446,7 @@ class SettingsFragment : Fragment() {
}
ResetSettings.setOnClickListener {
showDialog(R.string.reset_settings_message, R.string.reset_settings) { _, _ ->
model.preferences.reset()
model.resetPreferences()
showToast(R.string.reset_settings_success)
}
}

View file

@ -1,6 +1,7 @@
package com.philkes.notallyx.presentation.viewmodel
import android.app.Application
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.widget.Toast
@ -187,7 +188,7 @@ class BaseNoteModel(private val app: Application) : AndroidViewModel(app) {
withContext(Dispatchers.IO) {
val database = NotallyDatabase.getDatabase(app, observePreferences = false).value
database.checkpoint()
NotallyDatabase.getCurrentDatabaseFile(app)
NotallyDatabase.getInternalDatabaseFile(app)
.copyTo(NotallyDatabase.getExternalDatabaseFile(app), overwrite = true)
}
savePreference(preferences.dataOnExternalStorage, true)
@ -199,7 +200,7 @@ class BaseNoteModel(private val app: Application) : AndroidViewModel(app) {
withContext(Dispatchers.IO) {
val database = NotallyDatabase.getDatabase(app, observePreferences = false).value
database.checkpoint()
NotallyDatabase.getCurrentDatabaseFile(app)
NotallyDatabase.getExternalDatabaseFile(app)
.copyTo(NotallyDatabase.getInternalDatabaseFile(app), overwrite = true)
NotallyDatabase.getExternalDatabaseFiles(app).forEach {
if (it.exists()) {
@ -464,6 +465,30 @@ class BaseNoteModel(private val app: Application) : AndroidViewModel(app) {
viewModelScope.launch(Dispatchers.IO) { function() }
}
fun resetPreferences() {
preferences.reset()
refreshDataOnExternalStorage()
}
fun importPreferences(context: Context, uri: Uri): Boolean {
val success = preferences.import(context, uri)
refreshDataOnExternalStorage()
return success
}
private fun refreshDataOnExternalStorage() {
val dataOnExternalStorageBefore = preferences.dataOnExternalStorage.value
val dataOnExternalStorageAfter = preferences.dataOnExternalStorage.getFreshValue()
if (dataOnExternalStorageBefore != dataOnExternalStorageAfter) {
if (dataOnExternalStorageAfter) {
enableExternalData()
} else {
disableExternalData()
}
}
preferences.dataOnExternalStorage.refresh()
}
companion object {
fun transform(list: List<BaseNote>, pinned: Header, others: Header): List<Item> {

View file

@ -234,7 +234,6 @@ class NotallyXPreferences private constructor(private val app: Application) {
listItemSorting,
labelsHiddenInNavigation,
autoBackup,
dataOnExternalStorage,
dateFormat,
maxItems,
maxTitle,

View file

@ -88,6 +88,8 @@ abstract class BasePreference<T>(
cachedValue = null
getData().postValue(value)
}
fun getFreshValue() = getValue(sharedPreferences)
}
fun <T> BasePreference<T>.observeForeverSkipFirst(observer: Observer<T>) {