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 983103d48..1d4d7a867 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt @@ -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" 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 4cbd28ec3..8ba822497 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -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() } } diff --git a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt index 0687c4eec..3d11c28c2 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt @@ -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) { diff --git a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt index 24fe853ac..b4c9af8c8 100644 --- a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt +++ b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt @@ -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() diff --git a/app/src/main/java/org/tasks/widget/WidgetClickActivity.kt b/app/src/main/java/org/tasks/widget/WidgetClickActivity.kt index 328017ae3..1b882a99e 100644 --- a/app/src/main/java/org/tasks/widget/WidgetClickActivity.kt +++ b/app/src/main/java/org/tasks/widget/WidgetClickActivity.kt @@ -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() }