Saving intermediary state in this commit.

1. Eliminated CheckBoxTriState in the viewModel
2. but it made it incompatible with TagPickerActivity and TagRecycleAdapter, which shall be excluded from build but they wasn't. So made "backward compatible" changes in them temporarily
pull/2849/head
hady 2 months ago
parent 4cd4d1e985
commit 380d094bbf

@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle
import android.widget.EditText
import androidx.activity.viewModels
import androidx.compose.ui.state.ToggleableState
import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DefaultItemAnimator
@ -22,7 +23,7 @@ import org.tasks.themes.ColorProvider
import org.tasks.themes.Theme
import javax.inject.Inject
@AndroidEntryPoint
//@AndroidEntryPoint
class TagPickerActivity : ThemedInjectingAppCompatActivity() {
@Inject lateinit var theme: Theme
@Inject lateinit var inventory: Inventory
@ -86,7 +87,13 @@ class TagPickerActivity : ThemedInjectingAppCompatActivity() {
private fun onToggle(tagData: TagData, vh: TagPickerViewHolder) = lifecycleScope.launch {
val newTag = tagData.id == null
val newState = viewModel.toggle(tagData, vh.isChecked || newTag)
vh.updateCheckbox(newState)
vh.updateCheckbox(
when (newState) {
ToggleableState.On -> CheckBoxTriStates.State.CHECKED
ToggleableState.Off -> CheckBoxTriStates.State.UNCHECKED
else -> CheckBoxTriStates.State.PARTIALLY_CHECKED
}
)
if (newTag) {
clear()
}

@ -197,18 +197,10 @@ internal fun PickerBox(
getTagIcon: (TagData) -> Int = { R.drawable.ic_outline_label_24px },
getTagColor: (TagData) -> Color = { Color.Gray }
) {
val getState: (TagData) -> ToggleableState = {
when (viewModel.getState(it)) {
CheckBoxTriStates.State.CHECKED -> ToggleableState.On
CheckBoxTriStates.State.PARTIALLY_CHECKED -> ToggleableState.Indeterminate
else -> ToggleableState.Off
}
}
val onClick: (TagData) -> Unit = {
viewModel.viewModelScope.launch {
viewModel.toggle(it, viewModel.getState(it) != CheckBoxTriStates.State.CHECKED) }
viewModel.toggle(it, viewModel.getState(it) != ToggleableState.On) }
}
val newItem: (TagData) -> Unit = {
viewModel.viewModelScope.launch { viewModel.createNew(it.name!!); viewModel.search("") }
}
@ -216,13 +208,13 @@ internal fun PickerBox(
LazyColumn {
items( tags.value, key = { if (it.id == null) -1 else it.id!! } )
{
val checked = remember { mutableStateOf ( getState(it) ) }
val checked = remember { mutableStateOf ( viewModel.getState(it) ) }
Row(modifier = Modifier
.fillMaxWidth()
.clickable {
if (it.id == null) newItem(it)
else {
onClick(it); checked.value = getState(it)
onClick(it); checked.value = viewModel.getState(it)
}
},
verticalAlignment = Alignment.CenterVertically,
@ -248,7 +240,7 @@ internal fun PickerBox(
TriStateCheckbox(
modifier = Modifier.padding(6.dp),
state = checked.value,
onClick = { onClick(it); checked.value = getState(it) }
onClick = { onClick(it); checked.value = viewModel.getState(it) }
)
}
}

@ -2,6 +2,7 @@ package org.tasks.tags
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.state.ToggleableState
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
@ -76,14 +77,14 @@ class TagPickerViewModel @Inject constructor(
tags.value = sorted
}
fun getState(tagData: TagData): CheckBoxTriStates.State {
fun getState(tagData: TagData): ToggleableState {
if (partiallySelected.contains(tagData)) {
return CheckBoxTriStates.State.PARTIALLY_CHECKED
return ToggleableState.Indeterminate
}
return if (selected.contains(tagData)) CheckBoxTriStates.State.CHECKED else CheckBoxTriStates.State.UNCHECKED
return if (selected.contains(tagData)) ToggleableState.On else ToggleableState.Off
}
suspend fun toggle(tagData: TagData, checked: Boolean): CheckBoxTriStates.State {
suspend fun toggle(tagData: TagData, checked: Boolean): ToggleableState {
var tagData = tagData
if (tagData.id == null) {
tagData = TagData(tagData.name)
@ -92,10 +93,10 @@ class TagPickerViewModel @Inject constructor(
partiallySelected.remove(tagData)
return if (checked) {
selected.add(tagData)
CheckBoxTriStates.State.CHECKED
ToggleableState.On
} else {
selected.remove(tagData)
CheckBoxTriStates.State.UNCHECKED
ToggleableState.Off
}
}

@ -3,6 +3,7 @@ package org.tasks.tags
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.compose.ui.state.ToggleableState
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.RecyclerView
import org.tasks.R
@ -31,7 +32,15 @@ internal class TagRecyclerAdapter(
override fun onBindViewHolder(holder: TagPickerViewHolder, position: Int) {
val tagData = differ.currentList[position]
holder.bind(tagData, getColor(tagData), getIcon(tagData), viewModel.getState(tagData))
val backCompat: (ToggleableState) -> CheckBoxTriStates.State =
{ state: ToggleableState ->
when (state) {
ToggleableState.On -> CheckBoxTriStates.State.CHECKED
ToggleableState.Off -> CheckBoxTriStates.State.UNCHECKED
else -> CheckBoxTriStates.State.PARTIALLY_CHECKED
}
}
holder.bind(tagData, getColor(tagData), getIcon(tagData), backCompat(viewModel.getState(tagData)))
}
override fun getItemCount(): Int = differ.currentList.size

Loading…
Cancel
Save