Refresh subtasks in task edit fragment

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

@ -6,6 +6,7 @@
package com.todoroo.astrid.activity
import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.graphics.Paint
@ -46,6 +47,7 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase
@ -64,6 +66,7 @@ import org.tasks.preferences.Preferences
import org.tasks.ui.TaskEditEvent
import org.tasks.ui.TaskEditEventBus
import org.tasks.ui.TaskEditViewModel
import org.tasks.ui.TaskListViewModel
import javax.inject.Inject
import kotlin.math.abs
@ -82,13 +85,16 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
@Inject lateinit var linkify: Linkify
@Inject lateinit var markdownProvider: MarkdownProvider
@Inject lateinit var taskEditEventBus: TaskEditEventBus
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
private val linkifyEnabled: Boolean
get() = preferences.getBoolean(R.string.p_linkify_task_edit, false)
val editViewModel: TaskEditViewModel by viewModels()
val subtaskViewModel: TaskListViewModel by viewModels()
lateinit var binding: FragmentTaskEditBinding
private var showKeyboard = false
private val refreshReceiver = RefreshReceiver()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
@ -260,7 +266,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
override fun onResume() {
super.onResume()
localBroadcastManager.registerRefreshReceiver(refreshReceiver)
if (showKeyboard) {
binding.title.requestFocus()
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 {
AndroidUtilities.hideKeyboard(activity)
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 {
const val TAG_TASKEDIT_FRAGMENT = "taskedit_fragment"
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) {
lifecycleScope.launch {
taskDao.setCollapsed(task.id, collapsed)
broadcastRefresh()
}
}

@ -80,6 +80,7 @@ class TaskDao @Inject constructor(
suspend fun setCollapsed(id: Long, collapsed: Boolean) {
taskDao.setCollapsed(listOf(id), collapsed)
syncAdapters.sync()
localBroadcastManager.broadcastRefresh()
}
suspend fun setCollapsed(preferences: Preferences, filter: Filter, collapsed: Boolean) {

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

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

Loading…
Cancel
Save