Fix activity finishing itself

pull/3566/head
Alex Baker 7 months ago
parent 83bc9798d6
commit deefb20481

@ -254,28 +254,20 @@ class MainActivity : AppCompatActivity() {
) )
val keyboard = LocalSoftwareKeyboardController.current val keyboard = LocalSoftwareKeyboardController.current
LaunchedEffect(state.task) { LaunchedEffect(state.task) {
if (state.task == null) { val pane = if (state.task == null) {
if (intent.finishAffinity) { ThreePaneScaffoldRole.Secondary
finishAffinity()
} else {
if (intent.removeTask && intent.broughtToFront) {
moveTaskToBack(true)
}
keyboard?.hide()
navigator.navigateTo(pane = ThreePaneScaffoldRole.Secondary)
}
} else { } else {
navigator.navigateTo(pane = ThreePaneScaffoldRole.Primary) ThreePaneScaffoldRole.Primary
} }
Timber.d("Navigating to $pane")
navigator.navigateTo(pane = pane)
} }
val isDetailVisible = val isDetailVisible =
navigator.scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded navigator.scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded
BackHandler(enabled = state.task == null) { BackHandler(enabled = state.task == null) {
Timber.d("onBackPressed") Timber.d("onBackPressed")
if (intent.finishAffinity) { if (isDetailVisible && navigator.canNavigateBack()) {
finishAffinity()
} else if (isDetailVisible && navigator.canNavigateBack()) {
scope.launch { scope.launch {
navigator.navigateBack() navigator.navigateBack()
} }
@ -426,23 +418,17 @@ class MainActivity : AppCompatActivity() {
} }
val Intent.removeTask: Boolean val Intent.removeTask: Boolean
get() = if (isFromHistory) { get() = try {
false getBooleanExtra(REMOVE_TASK, false) && !isFromHistory && !broughtToFront
} else { } finally {
getBooleanExtra(REMOVE_TASK, false).let { removeExtra(REMOVE_TASK)
removeExtra(REMOVE_TASK)
it
}
} }
val Intent.finishAffinity: Boolean val Intent.finishAffinity: Boolean
get() = if (isFromHistory) { get() = try {
false getBooleanExtra(FINISH_AFFINITY, false) && !isFromHistory && !broughtToFront
} else { } finally {
getBooleanExtra(FINISH_AFFINITY, false).let { removeExtra(FINISH_AFFINITY)
removeExtra(FINISH_AFFINITY)
it
}
} }
} }
} }

@ -15,6 +15,8 @@ import androidx.fragment.app.viewModels
import androidx.fragment.compose.content import androidx.fragment.compose.content
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope 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 dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
@ -24,6 +26,7 @@ import org.tasks.data.dao.UserActivityDao
import org.tasks.dialogs.DateTimePicker import org.tasks.dialogs.DateTimePicker
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.Linkify import org.tasks.dialogs.Linkify
import org.tasks.extensions.hideKeyboard
import org.tasks.markdown.MarkdownProvider import org.tasks.markdown.MarkdownProvider
import org.tasks.notifications.NotificationManager import org.tasks.notifications.NotificationManager
import org.tasks.play.PlayServices import org.tasks.play.PlayServices
@ -32,6 +35,7 @@ import org.tasks.themes.TasksTheme
import org.tasks.themes.Theme import org.tasks.themes.Theme
import org.tasks.ui.ChipProvider import org.tasks.ui.ChipProvider
import org.tasks.ui.TaskEditViewModel import org.tasks.ui.TaskEditViewModel
import timber.log.Timber
import java.util.Locale import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -98,7 +102,7 @@ class TaskEditFragment : Fragment() {
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
lifecycleScope.launch { lifecycleScope.launch {
editViewModel.delete() editViewModel.delete()
mainViewModel.setTask(null) clearTask()
} }
} }
.setNegativeButton(R.string.cancel, null) .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) { suspend fun save(remove: Boolean = true) {
editViewModel.save() editViewModel.save()
if (remove) { if (remove) {
mainViewModel.setTask(null) clearTask()
} }
activity?.let { playServices.requestReview(it) } activity?.let { playServices.requestReview(it) }
} }
private fun discard() = lifecycleScope.launch { private fun discard() = lifecycleScope.launch {
editViewModel.discard() editViewModel.discard()
mainViewModel.setTask(null) clearTask()
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

Loading…
Cancel
Save