diff --git a/app/src/main/java/org/tasks/LocalBroadcastManager.java b/app/src/main/java/org/tasks/LocalBroadcastManager.java
index f37e11eee..533da208e 100644
--- a/app/src/main/java/org/tasks/LocalBroadcastManager.java
+++ b/app/src/main/java/org/tasks/LocalBroadcastManager.java
@@ -15,6 +15,7 @@ public class LocalBroadcastManager {
public static final String REFRESH_LIST = BuildConfig.APPLICATION_ID + ".REFRESH_LIST";
private static final String REPEAT = BuildConfig.APPLICATION_ID + ".REPEAT";
private static final String REFRESH_PURCHASES = BuildConfig.APPLICATION_ID + ".REFRESH_PURCHASES";
+ private static final String REFRESH_PREFERENCES = BuildConfig.APPLICATION_ID + ".REFRESH_PREFERENCES";
private final androidx.localbroadcastmanager.content.LocalBroadcastManager localBroadcastManager;
private final AppWidgetManager appWidgetManager;
@@ -45,6 +46,10 @@ public class LocalBroadcastManager {
localBroadcastManager.registerReceiver(broadcastReceiver, new IntentFilter(REFRESH_PURCHASES));
}
+ public void registerPreferenceReceiver(BroadcastReceiver broadcastReceiver) {
+ localBroadcastManager.registerReceiver(broadcastReceiver, new IntentFilter(REFRESH_PREFERENCES));
+ }
+
public void broadcastRefresh() {
localBroadcastManager.sendBroadcast(new Intent(REFRESH));
appWidgetManager.updateWidgets();
@@ -54,6 +59,10 @@ public class LocalBroadcastManager {
localBroadcastManager.sendBroadcast(new Intent(REFRESH_LIST));
}
+ public void broadcastPreferenceRefresh() {
+ localBroadcastManager.sendBroadcast(new Intent(REFRESH_PREFERENCES));
+ }
+
/**
* Action name for broadcast intent notifying that task was created from repeating template
*
EXTRAS_TASK_ID id of the task
diff --git a/app/src/main/java/org/tasks/backup/TasksFileBackupHelper.kt b/app/src/main/java/org/tasks/backup/TasksFileBackupHelper.kt
index 086d8b16a..17991b656 100644
--- a/app/src/main/java/org/tasks/backup/TasksFileBackupHelper.kt
+++ b/app/src/main/java/org/tasks/backup/TasksFileBackupHelper.kt
@@ -12,6 +12,7 @@ import dagger.hilt.InstallIn
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.components.ApplicationComponent
import kotlinx.coroutines.runBlocking
+import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.preferences.Preferences
import timber.log.Timber
@@ -26,6 +27,7 @@ class TasksFileBackupHelper(
internal interface TasksFileBackupHelperEntryPoint {
val tasksJsonImporter: TasksJsonImporter
val preferences: Preferences
+ val localBroadcastManager: LocalBroadcastManager
}
override fun performBackup(
@@ -43,6 +45,7 @@ class TasksFileBackupHelper(
Timber.d("Backing up ${it.absolutePath}")
super.performBackup(oldState, data, newState)
preferences.setLong(R.string.p_backups_android_backup_last, it.lastModified())
+ hilt.localBroadcastManager.broadcastPreferenceRefresh()
}
?: Timber.e("$path not found")
}
diff --git a/app/src/main/java/org/tasks/jobs/DriveUploader.kt b/app/src/main/java/org/tasks/jobs/DriveUploader.kt
index 115e7a9f4..91b9cc9e8 100644
--- a/app/src/main/java/org/tasks/jobs/DriveUploader.kt
+++ b/app/src/main/java/org/tasks/jobs/DriveUploader.kt
@@ -8,6 +8,7 @@ import androidx.work.Data
import androidx.work.WorkerParameters
import com.google.api.client.googleapis.json.GoogleJsonResponseException
import com.google.api.services.drive.model.File
+import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase
@@ -26,7 +27,9 @@ class DriveUploader @WorkerInject constructor(
@Assisted workerParams: WorkerParameters,
firebase: Firebase,
private val drive: DriveInvoker,
- private val preferences: Preferences) : BaseWorker(context, workerParams, firebase) {
+ private val preferences: Preferences,
+ private val localBroadcastManager: LocalBroadcastManager
+) : BaseWorker(context, workerParams, firebase) {
override suspend fun run(): Result {
val inputData = inputData
@@ -35,6 +38,7 @@ class DriveUploader @WorkerInject constructor(
val folder = getFolder() ?: return Result.failure()
preferences.setString(R.string.p_google_drive_backup_folder, folder.id)
drive.createFile(folder.id, uri)
+ localBroadcastManager.broadcastPreferenceRefresh()
if (inputData.getBoolean(EXTRA_PURGE, false)) {
drive
.getFilesByPrefix(folder.id, "auto.")
diff --git a/app/src/main/java/org/tasks/preferences/MainPreferences.kt b/app/src/main/java/org/tasks/preferences/MainPreferences.kt
index 8fdc5d249..9a36c660b 100644
--- a/app/src/main/java/org/tasks/preferences/MainPreferences.kt
+++ b/app/src/main/java/org/tasks/preferences/MainPreferences.kt
@@ -1,9 +1,13 @@
package org.tasks.preferences
import android.app.Activity
+import android.content.BroadcastReceiver
+import android.content.Context
import android.content.Intent
+import androidx.activity.viewModels
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity
import dagger.hilt.android.AndroidEntryPoint
+import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.jobs.WorkManager
import org.tasks.preferences.fragments.MainSettingsFragment
@@ -19,11 +23,28 @@ class MainPreferences : BasePreferences() {
@Inject lateinit var syncAdapters: SyncAdapters
@Inject lateinit var workManager: WorkManager
@Inject lateinit var toaster: Toaster
+ @Inject lateinit var localBroadcastManager: LocalBroadcastManager
+
+ private val viewModel: PreferencesViewModel by viewModels()
override fun getRootTitle() = R.string.TLA_menu_settings
override fun getRootPreference() = MainSettingsFragment()
+ override fun onResume() {
+ super.onResume()
+
+ localBroadcastManager.registerPreferenceReceiver(refreshReceiver)
+
+ viewModel.updateBackups()
+ }
+
+ override fun onPause() {
+ super.onPause()
+
+ localBroadcastManager.unregisterReceiver(refreshReceiver)
+ }
+
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CALDAV_SETTINGS) {
if (resultCode == RESULT_OK) {
@@ -41,4 +62,10 @@ class MainPreferences : BasePreferences() {
super.onActivityResult(requestCode, resultCode, data)
}
}
+
+ private val refreshReceiver = object : BroadcastReceiver() {
+ override fun onReceive(context: Context?, intent: Intent?) {
+ viewModel.updateBackups()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt b/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt
index 2df148431..334df1805 100644
--- a/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt
+++ b/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt
@@ -87,7 +87,7 @@ class PreferencesViewModel @ViewModelInject constructor(
.takeIf { it >= 0 }
}
- init {
+ fun updateBackups() {
updateLocalBackup()
updateDriveBackup()
updateAndroidBackup()