Add TaskEditEventBus

pull/1823/head
Alex Baker 4 years ago
parent b087cc090f
commit 68700a7319

@ -36,6 +36,8 @@ import com.todoroo.astrid.timers.TimerPlugin
import com.todoroo.astrid.ui.StartDateControlSet import com.todoroo.astrid.ui.StartDateControlSet
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.tasks.R import org.tasks.R
@ -57,6 +59,8 @@ import org.tasks.notifications.NotificationManager
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.ui.SubtaskControlSet import org.tasks.ui.SubtaskControlSet
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import org.tasks.ui.TaskEditEvent
import org.tasks.ui.TaskEditEventBus
import org.tasks.ui.TaskEditViewModel import org.tasks.ui.TaskEditViewModel
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.abs import kotlin.math.abs
@ -75,6 +79,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
@Inject lateinit var timerPlugin: TimerPlugin @Inject lateinit var timerPlugin: TimerPlugin
@Inject lateinit var linkify: Linkify @Inject lateinit var linkify: Linkify
@Inject lateinit var markdownProvider: MarkdownProvider @Inject lateinit var markdownProvider: MarkdownProvider
@Inject lateinit var taskEditEventBus: TaskEditEventBus
private val linkifyEnabled: Boolean private val linkifyEnabled: Boolean
get() = preferences.getBoolean(R.string.p_linkify_task_edit, false) 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) { for (i in visibleSize - 1 downTo 1) {
binding.controlSets.addView(inflater.inflate(R.layout.task_edit_row_divider, binding.controlSets, false), i) binding.controlSets.addView(inflater.inflate(R.layout.task_edit_row_divider, binding.controlSets, false), i)
} }
return view 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() { override fun onResume() {
super.onResume() super.onResume()

@ -110,8 +110,10 @@ import org.tasks.tasklist.TaskViewHolder
import org.tasks.tasklist.ViewHolderFactory import org.tasks.tasklist.ViewHolderFactory
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.themes.ThemeColor 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.TaskListEvent
import org.tasks.ui.TaskListEventBus
import org.tasks.ui.TaskListViewModel import org.tasks.ui.TaskListViewModel
import java.time.format.FormatStyle import java.time.format.FormatStyle
import javax.inject.Inject import javax.inject.Inject
@ -147,7 +149,8 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
@Inject lateinit var firebase: Firebase @Inject lateinit var firebase: Firebase
@Inject lateinit var repeatTaskHelper: RepeatTaskHelper @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 swipeRefreshLayout: SwipeRefreshLayout
private lateinit var emptyRefreshLayout: SwipeRefreshLayout private lateinit var emptyRefreshLayout: SwipeRefreshLayout
@ -282,7 +285,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
lifecycleScope.launch { lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { 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() loadTaskListContent()
} }
fun onTaskCreated(uuid: String) { private fun onTaskCreated(uuid: String) {
lifecycleScope.launch { lifecycleScope.launch {
taskAdapter.onTaskCreated(uuid) taskAdapter.onTaskCreated(uuid)
} }
} }
private suspend fun onTaskDelete(task: Task) { private suspend fun onTaskDelete(task: Task) {
(activity as MainActivity?)?.taskEditFragment?.let { taskEditEventBus.emit(TaskEditEvent.Discard(task.id))
if (task.id == it.editViewModel.task?.id) {
it.editViewModel.discard()
}
}
timerPlugin.stopTimer(task) timerPlugin.stopTimer(task)
taskAdapter.onTaskDeleted(task) taskAdapter.onTaskDeleted(task)
loadTaskListContent() loadTaskListContent()

@ -8,6 +8,7 @@ import dagger.hilt.android.scopes.ActivityRetainedScoped
import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import org.tasks.ui.MainActivityEventBus import org.tasks.ui.MainActivityEventBus
import org.tasks.ui.TaskEditEventBus
import org.tasks.ui.TaskListEventBus import org.tasks.ui.TaskListEventBus
@Module @Module
@ -21,6 +22,10 @@ class ActivityRetainedModule {
@ActivityRetainedScoped @ActivityRetainedScoped
fun getMainActivityBus(): MainActivityEventBus = makeFlow() fun getMainActivityBus(): MainActivityEventBus = makeFlow()
@Provides
@ActivityRetainedScoped
fun getTaskEditBus(): TaskEditEventBus = makeFlow()
private fun <T> makeFlow() = MutableSharedFlow<T>( private fun <T> makeFlow() = MutableSharedFlow<T>(
extraBufferCapacity = 1, extraBufferCapacity = 1,
onBufferOverflow = BufferOverflow.DROP_OLDEST onBufferOverflow = BufferOverflow.DROP_OLDEST

@ -0,0 +1,9 @@
package org.tasks.ui
import kotlinx.coroutines.flow.MutableSharedFlow
typealias TaskEditEventBus = MutableSharedFlow<TaskEditEvent>
sealed interface TaskEditEvent {
data class Discard(val id: Long) : TaskEditEvent
}
Loading…
Cancel
Save