diff --git a/app/src/main/java/org/tasks/ui/ChipProvider.kt b/app/src/main/java/org/tasks/ui/ChipProvider.kt index 2f5e4b495..0e0ad03e1 100644 --- a/app/src/main/java/org/tasks/ui/ChipProvider.kt +++ b/app/src/main/java/org/tasks/ui/ChipProvider.kt @@ -111,6 +111,8 @@ class ChipProvider @Inject constructor( fun FilterChip( filter: Filter, defaultIcon: Int, + showText: Boolean = this@ChipProvider.showText, + showIcon: Boolean = this@ChipProvider.showIcon, onClick: (Any) -> Unit, ) { TasksChip( @@ -182,17 +184,6 @@ class ChipProvider @Inject constructor( } } - fun newListChip(filter: Filter, defIcon: Int, onClick: () -> Unit) = newView { - TasksChip( - getIcon(filter.icon, defIcon), - filter.listingTitle, - filter.tint, - showText = true, - showIcon = true, - onClick = onClick, - ) - } - fun newTagChip(tag: TagData, onClick: () -> Unit): View { return newView { TasksChip( diff --git a/app/src/main/java/org/tasks/ui/ListFragment.kt b/app/src/main/java/org/tasks/ui/ListFragment.kt index 3685eafb7..2efac6703 100644 --- a/app/src/main/java/org/tasks/ui/ListFragment.kt +++ b/app/src/main/java/org/tasks/ui/ListFragment.kt @@ -2,22 +2,24 @@ package org.tasks.ui import android.app.Activity import android.content.Intent -import android.os.Bundle import android.view.ViewGroup -import com.google.android.material.chip.ChipGroup +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.unit.dp +import com.google.accompanist.flowlayout.FlowRow +import com.google.android.material.composethemeadapter.MdcTheme import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.GtasksFilter import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.ListPicker -import org.tasks.databinding.ControlSetRemoteListBinding import javax.inject.Inject @AndroidEntryPoint class ListFragment : TaskEditControlFragment() { - private lateinit var chipGroup: ChipGroup - @Inject lateinit var chipProvider: ChipProvider private lateinit var callback: OnListChanged @@ -31,20 +33,28 @@ class ListFragment : TaskEditControlFragment() { callback = activity as OnListChanged } - override fun createView(savedInstanceState: Bundle?) { - refreshView() - } - private fun setSelected(filter: Filter) { - viewModel.selectedList = filter - refreshView() + viewModel.selectedList.value = filter callback.onListChanged(filter) } override fun bind(parent: ViewGroup?) = - ControlSetRemoteListBinding.inflate(layoutInflater, parent, true).let { - chipGroup = it.chipGroup - it.root + (parent?.findViewById(R.id.compose_view) as ComposeView).apply { + setContent { + MdcTheme { + val list = viewModel.selectedList.collectAsState() + val selectedList = list.value ?: return@MdcTheme + FlowRow(modifier = Modifier.padding(vertical = 20.dp)) { + chipProvider.FilterChip( + filter = selectedList, + defaultIcon = R.drawable.ic_list_24px, + showText = true, + showIcon = true, + onClick = { openPicker() } + ) + } + } + } } override val icon = R.drawable.ic_list_24px @@ -55,8 +65,10 @@ class ListFragment : TaskEditControlFragment() { override val isClickable = true + override val rootLayout = R.layout.control_set_template_compose + private fun openPicker() = - ListPicker.newListPicker(viewModel.selectedList!!, this, REQUEST_CODE_SELECT_LIST) + ListPicker.newListPicker(viewModel.selectedList.value!!, this, REQUEST_CODE_SELECT_LIST) .show(parentFragmentManager, FRAG_TAG_GOOGLE_TASK_LIST_SELECTION) override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { @@ -75,16 +87,6 @@ class ListFragment : TaskEditControlFragment() { } } - private fun refreshView() { - chipGroup.removeAllViews() - val chip = chipProvider.newListChip( - viewModel.selectedList!!, - R.drawable.ic_list_24px, - this::openPicker - ) - chipGroup.addView(chip) - } - companion object { const val TAG = R.string.TEA_ctrl_google_task_list private const val FRAG_TAG_GOOGLE_TASK_LIST_SELECTION = "frag_tag_google_task_list_selection" diff --git a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt index 02db42075..ceff015b0 100644 --- a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt +++ b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt @@ -88,7 +88,7 @@ class TaskEditViewModel @Inject constructor( this.task = task isNew = task.isNew originalList = list - selectedList = list + selectedList.value = list originalLocation = location originalTags = tags.toList() selectedTags = ArrayList(tags) @@ -237,7 +237,7 @@ class TaskEditViewModel @Inject constructor( private lateinit var originalList: Filter - var selectedList: Filter? = null + var selectedList = MutableStateFlow(null as Filter?) var originalLocation: Location? = null private set(value) { @@ -301,7 +301,7 @@ class TaskEditViewModel @Inject constructor( } || task.elapsedSeconds != elapsedSeconds || task.estimatedSeconds != estimatedSeconds || - originalList != selectedList || + originalList != selectedList.value || originalLocation != selectedLocation || originalTags.toHashSet() != selectedTags.toHashSet() || newSubtasks.isNotEmpty() || @@ -341,9 +341,9 @@ class TaskEditViewModel @Inject constructor( taskDao.createNew(task) } - if (isNew || originalList != selectedList) { + if (isNew || originalList != selectedList.value) { task.parent = 0 - taskMover.move(listOf(task.id), selectedList!!) + taskMover.move(listOf(task.id), selectedList.value!!) } if ((isNew && selectedLocation != null) || originalLocation != selectedLocation) { @@ -379,15 +379,15 @@ class TaskEditViewModel @Inject constructor( } taskDao.createNew(subtask) firebase?.addTask("subtasks") - when (selectedList) { + when (selectedList.value) { is GtasksFilter -> { - val googleTask = GoogleTask(subtask.id, (selectedList as GtasksFilter).remoteId) + val googleTask = GoogleTask(subtask.id, (selectedList.value as GtasksFilter).remoteId) googleTask.parent = task.id googleTask.isMoved = true googleTaskDao.insertAndShift(googleTask, false) } is CaldavFilter -> { - val caldavTask = CaldavTask(subtask.id, (selectedList as CaldavFilter).uuid) + val caldavTask = CaldavTask(subtask.id, (selectedList.value as CaldavFilter).uuid) subtask.parent = task.id caldavTask.remoteParent = caldavDao.getRemoteIdForTask(task.id) taskDao.save(subtask) diff --git a/app/src/main/res/layout/control_set_remote_list.xml b/app/src/main/res/layout/control_set_remote_list.xml deleted file mode 100644 index e8326dcae..000000000 --- a/app/src/main/res/layout/control_set_remote_list.xml +++ /dev/null @@ -1,8 +0,0 @@ - -