Fix deleting lists

pull/3207/head
Alex Baker 12 months ago
parent 932d9eec75
commit b3f29dc0fb

@ -112,7 +112,7 @@ abstract class BaseListSettingsActivity : ThemedInjectingAppCompatActivity(), Co
title: String = toolbarTitle ?: "", title: String = toolbarTitle ?: "",
requestKeyboard: Boolean = isNew, requestKeyboard: Boolean = isNew,
optionButton: @Composable () -> Unit = { optionButton: @Composable () -> Unit = {
if (!isNew) DeleteButton(toolbarTitle ?: "") { promptDelete() } if (!isNew) DeleteButton(toolbarTitle ?: "") { delete() }
}, },
extensionContent: @Composable ColumnScope.() -> Unit = {} extensionContent: @Composable ColumnScope.() -> Unit = {}
) { ) {

@ -161,10 +161,11 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
} }
override suspend fun delete() { override suspend fun delete() {
filterDao.delete(filter!!.id) viewModel.delete {
setResult( setResult(
Activity.RESULT_OK, Intent(TaskListFragment.ACTION_DELETED).putExtra(TOKEN_FILTER, filter)) Activity.RESULT_OK, Intent(TaskListFragment.ACTION_DELETED).putExtra(TOKEN_FILTER, filter))
finish() finish()
}
} }
private fun help() = openUri(R.string.url_filters) private fun help() = openUri(R.string.url_filters)
@ -184,7 +185,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
IconButton(onClick = { help() }) { IconButton(onClick = { help() }) {
Icon(imageVector = Icons.Outlined.Help, contentDescription = "") Icon(imageVector = Icons.Outlined.Help, contentDescription = "")
} }
} else DeleteButton(filter?.title ?: ""){ promptDelete() } } else DeleteButton(filter?.title ?: ""){ delete() }
} }
) { ) {
FilterCondition( FilterCondition(

@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.activities.FilterSettingsActivity.Companion.EXTRA_CRITERIA import org.tasks.activities.FilterSettingsActivity.Companion.EXTRA_CRITERIA
import org.tasks.activities.FilterSettingsActivity.Companion.TOKEN_FILTER 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.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.db.Database import org.tasks.data.db.Database
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
@ -32,7 +33,8 @@ import kotlin.math.max
class FilterSettingsViewModel @Inject constructor( class FilterSettingsViewModel @Inject constructor(
savedStateHandle: SavedStateHandle, savedStateHandle: SavedStateHandle,
private val filterCriteriaProvider: FilterCriteriaProvider, private val filterCriteriaProvider: FilterCriteriaProvider,
private val database: Database private val database: Database,
private val filterDao: FilterDao,
) : ViewModel() { ) : ViewModel() {
data class ViewState( data class ViewState(
val filter: CustomFilter? = null, 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()
}
} }

@ -199,7 +199,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
@Composable @Composable
fun BaseCaldavSettingsContent ( fun BaseCaldavSettingsContent (
optionButton: @Composable () -> Unit = { if (!isNew) DeleteButton(caldavCalendar?.name ?: "") { promptDelete() } }, optionButton: @Composable () -> Unit = { if (!isNew) DeleteButton(caldavCalendar?.name ?: "") { delete() } },
extensionContent: @Composable ColumnScope.() -> Unit = {} extensionContent: @Composable ColumnScope.() -> Unit = {}
) { ) {
BaseSettingsContent ( BaseSettingsContent (

@ -22,7 +22,7 @@ class LocalListSettingsActivity : BaseCaldavCalendarSettingsActivity() {
setContent { setContent {
TasksTheme { TasksTheme {
BaseCaldavSettingsContent ( BaseCaldavSettingsContent (
optionButton = { if (!isNew && canDelete) DeleteButton(caldavCalendar?.name ?: "") { promptDelete() } } optionButton = { if (!isNew && canDelete) DeleteButton(caldavCalendar?.name ?: "") { delete() } }
) )
} }
} }

@ -4,33 +4,34 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
import org.tasks.compose.settings.PromptAction import org.tasks.compose.settings.PromptAction
@Composable @Composable
fun DeleteButton( fun DeleteButton(
title: String, title: String,
onDelete: () -> Unit onDelete: suspend () -> Unit
) { ) {
val scope = rememberCoroutineScope()
var promptDelete by remember { mutableStateOf(false) } var promptDelete by remember { mutableStateOf(false) }
IconButton(onClick = { promptDelete = true }) { IconButton(onClick = { promptDelete = true }) {
Icon( Icon(
imageVector = Icons.Outlined.Delete, imageVector = Icons.Outlined.Delete,
contentDescription = stringResource(id = R.string.delete), contentDescription = stringResource(id = R.string.delete),
tint = MaterialTheme.colorScheme.onSurface,
) )
} }
PromptAction( PromptAction(
showDialog = promptDelete, showDialog = promptDelete,
title = stringResource(id = R.string.delete_tag_confirmation, title), title = stringResource(id = R.string.delete_tag_confirmation, title),
onAction = { onDelete() }, onAction = { scope.launch { onDelete() } },
onCancel = { promptDelete = false }, onCancel = { promptDelete = false },
) )
} }

Loading…
Cancel
Save