Move sync state to viewmodel

pull/2561/head
Alex Baker 2 years ago
parent 7e9ec26f53
commit 77c86bbfb4

@ -44,7 +44,6 @@ import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.bottomappbar.BottomAppBar import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.composethemeadapter.MdcTheme import com.google.android.material.composethemeadapter.MdcTheme
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.adapter.TaskAdapter import com.todoroo.astrid.adapter.TaskAdapter
import com.todoroo.astrid.adapter.TaskAdapterProvider import com.todoroo.astrid.adapter.TaskAdapterProvider
@ -104,7 +103,6 @@ import org.tasks.extensions.formatNumber
import org.tasks.extensions.setOnQueryTextListener import org.tasks.extensions.setOnQueryTextListener
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.intents.TaskIntents import org.tasks.intents.TaskIntents
import org.tasks.notifications.NotificationManager
import org.tasks.preferences.Device import org.tasks.preferences.Device
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.sync.SyncAdapters import org.tasks.sync.SyncAdapters
@ -128,7 +126,6 @@ import kotlin.math.max
class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickListener, class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickListener,
MenuItem.OnActionExpandListener, SearchView.OnQueryTextListener, ActionMode.Callback, MenuItem.OnActionExpandListener, SearchView.OnQueryTextListener, ActionMode.Callback,
TaskViewHolder.ViewHolderCallbacks { TaskViewHolder.ViewHolderCallbacks {
private val refreshReceiver = RefreshReceiver()
private val repeatConfirmationReceiver = RepeatConfirmationReceiver() private val repeatConfirmationReceiver = RepeatConfirmationReceiver()
@Inject lateinit var syncAdapters: SyncAdapters @Inject lateinit var syncAdapters: SyncAdapters
@ -148,7 +145,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var defaultThemeColor: ThemeColor @Inject lateinit var defaultThemeColor: ThemeColor
@Inject lateinit var colorProvider: ColorProvider @Inject lateinit var colorProvider: ColorProvider
@Inject lateinit var notificationManager: NotificationManager
@Inject lateinit var shortcutManager: ShortcutManager @Inject lateinit var shortcutManager: ShortcutManager
@Inject lateinit var taskCompleter: TaskCompleter @Inject lateinit var taskCompleter: TaskCompleter
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
@ -157,11 +153,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
@Inject lateinit var taskListEventBus: TaskListEventBus @Inject lateinit var taskListEventBus: TaskListEventBus
@Inject lateinit var taskEditEventBus: TaskEditEventBus @Inject lateinit var taskEditEventBus: TaskEditEventBus
private lateinit var swipeRefreshLayout: SwipeRefreshLayout
private lateinit var emptyRefreshLayout: SwipeRefreshLayout
private lateinit var coordinatorLayout: CoordinatorLayout
private lateinit var recyclerView: RecyclerView
private val listViewModel: TaskListViewModel by viewModels() private val listViewModel: TaskListViewModel by viewModels()
private lateinit var taskAdapter: TaskAdapter private lateinit var taskAdapter: TaskAdapter
private var recyclerAdapter: DragAndDropRecyclerAdapter? = null private var recyclerAdapter: DragAndDropRecyclerAdapter? = null
@ -190,17 +181,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
override fun onRefresh() { override fun onRefresh() {
syncAdapters.sync(true) syncAdapters.sync(true)
lifecycleScope.launch {
delay(1000)
refresh()
}
}
private fun setSyncOngoing() {
AndroidUtilities.assertMainThread()
val ongoing = preferences.isSyncOngoing
swipeRefreshLayout.isRefreshing = ongoing
emptyRefreshLayout.isRefreshing = ongoing
} }
override fun onViewStateRestored(savedInstanceState: Bundle?) { override fun onViewStateRestored(savedInstanceState: Bundle?) {
@ -246,10 +226,12 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
binding = FragmentTaskListBinding.inflate(inflater, container, false) binding = FragmentTaskListBinding.inflate(inflater, container, false)
filter = getFilter() filter = getFilter()
val swipeRefreshLayout: SwipeRefreshLayout
val emptyRefreshLayout: SwipeRefreshLayout
val recyclerView: RecyclerView
with (binding) { with (binding) {
swipeRefreshLayout = bodyStandard.swipeLayout swipeRefreshLayout = bodyStandard.swipeLayout
emptyRefreshLayout = bodyEmpty.swipeLayoutEmpty emptyRefreshLayout = bodyEmpty.swipeLayoutEmpty
coordinatorLayout = taskListCoordinator
recyclerView = bodyStandard.recyclerView recyclerView = bodyStandard.recyclerView
fab.setOnClickListener { createNewTask() } fab.setOnClickListener { createNewTask() }
fab.isVisible = filter.isWritable fab.isVisible = filter.isWritable
@ -277,6 +259,8 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
swipeRefreshLayout.visibility = View.VISIBLE swipeRefreshLayout.visibility = View.VISIBLE
emptyRefreshLayout.visibility = View.GONE emptyRefreshLayout.visibility = View.GONE
} }
swipeRefreshLayout.isRefreshing = it.syncOngoing
emptyRefreshLayout.isRefreshing = it.syncOngoing
} }
} }
} }
@ -336,7 +320,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
if (recyclerAdapter !is DragAndDropRecyclerAdapter) { if (recyclerAdapter !is DragAndDropRecyclerAdapter) {
setAdapter( setAdapter(
DragAndDropRecyclerAdapter( DragAndDropRecyclerAdapter(
taskAdapter, recyclerView, viewHolderFactory, this, tasks, preferences)) taskAdapter, binding.bodyStandard.recyclerView, viewHolderFactory, this, tasks, preferences))
} else { } else {
recyclerAdapter?.submitList(tasks) recyclerAdapter?.submitList(tasks)
} }
@ -344,7 +328,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
private fun setAdapter(adapter: DragAndDropRecyclerAdapter) { private fun setAdapter(adapter: DragAndDropRecyclerAdapter) {
recyclerAdapter = adapter recyclerAdapter = adapter
recyclerView.adapter = adapter binding.bodyStandard.recyclerView.adapter = adapter
taskAdapter.setDataSource(adapter) taskAdapter.setDataSource(adapter)
} }
@ -447,14 +431,12 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
item.isChecked = !item.isChecked item.isChecked = !item.isChecked
preferences.showHidden = item.isChecked preferences.showHidden = item.isChecked
loadTaskListContent() loadTaskListContent()
localBroadcastManager.broadcastRefresh()
true true
} }
R.id.menu_show_completed -> { R.id.menu_show_completed -> {
item.isChecked = !item.isChecked item.isChecked = !item.isChecked
preferences.showCompleted = item.isChecked preferences.showCompleted = item.isChecked
loadTaskListContent() loadTaskListContent()
localBroadcastManager.broadcastRefresh()
true true
} }
R.id.menu_clear_completed -> { R.id.menu_clear_completed -> {
@ -558,9 +540,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
localBroadcastManager.registerRefreshListReceiver(refreshReceiver)
localBroadcastManager.registerTaskCompletedReceiver(repeatConfirmationReceiver) localBroadcastManager.registerTaskCompletedReceiver(repeatConfirmationReceiver)
refresh()
} }
private fun makeSnackbar(@StringRes res: Int, vararg args: Any?): Snackbar? { private fun makeSnackbar(@StringRes res: Int, vararg args: Any?): Snackbar? {
@ -568,7 +548,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
} }
private fun makeSnackbar(text: String): Snackbar? = activity?.let { private fun makeSnackbar(text: String): Snackbar? = activity?.let {
Snackbar.make(coordinatorLayout, text, 4000) Snackbar.make(binding.taskListCoordinator, text, 4000)
.setAnchorView(R.id.fab) .setAnchorView(R.id.fab)
.setTextColor(it.getColor(R.color.snackbar_text_color)) .setTextColor(it.getColor(R.color.snackbar_text_color))
.setActionTextColor(it.getColor(R.color.snackbar_action_color)) .setActionTextColor(it.getColor(R.color.snackbar_action_color))
@ -580,11 +560,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
localBroadcastManager.unregisterReceiver(repeatConfirmationReceiver) localBroadcastManager.unregisterReceiver(repeatConfirmationReceiver)
localBroadcastManager.unregisterReceiver(refreshReceiver)
}
private fun refresh() {
setSyncOngoing()
} }
fun loadTaskListContent() { fun loadTaskListContent() {
@ -699,10 +674,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
return true return true
} }
fun broadcastRefresh() {
localBroadcastManager.broadcastRefresh()
}
override fun onCreateActionMode(actionMode: ActionMode, menu: Menu): Boolean { override fun onCreateActionMode(actionMode: ActionMode, menu: Menu): Boolean {
val inflater = actionMode.menuInflater val inflater = actionMode.menuInflater
inflater.inflate(R.menu.menu_multi_select, menu) inflater.inflate(R.menu.menu_multi_select, menu)
@ -950,12 +921,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
} }
} }
private inner class RefreshReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
refresh()
}
}
private inner class RepeatConfirmationReceiver : BroadcastReceiver() { private inner class RepeatConfirmationReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
lifecycleScope.launch { lifecycleScope.launch {

@ -50,6 +50,7 @@ class TaskListViewModel @Inject constructor(
val now: Long = DateUtilities.now(), val now: Long = DateUtilities.now(),
val tasks: List<TaskContainer> = emptyList(), val tasks: List<TaskContainer> = emptyList(),
val begForSubscription: Boolean = false, val begForSubscription: Boolean = false,
val syncOngoing: Boolean = false,
) )
private val _state = MutableStateFlow(State()) private val _state = MutableStateFlow(State())
@ -68,7 +69,12 @@ class TaskListViewModel @Inject constructor(
} }
fun invalidate() { fun invalidate() {
_state.update { it.copy(now = DateUtilities.now()) } _state.update {
it.copy(
now = DateUtilities.now(),
syncOngoing = preferences.isSyncOngoing,
)
}
} }
fun dismissBanner(clickedPurchase: Boolean) { fun dismissBanner(clickedPurchase: Boolean) {

Loading…
Cancel
Save