Add compose task edit fragment, chip group

pull/1917/head
Alex Baker 2 years ago
parent 2137bf8004
commit 43e787ad0c

@ -2,28 +2,26 @@ package com.todoroo.astrid.tags
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.view.ViewGroup
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.accompanist.flowlayout.FlowRow
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.data.TagData import org.tasks.data.TagData
import org.tasks.tags.TagPickerActivity import org.tasks.tags.TagPickerActivity
import org.tasks.ui.ChipGroup
import org.tasks.ui.ChipProvider import org.tasks.ui.ChipProvider
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlComposeFragment
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class TagsControlSet : TaskEditControlFragment() { class TagsControlSet : TaskEditControlComposeFragment() {
@Inject lateinit var chipProvider: ChipProvider @Inject lateinit var chipProvider: ChipProvider
override fun onRowClick() { override fun onRowClick() {
@ -32,16 +30,10 @@ class TagsControlSet : TaskEditControlFragment() {
startActivityForResult(intent, REQUEST_TAG_PICKER_ACTIVITY) startActivityForResult(intent, REQUEST_TAG_PICKER_ACTIVITY)
} }
override fun bind(parent: ViewGroup?) = @Composable
(parent?.findViewById(R.id.compose_view) as ComposeView).apply { override fun Body() {
setContent {
MdcTheme {
val tags = viewModel.selectedTags.collectAsState() val tags = viewModel.selectedTags.collectAsState()
FlowRow( ChipGroup(modifier = Modifier.padding(top = 20.dp, bottom = 20.dp, end = 16.dp)) {
mainAxisSpacing = 4.dp,
crossAxisSpacing = 4.dp,
modifier = Modifier.padding(top = 20.dp, bottom = 20.dp, end = 16.dp)
) {
if (tags.value.isEmpty()) { if (tags.value.isEmpty()) {
Text( Text(
text = stringResource(id = R.string.add_tags), text = stringResource(id = R.string.add_tags),
@ -55,8 +47,6 @@ class TagsControlSet : TaskEditControlFragment() {
} }
} }
} }
}
}
override val isClickable = true override val isClickable = true
@ -64,8 +54,6 @@ class TagsControlSet : TaskEditControlFragment() {
override fun controlId() = TAG override fun controlId() = TAG
override val rootLayout = R.layout.control_set_template_compose
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_TAG_PICKER_ACTIVITY) { if (requestCode == REQUEST_TAG_PICKER_ACTIVITY) {
if (resultCode == Activity.RESULT_OK && data != null) { if (resultCode == Activity.RESULT_OK && data != null) {

@ -7,10 +7,11 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams import android.view.ViewGroup.MarginLayoutParams
import android.widget.TextView import android.widget.TextView
import androidx.compose.foundation.layout.padding
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.accompanist.flowlayout.FlowRow
import com.google.android.material.composethemeadapter.MdcTheme import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.andlib.utility.DateUtilities.now import com.todoroo.andlib.utility.DateUtilities.now
@ -27,6 +28,7 @@ import org.tasks.markdown.Markdown
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils.startOfDay import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.ui.CheckBoxProvider import org.tasks.ui.CheckBoxProvider
import org.tasks.ui.ChipGroup
import org.tasks.ui.ChipProvider import org.tasks.ui.ChipProvider
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.* import java.util.*
@ -216,10 +218,7 @@ class TaskViewHolder internal constructor(
private fun setupChips(filter: Filter, sortByStartDate: Boolean) { private fun setupChips(filter: Filter, sortByStartDate: Boolean) {
chipGroup.setContent { chipGroup.setContent {
MdcTheme { MdcTheme {
FlowRow( ChipGroup(modifier = Modifier.padding(end = 16.dp)) {
mainAxisSpacing = 4.dp,
crossAxisSpacing = 4.dp,
) {
chipProvider.Chips( chipProvider.Chips(
filter = filter, filter = filter,
isSubtask = indent > 0, isSubtask = indent > 0,

@ -16,6 +16,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.accompanist.flowlayout.FlowRow
import com.google.android.material.composethemeadapter.MdcTheme import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
@ -267,6 +268,17 @@ fun TasksChip(
} }
} }
@Composable
fun ChipGroup(modifier: Modifier = Modifier, content: @Composable () -> Unit) {
FlowRow(
mainAxisSpacing = 4.dp,
crossAxisSpacing = 4.dp,
modifier = modifier,
) {
content()
}
}
@Composable @Composable
fun ChipIcon(iconRes: Int?) { fun ChipIcon(iconRes: Int?) {
iconRes?.let { iconRes?.let {

@ -2,14 +2,11 @@ package org.tasks.ui
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.view.ViewGroup
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.unit.dp 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
@ -19,16 +16,14 @@ import org.tasks.activities.ListPicker
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class ListFragment : TaskEditControlFragment() { class ListFragment : TaskEditControlComposeFragment() {
@Inject lateinit var chipProvider: ChipProvider @Inject lateinit var chipProvider: ChipProvider
override fun bind(parent: ViewGroup?) = @Composable
(parent?.findViewById(R.id.compose_view) as ComposeView).apply { override fun Body() {
setContent {
MdcTheme {
val list = viewModel.selectedList.collectAsState() val list = viewModel.selectedList.collectAsState()
val selectedList = list.value ?: return@MdcTheme val selectedList = list.value ?: return
FlowRow(modifier = Modifier.padding(vertical = 20.dp)) { ChipGroup(modifier = Modifier.padding(vertical = 20.dp)) {
chipProvider.FilterChip( chipProvider.FilterChip(
filter = selectedList, filter = selectedList,
defaultIcon = R.drawable.ic_list_24px, defaultIcon = R.drawable.ic_list_24px,
@ -38,8 +33,6 @@ class ListFragment : TaskEditControlFragment() {
) )
} }
} }
}
}
override val icon = R.drawable.ic_list_24px override val icon = R.drawable.ic_list_24px
@ -49,8 +42,6 @@ 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.value!!, 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)

@ -1,7 +1,6 @@
package org.tasks.ui package org.tasks.ui
import android.content.res.Configuration import android.content.res.Configuration
import android.view.ViewGroup
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
import androidx.compose.material.RadioButton import androidx.compose.material.RadioButton
@ -12,7 +11,6 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -24,24 +22,18 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
@AndroidEntryPoint @AndroidEntryPoint
class PriorityControlSet : TaskEditControlFragment() { class PriorityControlSet : TaskEditControlComposeFragment() {
override fun bind(parent: ViewGroup?) = @Composable
(parent?.findViewById(R.id.compose_view) as ComposeView).apply { override fun Body() {
setContent {
MdcTheme {
val priority = viewModel.priority.collectAsState() val priority = viewModel.priority.collectAsState()
PriorityRow( PriorityRow(
selected = priority.value, selected = priority.value,
onClick = { viewModel.priority.value = it }) onClick = { viewModel.priority.value = it })
} }
}
}
override val icon = R.drawable.ic_outline_flag_24px override val icon = R.drawable.ic_outline_flag_24px
override val rootLayout = R.layout.control_set_template_compose
override fun controlId() = TAG override fun controlId() = TAG
companion object { companion object {

@ -0,0 +1,24 @@
package org.tasks.ui
import android.view.ViewGroup
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView
import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R
abstract class TaskEditControlComposeFragment : TaskEditControlFragment() {
override fun bind(parent: ViewGroup?) =
(parent?.findViewById(R.id.compose_view) as ComposeView).apply {
setContent {
MdcTheme {
Body()
}
}
}
@Composable
protected abstract fun Body()
override val rootLayout = R.layout.control_set_template_compose
}
Loading…
Cancel
Save