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()