diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt index 2664c67ab..afb5ef6e3 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt @@ -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) { diff --git a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt index b92e34f17..7c9eec504 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt +++ b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt @@ -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, diff --git a/app/src/main/java/org/tasks/ui/ChipProvider.kt b/app/src/main/java/org/tasks/ui/ChipProvider.kt index c843a24a0..37b642131 100644 --- a/app/src/main/java/org/tasks/ui/ChipProvider.kt +++ b/app/src/main/java/org/tasks/ui/ChipProvider.kt @@ -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 { diff --git a/app/src/main/java/org/tasks/ui/ListFragment.kt b/app/src/main/java/org/tasks/ui/ListFragment.kt index 1ffda92b4..bcc206815 100644 --- a/app/src/main/java/org/tasks/ui/ListFragment.kt +++ b/app/src/main/java/org/tasks/ui/ListFragment.kt @@ -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) diff --git a/app/src/main/java/org/tasks/ui/PriorityControlSet.kt b/app/src/main/java/org/tasks/ui/PriorityControlSet.kt index b55dff0dd..f832138c0 100644 --- a/app/src/main/java/org/tasks/ui/PriorityControlSet.kt +++ b/app/src/main/java/org/tasks/ui/PriorityControlSet.kt @@ -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 { diff --git a/app/src/main/java/org/tasks/ui/TaskEditControlComposeFragment.kt b/app/src/main/java/org/tasks/ui/TaskEditControlComposeFragment.kt new file mode 100644 index 000000000..5427c06f2 --- /dev/null +++ b/app/src/main/java/org/tasks/ui/TaskEditControlComposeFragment.kt @@ -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 +} \ No newline at end of file