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.content.Intent
import android.view.ViewGroup
import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
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 org.tasks.R
import org.tasks.data.TagData
import org.tasks.tags.TagPickerActivity
import org.tasks.ui.ChipGroup
import org.tasks.ui.ChipProvider
import org.tasks.ui.TaskEditControlFragment
import org.tasks.ui.TaskEditControlComposeFragment
import javax.inject.Inject
@AndroidEntryPoint
class TagsControlSet : TaskEditControlFragment() {
class TagsControlSet : TaskEditControlComposeFragment() {
@Inject lateinit var chipProvider: ChipProvider
override fun onRowClick() {
@ -32,31 +30,23 @@ class TagsControlSet : TaskEditControlFragment() {
startActivityForResult(intent, REQUEST_TAG_PICKER_ACTIVITY)
}
override fun bind(parent: ViewGroup?) =
(parent?.findViewById(R.id.compose_view) as ComposeView).apply {
setContent {
MdcTheme {
val tags = viewModel.selectedTags.collectAsState()
FlowRow(
mainAxisSpacing = 4.dp,
crossAxisSpacing = 4.dp,
modifier = Modifier.padding(top = 20.dp, bottom = 20.dp, end = 16.dp)
) {
if (tags.value.isEmpty()) {
Text(
text = stringResource(id = R.string.add_tags),
style = MaterialTheme.typography.body1,
color = colorResource(id = R.color.text_tertiary),
)
} else {
tags.value.sortedBy(TagData::name).forEach { tag ->
chipProvider.TagChip(tag, this@TagsControlSet::onRowClick)
}
}
}
@Composable
override fun Body() {
val tags = viewModel.selectedTags.collectAsState()
ChipGroup(modifier = Modifier.padding(top = 20.dp, bottom = 20.dp, end = 16.dp)) {
if (tags.value.isEmpty()) {
Text(
text = stringResource(id = R.string.add_tags),
style = MaterialTheme.typography.body1,
color = colorResource(id = R.color.text_tertiary),
)
} else {
tags.value.sortedBy(TagData::name).forEach { tag ->
chipProvider.TagChip(tag, this@TagsControlSet::onRowClick)
}
}
}
}
override val isClickable = true
@ -64,8 +54,6 @@ class TagsControlSet : TaskEditControlFragment() {
override fun controlId() = TAG
override val rootLayout = R.layout.control_set_template_compose
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_TAG_PICKER_ACTIVITY) {
if (resultCode == Activity.RESULT_OK && data != null) {

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

@ -16,6 +16,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.google.accompanist.flowlayout.FlowRow
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.DateUtilities
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
fun ChipIcon(iconRes: Int?) {
iconRes?.let {

@ -2,14 +2,11 @@ package org.tasks.ui
import android.app.Activity
import android.content.Intent
import android.view.ViewGroup
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
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
@ -19,27 +16,23 @@ import org.tasks.activities.ListPicker
import javax.inject.Inject
@AndroidEntryPoint
class ListFragment : TaskEditControlFragment() {
class ListFragment : TaskEditControlComposeFragment() {
@Inject lateinit var chipProvider: ChipProvider
override fun bind(parent: ViewGroup?) =
(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() }
)
}
}
}
@Composable
override fun Body() {
val list = viewModel.selectedList.collectAsState()
val selectedList = list.value ?: return
ChipGroup(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
@ -49,8 +42,6 @@ class ListFragment : TaskEditControlFragment() {
override val isClickable = true
override val rootLayout = R.layout.control_set_template_compose
private fun openPicker() =
ListPicker.newListPicker(viewModel.selectedList.value!!, this, REQUEST_CODE_SELECT_LIST)
.show(parentFragmentManager, FRAG_TAG_GOOGLE_TASK_LIST_SELECTION)

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