Refresh subtasks in task edit fragment

pull/1952/head
Alex Baker 3 years ago
parent c4cd694948
commit eabe2b37ee

@ -6,6 +6,7 @@
package com.todoroo.astrid.activity package com.todoroo.astrid.activity
import android.app.Activity import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Paint import android.graphics.Paint
@ -46,6 +47,7 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.tasks.LocalBroadcastManager
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
@ -64,6 +66,7 @@ import org.tasks.preferences.Preferences
import org.tasks.ui.TaskEditEvent import org.tasks.ui.TaskEditEvent
import org.tasks.ui.TaskEditEventBus import org.tasks.ui.TaskEditEventBus
import org.tasks.ui.TaskEditViewModel import org.tasks.ui.TaskEditViewModel
import org.tasks.ui.TaskListViewModel
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.abs import kotlin.math.abs
@ -82,13 +85,16 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
@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 @Inject lateinit var taskEditEventBus: TaskEditEventBus
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
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)
val editViewModel: TaskEditViewModel by viewModels() val editViewModel: TaskEditViewModel by viewModels()
val subtaskViewModel: TaskListViewModel by viewModels()
lateinit var binding: FragmentTaskEditBinding lateinit var binding: FragmentTaskEditBinding
private var showKeyboard = false private var showKeyboard = false
private val refreshReceiver = RefreshReceiver()
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
@ -260,7 +266,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
localBroadcastManager.registerRefreshReceiver(refreshReceiver)
if (showKeyboard) { if (showKeyboard) {
binding.title.requestFocus() binding.title.requestFocus()
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
@ -271,6 +277,11 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
} }
} }
override fun onPause() {
super.onPause()
localBroadcastManager.unregisterReceiver(refreshReceiver)
}
override fun onMenuItemClick(item: MenuItem): Boolean { override fun onMenuItemClick(item: MenuItem): Boolean {
AndroidUtilities.hideKeyboard(activity) AndroidUtilities.hideKeyboard(activity)
if (item.itemId == R.id.menu_delete) { if (item.itemId == R.id.menu_delete) {
@ -367,6 +378,12 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
} }
} }
private inner class RefreshReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
subtaskViewModel.invalidate()
}
}
companion object { companion object {
const val TAG_TASKEDIT_FRAGMENT = "taskedit_fragment" const val TAG_TASKEDIT_FRAGMENT = "taskedit_fragment"
private const val FRAG_TAG_COMMENT_BAR = "comment_bar" private const val FRAG_TAG_COMMENT_BAR = "comment_bar"

@ -907,7 +907,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
override fun toggleSubtasks(task: TaskContainer, collapsed: Boolean) { override fun toggleSubtasks(task: TaskContainer, collapsed: Boolean) {
lifecycleScope.launch { lifecycleScope.launch {
taskDao.setCollapsed(task.id, collapsed) taskDao.setCollapsed(task.id, collapsed)
broadcastRefresh()
} }
} }

@ -80,6 +80,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()
} }
suspend fun setCollapsed(preferences: Preferences, filter: Filter, collapsed: Boolean) { suspend fun setCollapsed(preferences: Preferences, filter: Filter, collapsed: Boolean) {

@ -1,15 +1,12 @@
package org.tasks.ui package org.tasks.ui
import android.app.Activity import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.composethemeadapter.MdcTheme import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.sql.Criterion import com.todoroo.andlib.sql.Criterion
@ -23,7 +20,6 @@ import com.todoroo.astrid.service.TaskCompleter
import com.todoroo.astrid.service.TaskCreator import com.todoroo.astrid.service.TaskCreator
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.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.SubtaskRow import org.tasks.compose.edit.SubtaskRow
@ -38,7 +34,6 @@ import javax.inject.Inject
class SubtaskControlSet : TaskEditControlFragment() { class SubtaskControlSet : TaskEditControlFragment() {
@Inject lateinit var activity: Activity @Inject lateinit var activity: Activity
@Inject lateinit var taskCompleter: TaskCompleter @Inject lateinit var taskCompleter: TaskCompleter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var taskCreator: TaskCreator @Inject lateinit var taskCreator: TaskCreator
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDao
@ -48,8 +43,7 @@ class SubtaskControlSet : TaskEditControlFragment() {
@Inject lateinit var colorProvider: ColorProvider @Inject lateinit var colorProvider: ColorProvider
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
private val listViewModel: TaskListViewModel by viewModels() lateinit var listViewModel: TaskListViewModel
private val refreshReceiver = RefreshReceiver()
override fun createView(savedInstanceState: Bundle?) { override fun createView(savedInstanceState: Bundle?) {
viewModel.task.takeIf { it.id > 0 }?.let { viewModel.task.takeIf { it.id > 0 }?.let {
@ -59,6 +53,7 @@ class SubtaskControlSet : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?): View = override fun bind(parent: ViewGroup?): View =
(parent as ComposeView).apply { (parent as ComposeView).apply {
listViewModel = ViewModelProvider(requireParentFragment())[TaskListViewModel::class.java]
setContent { setContent {
MdcTheme { MdcTheme {
SubtaskRow( SubtaskRow(
@ -94,16 +89,6 @@ class SubtaskControlSet : TaskEditControlFragment() {
override fun controlId() = TAG override fun controlId() = TAG
override fun onResume() {
super.onResume()
localBroadcastManager.registerRefreshReceiver(refreshReceiver)
}
override fun onPause() {
super.onPause()
localBroadcastManager.unregisterReceiver(refreshReceiver)
}
private fun addSubtask() = lifecycleScope.launch { private fun addSubtask() = lifecycleScope.launch {
val task = taskCreator.createWithValues("") val task = taskCreator.createWithValues("")
viewModel.newSubtasks.value = viewModel.newSubtasks.value.plus(task) viewModel.newSubtasks.value = viewModel.newSubtasks.value.plus(task)
@ -115,19 +100,12 @@ class SubtaskControlSet : TaskEditControlFragment() {
private fun toggleSubtask(taskId: Long, collapsed: Boolean) = lifecycleScope.launch { private fun toggleSubtask(taskId: Long, collapsed: Boolean) = lifecycleScope.launch {
taskDao.setCollapsed(taskId, collapsed) taskDao.setCollapsed(taskId, collapsed)
localBroadcastManager.broadcastRefresh()
} }
private fun complete(task: Task, completed: Boolean) = lifecycleScope.launch { private fun complete(task: Task, completed: Boolean) = lifecycleScope.launch {
taskCompleter.setComplete(task, completed) taskCompleter.setComplete(task, completed)
} }
private inner class RefreshReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
listViewModel.invalidate()
}
}
companion object { companion object {
const val TAG = R.string.TEA_ctrl_subtask_pref const val TAG = R.string.TEA_ctrl_subtask_pref
private fun getQueryTemplate(task: Task): QueryTemplate = QueryTemplate() private fun getQueryTemplate(task: Task): QueryTemplate = QueryTemplate()

@ -49,7 +49,6 @@ class WidgetClickActivity : InjectingAppCompatActivity(), OnDismissHandler {
TOGGLE_SUBTASKS -> { TOGGLE_SUBTASKS -> {
lifecycleScope.launch(NonCancellable) { lifecycleScope.launch(NonCancellable) {
taskDao.setCollapsed(task.id, intent.getBooleanExtra(EXTRA_COLLAPSED, false)) taskDao.setCollapsed(task.id, intent.getBooleanExtra(EXTRA_COLLAPSED, false))
localBroadcastManager.broadcastRefresh()
} }
finish() finish()
} }

Loading…
Cancel
Save