Convert ListFragment to compose

pull/1917/head
Alex Baker 4 years ago
parent 9832eef2c6
commit 25877f05e2

@ -111,6 +111,8 @@ class ChipProvider @Inject constructor(
fun FilterChip( fun FilterChip(
filter: Filter, filter: Filter,
defaultIcon: Int, defaultIcon: Int,
showText: Boolean = this@ChipProvider.showText,
showIcon: Boolean = this@ChipProvider.showIcon,
onClick: (Any) -> Unit, onClick: (Any) -> Unit,
) { ) {
TasksChip( 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 { fun newTagChip(tag: TagData, onClick: () -> Unit): View {
return newView { return newView {
TasksChip( TasksChip(

@ -2,22 +2,24 @@ package org.tasks.ui
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Bundle
import android.view.ViewGroup 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.CaldavFilter
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.activities.ListPicker import org.tasks.activities.ListPicker
import org.tasks.databinding.ControlSetRemoteListBinding
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class ListFragment : TaskEditControlFragment() { class ListFragment : TaskEditControlFragment() {
private lateinit var chipGroup: ChipGroup
@Inject lateinit var chipProvider: ChipProvider @Inject lateinit var chipProvider: ChipProvider
private lateinit var callback: OnListChanged private lateinit var callback: OnListChanged
@ -31,20 +33,28 @@ class ListFragment : TaskEditControlFragment() {
callback = activity as OnListChanged callback = activity as OnListChanged
} }
override fun createView(savedInstanceState: Bundle?) {
refreshView()
}
private fun setSelected(filter: Filter) { private fun setSelected(filter: Filter) {
viewModel.selectedList = filter viewModel.selectedList.value = filter
refreshView()
callback.onListChanged(filter) callback.onListChanged(filter)
} }
override fun bind(parent: ViewGroup?) = override fun bind(parent: ViewGroup?) =
ControlSetRemoteListBinding.inflate(layoutInflater, parent, true).let { (parent?.findViewById(R.id.compose_view) as ComposeView).apply {
chipGroup = it.chipGroup setContent {
it.root 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 override val icon = R.drawable.ic_list_24px
@ -55,8 +65,10 @@ class ListFragment : TaskEditControlFragment() {
override val isClickable = true override val isClickable = true
override val rootLayout = R.layout.control_set_template_compose
private fun openPicker() = 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) .show(parentFragmentManager, FRAG_TAG_GOOGLE_TASK_LIST_SELECTION)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 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 { companion object {
const val TAG = R.string.TEA_ctrl_google_task_list 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" private const val FRAG_TAG_GOOGLE_TASK_LIST_SELECTION = "frag_tag_google_task_list_selection"

@ -88,7 +88,7 @@ class TaskEditViewModel @Inject constructor(
this.task = task this.task = task
isNew = task.isNew isNew = task.isNew
originalList = list originalList = list
selectedList = list selectedList.value = list
originalLocation = location originalLocation = location
originalTags = tags.toList() originalTags = tags.toList()
selectedTags = ArrayList(tags) selectedTags = ArrayList(tags)
@ -237,7 +237,7 @@ class TaskEditViewModel @Inject constructor(
private lateinit var originalList: Filter private lateinit var originalList: Filter
var selectedList: Filter? = null var selectedList = MutableStateFlow(null as Filter?)
var originalLocation: Location? = null var originalLocation: Location? = null
private set(value) { private set(value) {
@ -301,7 +301,7 @@ class TaskEditViewModel @Inject constructor(
} || } ||
task.elapsedSeconds != elapsedSeconds || task.elapsedSeconds != elapsedSeconds ||
task.estimatedSeconds != estimatedSeconds || task.estimatedSeconds != estimatedSeconds ||
originalList != selectedList || originalList != selectedList.value ||
originalLocation != selectedLocation || originalLocation != selectedLocation ||
originalTags.toHashSet() != selectedTags.toHashSet() || originalTags.toHashSet() != selectedTags.toHashSet() ||
newSubtasks.isNotEmpty() || newSubtasks.isNotEmpty() ||
@ -341,9 +341,9 @@ class TaskEditViewModel @Inject constructor(
taskDao.createNew(task) taskDao.createNew(task)
} }
if (isNew || originalList != selectedList) { if (isNew || originalList != selectedList.value) {
task.parent = 0 task.parent = 0
taskMover.move(listOf(task.id), selectedList!!) taskMover.move(listOf(task.id), selectedList.value!!)
} }
if ((isNew && selectedLocation != null) || originalLocation != selectedLocation) { if ((isNew && selectedLocation != null) || originalLocation != selectedLocation) {
@ -379,15 +379,15 @@ class TaskEditViewModel @Inject constructor(
} }
taskDao.createNew(subtask) taskDao.createNew(subtask)
firebase?.addTask("subtasks") firebase?.addTask("subtasks")
when (selectedList) { when (selectedList.value) {
is GtasksFilter -> { 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.parent = task.id
googleTask.isMoved = true googleTask.isMoved = true
googleTaskDao.insertAndShift(googleTask, false) googleTaskDao.insertAndShift(googleTask, false)
} }
is CaldavFilter -> { 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 subtask.parent = task.id
caldavTask.remoteParent = caldavDao.getRemoteIdForTask(task.id) caldavTask.remoteParent = caldavDao.getRemoteIdForTask(task.id)
taskDao.save(subtask) taskDao.save(subtask)

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.chip.ChipGroup xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/chip_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:chipSpacingVertical="@dimen/chip_spacing"
app:chipSpacingHorizontal="@dimen/chip_spacing" />
Loading…
Cancel
Save