From deefb2048125808ebc5b6432250d4fbab194a30b Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 4 May 2025 11:07:12 -0500 Subject: [PATCH] Fix activity finishing itself --- .../todoroo/astrid/activity/MainActivity.kt | 42 +++++++------------ .../astrid/activity/TaskEditFragment.kt | 29 +++++++++++-- 2 files changed, 40 insertions(+), 31 deletions(-) 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 3c3d69e62..16e03e6be 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -254,28 +254,20 @@ class MainActivity : AppCompatActivity() { ) val keyboard = LocalSoftwareKeyboardController.current LaunchedEffect(state.task) { - if (state.task == null) { - if (intent.finishAffinity) { - finishAffinity() - } else { - if (intent.removeTask && intent.broughtToFront) { - moveTaskToBack(true) - } - keyboard?.hide() - navigator.navigateTo(pane = ThreePaneScaffoldRole.Secondary) - } + val pane = if (state.task == null) { + ThreePaneScaffoldRole.Secondary } else { - navigator.navigateTo(pane = ThreePaneScaffoldRole.Primary) + ThreePaneScaffoldRole.Primary } + Timber.d("Navigating to $pane") + navigator.navigateTo(pane = pane) } val isDetailVisible = navigator.scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded BackHandler(enabled = state.task == null) { Timber.d("onBackPressed") - if (intent.finishAffinity) { - finishAffinity() - } else if (isDetailVisible && navigator.canNavigateBack()) { + if (isDetailVisible && navigator.canNavigateBack()) { scope.launch { navigator.navigateBack() } @@ -426,23 +418,17 @@ class MainActivity : AppCompatActivity() { } val Intent.removeTask: Boolean - get() = if (isFromHistory) { - false - } else { - getBooleanExtra(REMOVE_TASK, false).let { - removeExtra(REMOVE_TASK) - it - } + get() = try { + getBooleanExtra(REMOVE_TASK, false) && !isFromHistory && !broughtToFront + } finally { + removeExtra(REMOVE_TASK) } val Intent.finishAffinity: Boolean - get() = if (isFromHistory) { - false - } else { - getBooleanExtra(FINISH_AFFINITY, false).let { - removeExtra(FINISH_AFFINITY) - it - } + get() = try { + getBooleanExtra(FINISH_AFFINITY, false) && !isFromHistory && !broughtToFront + } finally { + removeExtra(FINISH_AFFINITY) } } } 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 9181f6e10..58b64fbcd 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt @@ -15,6 +15,8 @@ import androidx.fragment.app.viewModels import androidx.fragment.compose.content import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope +import com.todoroo.astrid.activity.MainActivity.Companion.finishAffinity +import com.todoroo.astrid.activity.MainActivity.Companion.removeTask import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import org.tasks.R @@ -24,6 +26,7 @@ import org.tasks.data.dao.UserActivityDao import org.tasks.dialogs.DateTimePicker import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.Linkify +import org.tasks.extensions.hideKeyboard import org.tasks.markdown.MarkdownProvider import org.tasks.notifications.NotificationManager import org.tasks.play.PlayServices @@ -32,6 +35,7 @@ import org.tasks.themes.TasksTheme import org.tasks.themes.Theme import org.tasks.ui.ChipProvider import org.tasks.ui.TaskEditViewModel +import timber.log.Timber import java.util.Locale import javax.inject.Inject @@ -98,7 +102,7 @@ class TaskEditFragment : Fragment() { .setPositiveButton(R.string.ok) { _, _ -> lifecycleScope.launch { editViewModel.delete() - mainViewModel.setTask(null) + clearTask() } } .setNegativeButton(R.string.cancel, null) @@ -132,17 +136,36 @@ class TaskEditFragment : Fragment() { } } + private fun clearTask() { + Timber.d("clearTask()") + mainViewModel.setTask(null) + activity?.let { activity -> + activity.hideKeyboard() + when { + activity.intent.finishAffinity -> { + Timber.d("finishAffinity") + activity.finishAffinity() + } + activity.intent.removeTask -> { + Timber.d("removeTask") + activity.moveTaskToBack(true) + activity.finish() + } + } + } + } + suspend fun save(remove: Boolean = true) { editViewModel.save() if (remove) { - mainViewModel.setTask(null) + clearTask() } activity?.let { playServices.requestReview(it) } } private fun discard() = lifecycleScope.launch { editViewModel.discard() - mainViewModel.setTask(null) + clearTask() } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {