From 68700a7319b759539b1e8950996ece463a488958 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 16 Mar 2022 10:30:43 -0500 Subject: [PATCH] Add TaskEditEventBus --- .../astrid/activity/TaskEditFragment.kt | 21 +++++++++++++++++++ .../astrid/activity/TaskListFragment.kt | 17 +++++++-------- .../tasks/injection/ActivityRetainedModule.kt | 5 +++++ .../main/java/org/tasks/ui/TaskEditEvent.kt | 9 ++++++++ 4 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/org/tasks/ui/TaskEditEvent.kt diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt index 230a0584a..1b7a30e29 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt @@ -36,6 +36,8 @@ import com.todoroo.astrid.timers.TimerPlugin import com.todoroo.astrid.ui.StartDateControlSet import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.tasks.R @@ -57,6 +59,8 @@ import org.tasks.notifications.NotificationManager import org.tasks.preferences.Preferences import org.tasks.ui.SubtaskControlSet import org.tasks.ui.TaskEditControlFragment +import org.tasks.ui.TaskEditEvent +import org.tasks.ui.TaskEditEventBus import org.tasks.ui.TaskEditViewModel import javax.inject.Inject import kotlin.math.abs @@ -75,6 +79,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener { @Inject lateinit var timerPlugin: TimerPlugin @Inject lateinit var linkify: Linkify @Inject lateinit var markdownProvider: MarkdownProvider + @Inject lateinit var taskEditEventBus: TaskEditEventBus private val linkifyEnabled: Boolean get() = preferences.getBoolean(R.string.p_linkify_task_edit, false) @@ -210,9 +215,25 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener { for (i in visibleSize - 1 downTo 1) { binding.controlSets.addView(inflater.inflate(R.layout.task_edit_row_divider, binding.controlSets, false), i) } + return view } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + taskEditEventBus + .onEach(this::process) + .launchIn(viewLifecycleOwner.lifecycleScope) + } + + private suspend fun process(event: TaskEditEvent) { + when (event) { + is TaskEditEvent.Discard -> + if (event.id == editViewModel.task.id) { + editViewModel.discard() + } + } + } + override fun onResume() { super.onResume() diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index ff30c2cb5..25d85aa7b 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -110,8 +110,10 @@ import org.tasks.tasklist.TaskViewHolder import org.tasks.tasklist.ViewHolderFactory import org.tasks.themes.ColorProvider import org.tasks.themes.ThemeColor -import org.tasks.ui.TaskListEventBus +import org.tasks.ui.TaskEditEvent +import org.tasks.ui.TaskEditEventBus import org.tasks.ui.TaskListEvent +import org.tasks.ui.TaskListEventBus import org.tasks.ui.TaskListViewModel import java.time.format.FormatStyle import javax.inject.Inject @@ -147,7 +149,8 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL @Inject lateinit var locale: Locale @Inject lateinit var firebase: Firebase @Inject lateinit var repeatTaskHelper: RepeatTaskHelper - @Inject lateinit var eventBus: TaskListEventBus + @Inject lateinit var taskListEventBus: TaskListEventBus + @Inject lateinit var taskEditEventBus: TaskEditEventBus private lateinit var swipeRefreshLayout: SwipeRefreshLayout private lateinit var emptyRefreshLayout: SwipeRefreshLayout @@ -282,7 +285,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { - eventBus.collect(this@TaskListFragment::process) + taskListEventBus.collect(this@TaskListFragment::process) } } @@ -569,18 +572,14 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL loadTaskListContent() } - fun onTaskCreated(uuid: String) { + private fun onTaskCreated(uuid: String) { lifecycleScope.launch { taskAdapter.onTaskCreated(uuid) } } private suspend fun onTaskDelete(task: Task) { - (activity as MainActivity?)?.taskEditFragment?.let { - if (task.id == it.editViewModel.task?.id) { - it.editViewModel.discard() - } - } + taskEditEventBus.emit(TaskEditEvent.Discard(task.id)) timerPlugin.stopTimer(task) taskAdapter.onTaskDeleted(task) loadTaskListContent() diff --git a/app/src/main/java/org/tasks/injection/ActivityRetainedModule.kt b/app/src/main/java/org/tasks/injection/ActivityRetainedModule.kt index 9a3dd81da..c9850d3f0 100644 --- a/app/src/main/java/org/tasks/injection/ActivityRetainedModule.kt +++ b/app/src/main/java/org/tasks/injection/ActivityRetainedModule.kt @@ -8,6 +8,7 @@ import dagger.hilt.android.scopes.ActivityRetainedScoped import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import org.tasks.ui.MainActivityEventBus +import org.tasks.ui.TaskEditEventBus import org.tasks.ui.TaskListEventBus @Module @@ -21,6 +22,10 @@ class ActivityRetainedModule { @ActivityRetainedScoped fun getMainActivityBus(): MainActivityEventBus = makeFlow() + @Provides + @ActivityRetainedScoped + fun getTaskEditBus(): TaskEditEventBus = makeFlow() + private fun makeFlow() = MutableSharedFlow( extraBufferCapacity = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST diff --git a/app/src/main/java/org/tasks/ui/TaskEditEvent.kt b/app/src/main/java/org/tasks/ui/TaskEditEvent.kt new file mode 100644 index 000000000..8d404096c --- /dev/null +++ b/app/src/main/java/org/tasks/ui/TaskEditEvent.kt @@ -0,0 +1,9 @@ +package org.tasks.ui + +import kotlinx.coroutines.flow.MutableSharedFlow + +typealias TaskEditEventBus = MutableSharedFlow + +sealed interface TaskEditEvent { + data class Discard(val id: Long) : TaskEditEvent +} \ No newline at end of file