diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt index b27ecc8f2..2c88aed76 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -113,6 +113,8 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl onTaskListItemClicked(event.task) is MainActivityEvent.RequestRating -> playServices.requestReview(this) + is MainActivityEvent.ClearTaskEditFragment -> + removeTaskEditFragment() } public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { @@ -353,7 +355,6 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl return } taskEditFragment?.let { - it.editViewModel.cleared.removeObservers(this@MainActivity) it.save() } clearUi() @@ -419,7 +420,7 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl private val isSinglePaneLayout: Boolean get() = !resources.getBoolean(R.bool.two_pane_layout) - fun removeTaskEditFragment() { + private fun removeTaskEditFragment() { val removeTask = intent.removeTask val finishAffinity = intent.finishAffinity if (finishAffinity || taskListFragment == null) { 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 c4124462d..230a0584a 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt @@ -96,10 +96,6 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener { args.getParcelableArrayList(EXTRA_ALARMS)!! ) } - val activity = requireActivity() as MainActivity - editViewModel.cleared.observe(activity) { - activity.removeTaskEditFragment() - } } override fun onCreateView( diff --git a/app/src/main/java/org/tasks/ui/MainActivityEvent.kt b/app/src/main/java/org/tasks/ui/MainActivityEvent.kt index 91a7aff20..7f86c11e6 100644 --- a/app/src/main/java/org/tasks/ui/MainActivityEvent.kt +++ b/app/src/main/java/org/tasks/ui/MainActivityEvent.kt @@ -8,5 +8,6 @@ typealias MainActivityEventBus = MutableSharedFlow sealed interface MainActivityEvent { data class OpenTask(val task: Task) : MainActivityEvent object RequestRating : MainActivityEvent + object ClearTaskEditFragment : MainActivityEvent } diff --git a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt index 9d80fe3bc..495d97b39 100644 --- a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt +++ b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt @@ -2,7 +2,6 @@ package org.tasks.ui import android.content.Context import androidx.annotation.MainThread -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.todoroo.andlib.utility.DateUtilities.now import com.todoroo.astrid.alarms.AlarmService @@ -30,7 +29,6 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import net.fortuna.ical4j.model.Recur -import org.tasks.Event import org.tasks.R import org.tasks.Strings import org.tasks.calendars.CalendarEventProvider @@ -85,7 +83,7 @@ class TaskEditViewModel @Inject constructor( private val mainActivityEvents: MainActivityEventBus, ) : ViewModel() { - val cleared = MutableLiveData>() + private var cleared = false fun setup( task: Task, @@ -320,11 +318,9 @@ class TaskEditViewModel @Inject constructor( } || originalAlarms.toHashSet() != selectedAlarms.value.toHashSet() - fun cleared() = cleared.value?.value == true - @MainThread suspend fun save() = withContext(NonCancellable) { - if (cleared()) { + if (cleared) { return@withContext } if (!hasChanges()) { @@ -479,18 +475,17 @@ class TaskEditViewModel @Inject constructor( } @MainThread - fun clear() { - if (!cleared()) { - cleared.value = Event(true) + suspend fun clear() { + if (!cleared) { + cleared = true + mainActivityEvents.emit(MainActivityEvent.ClearTaskEditFragment) } } override fun onCleared() { - cleared.value.let { - if (it == null || !it.value) { - runBlocking { - save() - } + if (!cleared) { + runBlocking { + save() } } }