Add RefreshBroadcaster interface

pull/3881/head
Alex Baker 3 months ago
parent c9721790ce
commit 68601873fd

@ -3,8 +3,8 @@ package com.todoroo.astrid.adapter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskMover import com.todoroo.astrid.service.TaskMover
import com.todoroo.astrid.subtasks.SubtasksFilterUpdater import com.todoroo.astrid.subtasks.SubtasksFilterUpdater
import org.tasks.LocalBroadcastManager
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
@ -24,9 +24,9 @@ class AstridTaskAdapter internal constructor(
googleTaskDao: GoogleTaskDao, googleTaskDao: GoogleTaskDao,
caldavDao: CaldavDao, caldavDao: CaldavDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
taskMover: TaskMover, taskMover: TaskMover,
) : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) { ) : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, refreshBroadcaster, taskMover) {
private val chainedCompletions = Collections.synchronizedMap(HashMap<String, ArrayList<String>>()) private val chainedCompletions = Collections.synchronizedMap(HashMap<String, ArrayList<String>>())
@ -56,7 +56,7 @@ class AstridTaskAdapter internal constructor(
for (i in 0 until abs(delta)) { for (i in 0 until abs(delta)) {
updater.indent(list, filter, targetTaskId, delta) updater.indent(list, filter, targetTaskId, delta)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e) Timber.e(e)
} }

@ -6,7 +6,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.activities.TagSettingsActivity import org.tasks.activities.TagSettingsActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
@ -30,7 +30,7 @@ class SubheaderClickHandler @Inject constructor(
private val activity: Activity, private val activity: Activity,
private val tasksPreferences: TasksPreferences, private val tasksPreferences: TasksPreferences,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
): SubheaderViewHolder.ClickHandler { ): SubheaderViewHolder.ClickHandler {
override fun onClick(subheader: NavigationDrawerSubheader) { override fun onClick(subheader: NavigationDrawerSubheader) {
(activity as AppCompatActivity).lifecycleScope.launch { (activity as AppCompatActivity).lifecycleScope.launch {
@ -40,7 +40,7 @@ class SubheaderClickHandler @Inject constructor(
CALDAV, CALDAV,
TASKS -> caldavDao.setCollapsed(subheader.id, collapsed) TASKS -> caldavDao.setCollapsed(subheader.id, collapsed)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
} }

@ -13,7 +13,7 @@ import com.todoroo.astrid.core.SortHelper.SORT_START
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskMover import com.todoroo.astrid.service.TaskMover
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.createDueDate import org.tasks.data.createDueDate
import org.tasks.data.createHideUntil import org.tasks.data.createHideUntil
@ -31,7 +31,7 @@ open class TaskAdapter(
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDao,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val taskMover: TaskMover, private val taskMover: TaskMover,
) { ) {
private val selected = HashSet<Long>() private val selected = HashSet<Long>()
@ -296,7 +296,7 @@ open class TaskAdapter(
taskDao.setOrder(task.id, task.task.order) taskDao.setOrder(task.id, task.task.order)
taskDao.setParent(newParentId, listOf(task.id)) taskDao.setParent(newParentId, listOf(task.id))
taskDao.touch(task.id) taskDao.touch(task.id)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
protected suspend fun moveGoogleTask(from: Int, to: Int, indent: Int) { protected suspend fun moveGoogleTask(from: Int, to: Int, indent: Int) {
@ -375,7 +375,7 @@ open class TaskAdapter(
} }
} }
taskDao.touch(task.id) taskDao.touch(task.id)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
googleTaskDao.validateSorting(task.caldav!!) googleTaskDao.validateSorting(task.caldav!!)
} }
@ -407,7 +407,7 @@ open class TaskAdapter(
newPosition = newPosition, newPosition = newPosition,
) )
taskDao.touch(task.id) taskDao.touch(task.id)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private suspend fun changeCaldavParent(task: TaskContainer, indent: Int, to: Int): Long { private suspend fun changeCaldavParent(task: TaskContainer, indent: Int, to: Int): Long {

@ -5,7 +5,7 @@
*/ */
package com.todoroo.astrid.alarms package com.todoroo.astrid.alarms
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.TaskDao import org.tasks.data.dao.TaskDao
import org.tasks.data.db.DbUtils import org.tasks.data.db.DbUtils
@ -28,7 +28,7 @@ import javax.inject.Inject
class AlarmService @Inject constructor( class AlarmService @Inject constructor(
private val alarmDao: AlarmDao, private val alarmDao: AlarmDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val notificationManager: NotificationManager, private val notificationManager: NotificationManager,
private val workManager: WorkManager, private val workManager: WorkManager,
private val alarmCalculator: AlarmCalculator, private val alarmCalculator: AlarmCalculator,
@ -54,7 +54,7 @@ class AlarmService @Inject constructor(
changed = true changed = true
} }
if (changed) { if (changed) {
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
return changed return changed
} }

@ -6,7 +6,7 @@
package com.todoroo.astrid.dao package com.todoroo.astrid.dao
import com.todoroo.astrid.timers.TimerPlugin import com.todoroo.astrid.timers.TimerPlugin
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.count import org.tasks.data.count
import org.tasks.data.dao.TaskDao import org.tasks.data.dao.TaskDao
@ -28,7 +28,7 @@ import javax.inject.Inject
class TaskDao @Inject constructor( class TaskDao @Inject constructor(
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val notificationManager: NotificationManager, private val notificationManager: NotificationManager,
private val geofenceApi: GeofenceApi, private val geofenceApi: GeofenceApi,
private val timerPlugin: TimerPlugin, private val timerPlugin: TimerPlugin,
@ -82,7 +82,7 @@ class TaskDao @Inject constructor(
suspend fun setCollapsed(id: Long, collapsed: Boolean) { suspend fun setCollapsed(id: Long, collapsed: Boolean) {
taskDao.setCollapsed(listOf(id), collapsed) taskDao.setCollapsed(listOf(id), collapsed)
syncAdapters.sync() syncAdapters.sync()
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
suspend fun setCollapsed(preferences: Preferences, filter: Filter, collapsed: Boolean) { suspend fun setCollapsed(preferences: Preferences, filter: Filter, collapsed: Boolean) {
@ -103,7 +103,7 @@ class TaskDao @Inject constructor(
Timber.d("Saved $task") Timber.d("Saved $task")
afterUpdate(task, original) afterUpdate(task, original)
if (!task.isSuppressRefresh()) { if (!task.isSuppressRefresh()) {
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
workManager.triggerNotifications() workManager.triggerNotifications()
workManager.scheduleRefresh() workManager.scheduleRefresh()

@ -7,7 +7,7 @@ package com.todoroo.astrid.gtasks
import com.google.api.services.tasks.model.TaskList import com.google.api.services.tasks.model.TaskList
import com.todoroo.astrid.service.TaskDeleter import com.todoroo.astrid.service.TaskDeleter
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
@ -16,7 +16,7 @@ import javax.inject.Inject
class GtasksListService @Inject constructor( class GtasksListService @Inject constructor(
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val taskDeleter: TaskDeleter, private val taskDeleter: TaskDeleter,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
) { ) {
/** /**
@ -55,6 +55,6 @@ class GtasksListService @Inject constructor(
for (listId in previousLists) { for (listId in previousLists) {
taskDeleter.delete(caldavDao.getCalendarById(listId)!!) taskDeleter.delete(caldavDao.getCalendarById(listId)!!)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
} }

@ -7,7 +7,7 @@ import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.caldav.VtodoCache import org.tasks.caldav.VtodoCache
import org.tasks.data.dao.DeletionDao import org.tasks.data.dao.DeletionDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
@ -28,7 +28,7 @@ class TaskDeleter @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val deletionDao: DeletionDao, private val deletionDao: DeletionDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val syncAdapters: SyncAdapters, private val syncAdapters: SyncAdapters,
private val vtodoCache: VtodoCache, private val vtodoCache: VtodoCache,
private val notificationManager: NotificationManager, private val notificationManager: NotificationManager,
@ -50,7 +50,7 @@ class TaskDeleter @Inject constructor(
cleanup = { cleanup(it) } cleanup = { cleanup(it) }
) )
syncAdapters.sync() syncAdapters.sync()
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
taskDao.fetch(ids) taskDao.fetch(ids)
} }
@ -63,7 +63,7 @@ class TaskDeleter @Inject constructor(
ids = tasks, ids = tasks,
cleanup = { cleanup(it) } cleanup = { cleanup(it) }
) )
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
suspend fun delete(list: CaldavCalendar) { suspend fun delete(list: CaldavCalendar) {
@ -72,7 +72,7 @@ class TaskDeleter @Inject constructor(
caldavCalendar = list, caldavCalendar = list,
cleanup = { cleanup(it) } cleanup = { cleanup(it) }
) )
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
suspend fun delete(account: CaldavAccount) { suspend fun delete(account: CaldavAccount) {
@ -81,7 +81,7 @@ class TaskDeleter @Inject constructor(
caldavAccount = account, caldavAccount = account,
cleanup = { cleanup(it) } cleanup = { cleanup(it) }
) )
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private suspend fun cleanup(tasks: List<Long>) { private suspend fun cleanup(tasks: List<Long>) {

@ -2,7 +2,7 @@ package com.todoroo.astrid.service
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.gcal.GCalHelper import com.todoroo.astrid.gcal.GCalHelper
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
@ -24,7 +24,7 @@ import javax.inject.Inject
class TaskDuplicator @Inject constructor( class TaskDuplicator @Inject constructor(
private val gcalHelper: GCalHelper, private val gcalHelper: GCalHelper,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val tagDao: TagDao, private val tagDao: TagDao,
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDao,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDao,
@ -44,7 +44,7 @@ class TaskDuplicator @Inject constructor(
.let { taskDao.fetch(it) } .let { taskDao.fetch(it) }
.filterNot { it.readOnly } .filterNot { it.readOnly }
.map { clone(it, it.parent) } .map { clone(it, it.parent) }
.also { localBroadcastManager.broadcastRefresh() } .also { refreshBroadcaster.broadcastRefresh() }
} }
private suspend fun clone(task: Task, parentId: Long): Task { private suspend fun clone(task: Task, parentId: Long): Task {

@ -1,6 +1,6 @@
package com.todoroo.astrid.service package com.todoroo.astrid.service
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.caldav.VtodoCache import org.tasks.caldav.VtodoCache
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
@ -22,7 +22,7 @@ class TaskMover @Inject constructor(
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDao,
private val preferences: Preferences, private val preferences: Preferences,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val syncAdapters: SyncAdapters, private val syncAdapters: SyncAdapters,
private val vtodoCache: VtodoCache, private val vtodoCache: VtodoCache,
) { ) {
@ -63,7 +63,7 @@ class TaskMover @Inject constructor(
taskIds.dbchunk().forEach { taskIds.dbchunk().forEach {
taskDao.touch(it) taskDao.touch(it)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
syncAdapters.sync() syncAdapters.sync()
} }

@ -7,13 +7,14 @@ import android.content.IntentFilter
import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.todoroo.astrid.api.AstridApiConstants import com.todoroo.astrid.api.AstridApiConstants
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.widget.AppWidgetManager import org.tasks.widget.AppWidgetManager
import javax.inject.Inject import javax.inject.Inject
class LocalBroadcastManager @Inject constructor( class LocalBroadcastManager @Inject constructor(
@ApplicationContext context: Context, @ApplicationContext context: Context,
private val appWidgetManager: AppWidgetManager, private val appWidgetManager: AppWidgetManager,
) { ): RefreshBroadcaster {
private val localBroadcastManager = LocalBroadcastManager.getInstance(context) private val localBroadcastManager = LocalBroadcastManager.getInstance(context)
fun registerRefreshReceiver(broadcastReceiver: BroadcastReceiver?) { fun registerRefreshReceiver(broadcastReceiver: BroadcastReceiver?) {
@ -41,7 +42,7 @@ class LocalBroadcastManager @Inject constructor(
) )
} }
fun broadcastRefresh() { override fun broadcastRefresh() {
localBroadcastManager.sendBroadcast(Intent(REFRESH)) localBroadcastManager.sendBroadcast(Intent(REFRESH))
appWidgetManager.updateWidgets() appWidgetManager.updateWidgets()
} }

@ -28,7 +28,7 @@ import com.todoroo.astrid.api.TextInputCriterion
import com.todoroo.astrid.core.CriterionInstance import com.todoroo.astrid.core.CriterionInstance
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.Strings import org.tasks.Strings
import org.tasks.compose.DeleteButton import org.tasks.compose.DeleteButton
@ -56,7 +56,7 @@ import javax.inject.Inject
class FilterSettingsActivity : BaseListSettingsActivity() { class FilterSettingsActivity : BaseListSettingsActivity() {
@Inject lateinit var filterDao: FilterDao @Inject lateinit var filterDao: FilterDao
@Inject lateinit var filterCriteriaProvider: FilterCriteriaProvider @Inject lateinit var filterCriteriaProvider: FilterCriteriaProvider
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
private val viewModel: FilterSettingsViewModel by viewModels() private val viewModel: FilterSettingsViewModel by viewModels()
@ -128,7 +128,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
} else { } else {
filterDao.update(f) filterDao.update(f)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD) Intent(TaskListFragment.ACTION_RELOAD)

@ -15,7 +15,7 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT
@ -35,7 +35,7 @@ import javax.inject.Inject
class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var taskDeleter: TaskDeleter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
private val account: CaldavAccount private val account: CaldavAccount
get() = intent.getParcelableExtra(EXTRA_CALDAV_ACCOUNT)!! get() = intent.getParcelableExtra(EXTRA_CALDAV_ACCOUNT)!!
@ -122,7 +122,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
icon = baseViewModel.icon icon = baseViewModel.icon
) )
) )
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD) Intent(TaskListFragment.ACTION_RELOAD)

@ -27,7 +27,7 @@ import androidx.compose.ui.viewinterop.AndroidView
import com.todoroo.astrid.activity.MainActivity import com.todoroo.astrid.activity.MainActivity
import com.todoroo.astrid.activity.TaskListFragment import com.todoroo.astrid.activity.TaskListFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.compose.Constants import org.tasks.compose.Constants
@ -60,7 +60,7 @@ class PlaceSettingsActivity : BaseListSettingsActivity(),
@Inject lateinit var map: MapFragment @Inject lateinit var map: MapFragment
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
private lateinit var place: Place private lateinit var place: Place
override val defaultIcon = TasksIcons.PLACE override val defaultIcon = TasksIcons.PLACE
@ -172,7 +172,7 @@ class PlaceSettingsActivity : BaseListSettingsActivity(),
radius = sliderPos.floatValue.roundToInt(), radius = sliderPos.floatValue.roundToInt(),
) )
locationDao.update(place) locationDao.update(place)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD) Intent(TaskListFragment.ACTION_RELOAD)
@ -190,7 +190,7 @@ class PlaceSettingsActivity : BaseListSettingsActivity(),
locationDao.deleteGeofencesByPlace(place.uid!!) locationDao.deleteGeofencesByPlace(place.uid!!)
locationDao.delete(place) locationDao.delete(place)
setResult(Activity.RESULT_OK, Intent(TaskListFragment.ACTION_DELETED)) setResult(Activity.RESULT_OK, Intent(TaskListFragment.ACTION_DELETED))
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
finish() finish()
} }

@ -12,7 +12,7 @@ import androidx.activity.compose.setContent
import com.todoroo.astrid.activity.MainActivity import com.todoroo.astrid.activity.MainActivity
import com.todoroo.astrid.activity.TaskListFragment import com.todoroo.astrid.activity.TaskListFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDao
@ -28,7 +28,7 @@ import javax.inject.Inject
class TagSettingsActivity : BaseListSettingsActivity() { class TagSettingsActivity : BaseListSettingsActivity() {
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDao
@Inject lateinit var tagDao: TagDao @Inject lateinit var tagDao: TagDao
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
private lateinit var tagData: TagData private lateinit var tagData: TagData
private val isNewTag: Boolean private val isNewTag: Boolean
@ -88,7 +88,7 @@ class TagSettingsActivity : BaseListSettingsActivity() {
) )
.let { it.copy(id = tagDataDao.insert(it)) } .let { it.copy(id = tagDataDao.insert(it)) }
.let { .let {
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent().putExtra(MainActivity.OPEN_FILTER, TagFilter(it)) Intent().putExtra(MainActivity.OPEN_FILTER, TagFilter(it))
@ -104,7 +104,7 @@ class TagSettingsActivity : BaseListSettingsActivity() {
.let { .let {
tagDataDao.update(it) tagDataDao.update(it)
tagDao.rename(it.remoteId!!, newName) tagDao.rename(it.remoteId!!, newName)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
Intent(TaskListFragment.ACTION_RELOAD) Intent(TaskListFragment.ACTION_RELOAD)

@ -19,7 +19,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.caldav.VtodoCache import org.tasks.caldav.VtodoCache
import org.tasks.data.GoogleTaskAccount import org.tasks.data.GoogleTaskAccount
@ -65,7 +65,7 @@ class TasksJsonImporter @Inject constructor(
private val userActivityDao: UserActivityDao, private val userActivityDao: UserActivityDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val locationDao: LocationDao, private val locationDao: LocationDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val alarmDao: AlarmDao, private val alarmDao: AlarmDao,
private val tagDao: TagDao, private val tagDao: TagDao,
private val filterDao: FilterDao, private val filterDao: FilterDao,
@ -110,7 +110,7 @@ class TasksJsonImporter @Inject constructor(
} catch (e: IOException) { } catch (e: IOException) {
Timber.e(e) Timber.e(e)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
result result
} }

@ -32,7 +32,7 @@ import okhttp3.HttpUrl
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
@ -84,7 +84,7 @@ class CaldavSynchronizer @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val taskDeleter: TaskDeleter, private val taskDeleter: TaskDeleter,
private val inventory: Inventory, private val inventory: Inventory,
private val firebase: Firebase, private val firebase: Firebase,
@ -188,7 +188,7 @@ class CaldavSynchronizer @Inject constructor(
icon = icon ?: calendar.icon, icon = icon ?: calendar.icon,
) )
caldavDao.update(calendar) caldavDao.update(calendar)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
resource resource
.principals(account, calendar) .principals(account, calendar)
@ -220,7 +220,7 @@ class CaldavSynchronizer @Inject constructor(
} }
account.error = message account.error = message
caldavDao.update(account) caldavDao.update(account)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
if (!isNullOrEmpty(message)) { if (!isNullOrEmpty(message)) {
Timber.e(message) Timber.e(message)
} }
@ -297,7 +297,7 @@ class CaldavSynchronizer @Inject constructor(
caldavDao.update(caldavCalendar) caldavDao.update(caldavCalendar)
Timber.d("Updating parents for ${caldavCalendar.uuid}") Timber.d("Updating parents for ${caldavCalendar.uuid}")
caldavDao.updateParents(caldavCalendar.uuid!!) caldavDao.updateParents(caldavCalendar.uuid!!)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private suspend fun pushLocalChanges( private suspend fun pushLocalChanges(

@ -14,7 +14,7 @@ import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import net.fortuna.ical4j.model.property.ProdId import net.fortuna.ical4j.model.property.ProdId
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
@ -32,7 +32,7 @@ import javax.inject.Inject
class EtebaseSynchronizer @Inject constructor( class EtebaseSynchronizer @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val taskDeleter: TaskDeleter, private val taskDeleter: TaskDeleter,
private val inventory: Inventory, private val inventory: Inventory,
private val clientProvider: EtebaseClientProvider, private val clientProvider: EtebaseClientProvider,
@ -98,7 +98,7 @@ class EtebaseSynchronizer @Inject constructor(
calendar.name = meta.name calendar.name = meta.name
calendar.color = color calendar.color = color
caldavDao.update(calendar) caldavDao.update(calendar)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
fetchChanges(account, client, calendar, collection) fetchChanges(account, client, calendar, collection)
pushLocalChanges(account, client, calendar, collection) pushLocalChanges(account, client, calendar, collection)
@ -112,7 +112,7 @@ class EtebaseSynchronizer @Inject constructor(
private suspend fun setError(account: CaldavAccount, message: String?) { private suspend fun setError(account: CaldavAccount, message: String?) {
account.error = message account.error = message
caldavDao.update(account) caldavDao.update(account)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
if (!isNullOrEmpty(message)) { if (!isNullOrEmpty(message)) {
Timber.e(message) Timber.e(message)
} }
@ -137,7 +137,7 @@ class EtebaseSynchronizer @Inject constructor(
caldavDao.update(caldavCalendar) caldavDao.update(caldavCalendar)
Timber.d("Updating parents for ${caldavCalendar.uuid}") Timber.d("Updating parents for ${caldavCalendar.uuid}")
caldavDao.updateParents(caldavCalendar.uuid!!) caldavDao.updateParents(caldavCalendar.uuid!!)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private suspend fun pushLocalChanges( private suspend fun pushLocalChanges(

@ -16,7 +16,7 @@ import com.todoroo.astrid.service.TaskCreator.Companion.getDefaultAlarms
import com.todoroo.astrid.service.TaskDeleter import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
@ -56,7 +56,7 @@ class GoogleTaskSynchronizer @Inject constructor(
private val defaultFilterProvider: DefaultFilterProvider, private val defaultFilterProvider: DefaultFilterProvider,
private val permissionChecker: PermissionChecker, private val permissionChecker: PermissionChecker,
private val googleAccountManager: GoogleAccountManager, private val googleAccountManager: GoogleAccountManager,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val taskDeleter: TaskDeleter, private val taskDeleter: TaskDeleter,
private val invokers: InvokerFactory, private val invokers: InvokerFactory,
private val alarmDao: AlarmDao, private val alarmDao: AlarmDao,
@ -94,7 +94,7 @@ class GoogleTaskSynchronizer @Inject constructor(
firebase.reportException(e) firebase.reportException(e)
} finally { } finally {
caldavDao.update(account) caldavDao.update(account)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
Timber.d("%s: end sync", account) Timber.d("%s: end sync", account)
} }
} }

@ -11,6 +11,7 @@ import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
import org.tasks.LocalBroadcastManager
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.billing.BillingClient import org.tasks.billing.BillingClient
import org.tasks.billing.BillingClientImpl import org.tasks.billing.BillingClientImpl
@ -44,6 +45,8 @@ import org.tasks.security.KeyStoreEncryption
import java.util.Locale import java.util.Locale
import javax.inject.Singleton import javax.inject.Singleton
import org.tasks.broadcast.RefreshBroadcaster
@Module @Module
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
class ApplicationModule { class ApplicationModule {
@ -185,4 +188,8 @@ class ApplicationModule {
@Provides @Provides
@Singleton @Singleton
fun providesKeyStoreEncryption(): KeyStoreEncryption = AndroidKeyStoreEncryption() fun providesKeyStoreEncryption(): KeyStoreEncryption = AndroidKeyStoreEncryption()
@Provides
fun providesBroadcastRefresh(localBroadcastManager: LocalBroadcastManager): RefreshBroadcaster =
localBroadcastManager
} }

@ -5,7 +5,7 @@ import androidx.hilt.work.HiltWorker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.data.dao.TaskDao import org.tasks.data.dao.TaskDao
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
@ -16,13 +16,13 @@ class RefreshWork @AssistedInject constructor(
@Assisted context: Context, @Assisted context: Context,
@Assisted workerParams: WorkerParameters, @Assisted workerParams: WorkerParameters,
firebase: Firebase, firebase: Firebase,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val workManager: WorkManager, private val workManager: WorkManager,
private val taskDao: TaskDao, private val taskDao: TaskDao,
) : RepeatingWorker(context, workerParams, firebase) { ) : RepeatingWorker(context, workerParams, firebase) {
override suspend fun run(): Result { override suspend fun run(): Result {
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
return Result.success() return Result.success()
} }

@ -6,7 +6,7 @@ import androidx.hilt.work.HiltWorker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.entity.Place import org.tasks.data.entity.Place
@ -20,7 +20,7 @@ class ReverseGeocodeWork @AssistedInject constructor(
@Assisted context: Context, @Assisted context: Context,
@Assisted workerParams: WorkerParameters, @Assisted workerParams: WorkerParameters,
firebase: Firebase, firebase: Firebase,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val geocoder: Geocoder, private val geocoder: Geocoder,
private val locationDao: LocationDao private val locationDao: LocationDao
) : BaseWorker(context, workerParams, firebase) { ) : BaseWorker(context, workerParams, firebase) {
@ -51,7 +51,7 @@ class ReverseGeocodeWork @AssistedInject constructor(
url = result.url, url = result.url,
) )
) )
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
Timber.d("found $result") Timber.d("found $result")
Result.success() Result.success()
} catch (e: Exception) { } catch (e: Exception) {

@ -17,7 +17,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
@ -44,7 +44,7 @@ class SyncWork @AssistedInject constructor(
@Assisted context: Context, @Assisted context: Context,
@Assisted workerParams: WorkerParameters, @Assisted workerParams: WorkerParameters,
firebase: Firebase, firebase: Firebase,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val preferences: Preferences, private val preferences: Preferences,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val caldavSynchronizer: Lazy<CaldavSynchronizer>, private val caldavSynchronizer: Lazy<CaldavSynchronizer>,
@ -74,7 +74,7 @@ class SyncWork @AssistedInject constructor(
} }
preferences.setBoolean(syncStatus, true) preferences.setBoolean(syncStatus, true)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
try { try {
doSync() doSync()
preferences.lastSync = currentTimeMillis() preferences.lastSync = currentTimeMillis()
@ -82,7 +82,7 @@ class SyncWork @AssistedInject constructor(
firebase.reportException(e) firebase.reportException(e)
} finally { } finally {
preferences.setBoolean(syncStatus, false) preferences.setBoolean(syncStatus, false)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
return Result.success() return Result.success()
} }

@ -13,7 +13,7 @@ import com.todoroo.astrid.utility.Constants
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.NotificationDao import org.tasks.data.dao.NotificationDao
@ -45,7 +45,7 @@ class NotificationManager @Inject constructor(
private val notificationDao: NotificationDao, private val notificationDao: NotificationDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val locationDao: LocationDao, private val locationDao: LocationDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val notificationManager: ThrottledNotificationManager, private val notificationManager: ThrottledNotificationManager,
private val markdownProvider: MarkdownProvider, private val markdownProvider: MarkdownProvider,
private val permissionChecker: PermissionChecker, private val permissionChecker: PermissionChecker,
@ -176,7 +176,7 @@ class NotificationManager @Inject constructor(
useGroupKey = false, useGroupKey = false,
) )
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")

@ -7,7 +7,7 @@ import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.dmfs.tasks.contract.TaskContract import org.dmfs.tasks.contract.TaskContract
import org.dmfs.tasks.contract.TaskContract.Tasks import org.dmfs.tasks.contract.TaskContract.Tasks
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Constants import org.tasks.analytics.Constants
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
@ -36,7 +36,7 @@ class OpenTasksSynchronizer @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val taskDeleter: TaskDeleter, private val taskDeleter: TaskDeleter,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val firebase: Firebase, private val firebase: Firebase,
private val iCalendar: iCalendar, private val iCalendar: iCalendar,
@ -111,7 +111,7 @@ class OpenTasksSynchronizer @Inject constructor(
if (local.id == NO_ID) { if (local.id == NO_ID) {
caldavDao.insert(local) caldavDao.insert(local)
Timber.d("Created calendar: $local") Timber.d("Created calendar: $local")
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} else if ( } else if (
local.name != remote.name || local.name != remote.name ||
local.color != remote.color || local.color != remote.color ||
@ -122,7 +122,7 @@ class OpenTasksSynchronizer @Inject constructor(
local.access = remote.access local.access = remote.access
caldavDao.update(local) caldavDao.update(local)
Timber.d("Updated calendar: $local") Timber.d("Updated calendar: $local")
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
return local return local
} }
@ -184,7 +184,7 @@ class OpenTasksSynchronizer @Inject constructor(
caldavDao.update(calendar) caldavDao.update(calendar)
Timber.d("Updating parents for ${calendar.uuid}") Timber.d("Updating parents for ${calendar.uuid}")
caldavDao.updateParents(calendar.uuid!!) caldavDao.updateParents(calendar.uuid!!)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private suspend fun removeDeleted(calendar: String, uids: List<String>) { private suspend fun removeDeleted(calendar: String, uids: List<String>) {
@ -202,7 +202,7 @@ class OpenTasksSynchronizer @Inject constructor(
private suspend fun setError(account: CaldavAccount, message: String?) { private suspend fun setError(account: CaldavAccount, message: String?) {
account.error = message account.error = message
caldavDao.update(account) caldavDao.update(account)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
if (!message.isNullOrBlank()) { if (!message.isNullOrBlank()) {
Timber.e(message) Timber.e(message)
} }

@ -4,8 +4,8 @@ import android.os.Bundle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.compose.FilterSelectionActivity.Companion.launch import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForFilterPickerResult import org.tasks.compose.FilterSelectionActivity.Companion.registerForFilterPickerResult
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
@ -16,14 +16,14 @@ import javax.inject.Inject
class DashClock : InjectingPreferenceFragment() { class DashClock : InjectingPreferenceFragment() {
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
private val listPickerLauncher = registerForFilterPickerResult { private val listPickerLauncher = registerForFilterPickerResult {
defaultFilterProvider.dashclockFilter = it defaultFilterProvider.dashclockFilter = it
lifecycleScope.launch { lifecycleScope.launch {
refreshPreferences() refreshPreferences()
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
override fun getPreferenceXml() = R.xml.preferences_dashclock override fun getPreferenceXml() = R.xml.preferences_dashclock

@ -18,10 +18,10 @@ import com.google.android.material.color.DynamicColors
import com.todoroo.andlib.utility.AndroidUtilities.atLeastTiramisu import com.todoroo.andlib.utility.AndroidUtilities.atLeastTiramisu
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.compose.FilterSelectionActivity.Companion.launch import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForFilterPickerResult import org.tasks.compose.FilterSelectionActivity.Companion.registerForFilterPickerResult
import org.tasks.dialogs.ColorPalettePicker import org.tasks.dialogs.ColorPalettePicker
@ -48,7 +48,7 @@ class LookAndFeel : InjectingPreferenceFragment() {
@Inject lateinit var themeBase: ThemeBase @Inject lateinit var themeBase: ThemeBase
@Inject lateinit var themeColor: ThemeColor @Inject lateinit var themeColor: ThemeColor
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var inventory: Inventory @Inject lateinit var inventory: Inventory
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
@ -56,7 +56,7 @@ class LookAndFeel : InjectingPreferenceFragment() {
private val listPickerLauncher = registerForFilterPickerResult { private val listPickerLauncher = registerForFilterPickerResult {
defaultFilterProvider.setDefaultOpenFilter(it) defaultFilterProvider.setDefaultOpenFilter(it)
findPreference(R.string.p_default_open_filter).summary = it.title findPreference(R.string.p_default_open_filter).summary = it.title
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
override fun getPreferenceXml() = R.xml.preferences_look_and_feel override fun getPreferenceXml() = R.xml.preferences_look_and_feel

@ -17,8 +17,8 @@ import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.voice.VoiceOutputAssistant import com.todoroo.astrid.voice.VoiceOutputAssistant
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.compose.FilterSelectionActivity.Companion.launch import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForFilterPickerResult import org.tasks.compose.FilterSelectionActivity.Companion.registerForFilterPickerResult
import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker import org.tasks.dialogs.MyTimePickerDialog.Companion.newTimePicker
@ -39,13 +39,13 @@ class Notifications : InjectingPreferenceFragment() {
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
@Inject lateinit var voiceOutputAssistant: VoiceOutputAssistant @Inject lateinit var voiceOutputAssistant: VoiceOutputAssistant
private val listPickerLauncher = registerForFilterPickerResult { private val listPickerLauncher = registerForFilterPickerResult {
defaultFilterProvider.setBadgeFilter(it) defaultFilterProvider.setBadgeFilter(it)
findPreference(R.string.p_badge_list).summary = it.title findPreference(R.string.p_badge_list).summary = it.title
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
override fun getPreferenceXml() = R.xml.preferences_notifications override fun getPreferenceXml() = R.xml.preferences_notifications

@ -5,7 +5,7 @@ import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
@ -34,7 +34,7 @@ class SyncAdapters @Inject constructor(
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDao,
private val openTaskDao: OpenTaskDao, private val openTaskDao: OpenTaskDao,
private val preferences: Preferences, private val preferences: Preferences,
private val localBroadcastManager: LocalBroadcastManager private val refreshBroadcaster: RefreshBroadcaster
) { ) {
private val scope = CoroutineScope(newSingleThreadExecutor().asCoroutineDispatcher() + SupervisorJob()) private val scope = CoroutineScope(newSingleThreadExecutor().asCoroutineDispatcher() + SupervisorJob())
private val sync = Debouncer(TAG_SYNC) { workManager.sync(it) } private val sync = Debouncer(TAG_SYNC) { workManager.sync(it) }
@ -42,7 +42,7 @@ class SyncAdapters @Inject constructor(
val currentState = preferences.getBoolean(R.string.p_sync_ongoing_android, false) val currentState = preferences.getBoolean(R.string.p_sync_ongoing_android, false)
if (currentState != newState && isOpenTaskSyncEnabled()) { if (currentState != newState && isOpenTaskSyncEnabled()) {
preferences.setBoolean(R.string.p_sync_ongoing_android, newState) preferences.setBoolean(R.string.p_sync_ongoing_android, newState)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
} }

@ -11,7 +11,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import io.ktor.client.call.body import io.ktor.client.call.body
import io.ktor.http.isSuccess import io.ktor.http.isSuccess
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.caldav.VtodoCache import org.tasks.caldav.VtodoCache
@ -52,7 +52,7 @@ class MicrosoftSynchronizer @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
private val taskDeleter: TaskDeleter, private val taskDeleter: TaskDeleter,
private val firebase: Firebase, private val firebase: Firebase,
private val taskCreator: TaskCreator, private val taskCreator: TaskCreator,
@ -130,7 +130,7 @@ class MicrosoftSynchronizer @Inject constructor(
} else if (local.name != remoteName || local.access != access) { } else if (local.name != remoteName || local.access != access) {
remote.applyTo(local) remote.applyTo(local)
caldavDao.update(local) caldavDao.update(local)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
if (local.ctag?.isNotBlank() == true) { if (local.ctag?.isNotBlank() == true) {
deltaSync(account, local, remote, microsoft) deltaSync(account, local, remote, microsoft)
@ -275,7 +275,7 @@ class MicrosoftSynchronizer @Inject constructor(
} }
Timber.d("UPDATE $list") Timber.d("UPDATE $list")
caldavDao.update(list) caldavDao.update(list)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private suspend fun getTaskLists( private suspend fun getTaskLists(
@ -368,7 +368,7 @@ class MicrosoftSynchronizer @Inject constructor(
} }
Timber.d("UPDATE $list") Timber.d("UPDATE $list")
caldavDao.update(list) caldavDao.update(list)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private suspend fun updateTask(list: CaldavCalendar, remote: Tasks.Task) { private suspend fun updateTask(list: CaldavCalendar, remote: Tasks.Task) {
@ -488,7 +488,7 @@ class MicrosoftSynchronizer @Inject constructor(
private suspend fun setError(account: CaldavAccount, message: String?) { private suspend fun setError(account: CaldavAccount, message: String?) {
account.error = message account.error = message
caldavDao.update(account) caldavDao.update(account)
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
if (!isNullOrEmpty(message)) { if (!isNullOrEmpty(message)) {
Timber.e(message) Timber.e(message)
} }

@ -6,7 +6,7 @@ import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.compose.throttleLatest import org.tasks.compose.throttleLatest
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
@ -23,7 +23,7 @@ import javax.inject.Singleton
class ChipListCache @Inject internal constructor( class ChipListCache @Inject internal constructor(
caldavDao: CaldavDao, caldavDao: CaldavDao,
tagDataDao: TagDataDao, tagDataDao: TagDataDao,
private val localBroadcastManager: LocalBroadcastManager, private val refreshBroadcaster: RefreshBroadcaster,
) { ) {
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
private val lists: MutableMap<String?, CaldavFilter> = HashMap() private val lists: MutableMap<String?, CaldavFilter> = HashMap()
@ -42,7 +42,7 @@ class ChipListCache @Inject internal constructor(
lists.clear() lists.clear()
it.associateByTo(lists) { filter -> filter.uuid } it.associateByTo(lists) { filter -> filter.uuid }
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
private fun updateTags(updated: List<TagData>) { private fun updateTags(updated: List<TagData>) {
@ -51,7 +51,7 @@ class ChipListCache @Inject internal constructor(
for (update in updated) { for (update in updated) {
tagDatas[update.remoteId] = TagFilter(update) tagDatas[update.remoteId] = TagFilter(update)
} }
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
} }
fun getCaldavList(caldav: String?): CaldavFilter? = lists[caldav] fun getCaldavList(caldav: String?): CaldavFilter? = lists[caldav]

@ -9,7 +9,7 @@ import com.todoroo.astrid.service.TaskCompleter
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
@ -25,7 +25,7 @@ import javax.inject.Inject
class WidgetClickActivity : AppCompatActivity(), OnDismissHandler { class WidgetClickActivity : AppCompatActivity(), OnDismissHandler {
@Inject lateinit var taskCompleter: TaskCompleter @Inject lateinit var taskCompleter: TaskCompleter
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDao
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var refreshBroadcaster: RefreshBroadcaster
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var firebase: Firebase @Inject lateinit var firebase: Firebase
@ -101,7 +101,7 @@ class WidgetClickActivity : AppCompatActivity(), OnDismissHandler {
collapsed.remove(group) collapsed.remove(group)
} }
widgetPreferences.collapsed = collapsed widgetPreferences.collapsed = collapsed
localBroadcastManager.broadcastRefresh() refreshBroadcaster.broadcastRefresh()
finish() finish()
} }
else -> { else -> {

@ -0,0 +1,5 @@
package org.tasks.broadcast
fun interface RefreshBroadcaster {
fun broadcastRefresh()
}
Loading…
Cancel
Save