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
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)
}
}
}

@ -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?) {

Loading…
Cancel
Save