From b3f29dc0fb7dde4f6e89c4ea82bccaa0b4625471 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 23 Dec 2024 02:30:12 -0600 Subject: [PATCH] Fix deleting lists --- .../org/tasks/activities/BaseListSettingsActivity.kt | 2 +- .../java/org/tasks/activities/FilterSettingsActivity.kt | 9 +++++---- .../java/org/tasks/activities/FilterSettingsViewModel.kt | 9 ++++++++- .../tasks/caldav/BaseCaldavCalendarSettingsActivity.kt | 2 +- .../java/org/tasks/caldav/LocalListSettingsActivity.kt | 2 +- app/src/main/java/org/tasks/compose/DeleteButton.kt | 9 +++++---- 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt index 0a3f621c2..fa4ea4d48 100644 --- a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt @@ -112,7 +112,7 @@ abstract class BaseListSettingsActivity : ThemedInjectingAppCompatActivity(), Co title: String = toolbarTitle ?: "", requestKeyboard: Boolean = isNew, optionButton: @Composable () -> Unit = { - if (!isNew) DeleteButton(toolbarTitle ?: "") { promptDelete() } + if (!isNew) DeleteButton(toolbarTitle ?: "") { delete() } }, extensionContent: @Composable ColumnScope.() -> Unit = {} ) { diff --git a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt index a640b609d..78d2204e4 100644 --- a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt @@ -161,10 +161,11 @@ class FilterSettingsActivity : BaseListSettingsActivity() { } override suspend fun delete() { - filterDao.delete(filter!!.id) - setResult( + viewModel.delete { + setResult( Activity.RESULT_OK, Intent(TaskListFragment.ACTION_DELETED).putExtra(TOKEN_FILTER, filter)) - finish() + finish() + } } private fun help() = openUri(R.string.url_filters) @@ -184,7 +185,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() { IconButton(onClick = { help() }) { Icon(imageVector = Icons.Outlined.Help, contentDescription = "") } - } else DeleteButton(filter?.title ?: ""){ promptDelete() } + } else DeleteButton(filter?.title ?: ""){ delete() } } ) { FilterCondition( diff --git a/app/src/main/java/org/tasks/activities/FilterSettingsViewModel.kt b/app/src/main/java/org/tasks/activities/FilterSettingsViewModel.kt index 5040f82b6..7d56ba4a9 100644 --- a/app/src/main/java/org/tasks/activities/FilterSettingsViewModel.kt +++ b/app/src/main/java/org/tasks/activities/FilterSettingsViewModel.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import org.tasks.activities.FilterSettingsActivity.Companion.EXTRA_CRITERIA import org.tasks.activities.FilterSettingsActivity.Companion.TOKEN_FILTER +import org.tasks.data.dao.FilterDao import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.db.Database import org.tasks.data.entity.Task @@ -32,7 +33,8 @@ import kotlin.math.max class FilterSettingsViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val filterCriteriaProvider: FilterCriteriaProvider, - private val database: Database + private val database: Database, + private val filterDao: FilterDao, ) : ViewModel() { data class ViewState( val filter: CustomFilter? = null, @@ -154,4 +156,9 @@ class FilterSettingsViewModel @Inject constructor( } ) } + + fun delete(onCompleted: () -> Unit) = viewModelScope.launch { + _viewState.value.filter?.id?.let { filterDao.delete(it) } + onCompleted() + } } diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt index 751f1c19e..ef5a530e1 100644 --- a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt @@ -199,7 +199,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() { @Composable fun BaseCaldavSettingsContent ( - optionButton: @Composable () -> Unit = { if (!isNew) DeleteButton(caldavCalendar?.name ?: "") { promptDelete() } }, + optionButton: @Composable () -> Unit = { if (!isNew) DeleteButton(caldavCalendar?.name ?: "") { delete() } }, extensionContent: @Composable ColumnScope.() -> Unit = {} ) { BaseSettingsContent ( diff --git a/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt index 54820d3d8..87fe90983 100644 --- a/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt @@ -22,7 +22,7 @@ class LocalListSettingsActivity : BaseCaldavCalendarSettingsActivity() { setContent { TasksTheme { BaseCaldavSettingsContent ( - optionButton = { if (!isNew && canDelete) DeleteButton(caldavCalendar?.name ?: "") { promptDelete() } } + optionButton = { if (!isNew && canDelete) DeleteButton(caldavCalendar?.name ?: "") { delete() } } ) } } diff --git a/app/src/main/java/org/tasks/compose/DeleteButton.kt b/app/src/main/java/org/tasks/compose/DeleteButton.kt index b79b0fa23..f7bd9422d 100644 --- a/app/src/main/java/org/tasks/compose/DeleteButton.kt +++ b/app/src/main/java/org/tasks/compose/DeleteButton.kt @@ -4,33 +4,34 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource +import kotlinx.coroutines.launch import org.tasks.R import org.tasks.compose.settings.PromptAction @Composable fun DeleteButton( title: String, - onDelete: () -> Unit + onDelete: suspend () -> Unit ) { + val scope = rememberCoroutineScope() var promptDelete by remember { mutableStateOf(false) } IconButton(onClick = { promptDelete = true }) { Icon( imageVector = Icons.Outlined.Delete, contentDescription = stringResource(id = R.string.delete), - tint = MaterialTheme.colorScheme.onSurface, ) } PromptAction( showDialog = promptDelete, title = stringResource(id = R.string.delete_tag_confirmation, title), - onAction = { onDelete() }, + onAction = { scope.launch { onDelete() } }, onCancel = { promptDelete = false }, ) }