Update chips

* Convert to jetpack compose
* Remove filled/outlined option
pull/1917/head
Alex Baker 2 years ago
parent b7342b770d
commit 9832eef2c6

@ -233,6 +233,8 @@ dependencies {
implementation("androidx.compose.material:material-icons-extended:${Versions.compose}")
releaseCompileOnly("androidx.compose.ui:ui-tooling:${Versions.compose}")
implementation("com.google.accompanist:accompanist-flowlayout:0.24.11-rc")
googleplayImplementation("com.google.firebase:firebase-crashlytics:${Versions.crashlytics}")
googleplayImplementation("com.google.firebase:firebase-analytics:${Versions.analytics}") {
exclude("com.google.android.gms", "play-services-ads-identifier")

@ -57,7 +57,7 @@ class TagsControlSet : TaskEditControlFragment() {
override fun controlId() = TAG
private fun refreshDisplayView() {
viewModel.selectedTags?.let { selectedTags ->
viewModel.selectedTags.let { selectedTags ->
if (selectedTags.isEmpty()) {
chipGroup.visibility = View.GONE
tagsDisplay.visibility = View.VISIBLE
@ -66,13 +66,7 @@ class TagsControlSet : TaskEditControlFragment() {
chipGroup.visibility = View.VISIBLE
chipGroup.removeAllViews()
for (tagData in selectedTags.sortedBy(TagData::name)) {
val chip = chipProvider.newClosableChip(tagData)
chipProvider.apply(chip, tagData)
chip.setOnClickListener { onRowClick() }
chip.setOnCloseIconClickListener {
selectedTags.remove(tagData)
refreshDisplayView()
}
val chip = chipProvider.newTagChip(tagData, onClick = this::onRowClick)
chipGroup.addView(chip)
}
}

@ -6,28 +6,16 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.preferences.Preferences
import org.tasks.ui.ChipProvider
import javax.inject.Inject
@AndroidEntryPoint
class TaskListPreferences : InjectingPreferenceFragment() {
@Inject lateinit var preferences: Preferences
@Inject lateinit var chipProvider: ChipProvider
override fun getPreferenceXml() = R.xml.preferences_task_list
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
findPreference(R.string.p_chip_style).setOnPreferenceChangeListener { _, newValue ->
chipProvider.setStyle(Integer.parseInt(newValue as String))
true
}
findPreference(R.string.p_chip_appearance).setOnPreferenceChangeListener { _, newValue ->
chipProvider.setAppearance(Integer.parseInt(newValue as String))
true
}
val sortGroups = findPreference(R.string.p_disable_sort_groups) as SwitchPreferenceCompat
sortGroups.isChecked = sortGroups.isChecked || preferences.usePagedQueries()
findPreference(R.string.p_use_paged_queries).setOnPreferenceChangeListener { _, value ->

@ -1,135 +0,0 @@
package org.tasks.tasklist;
import android.graphics.Paint;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.chip.Chip;
import com.google.android.material.chip.ChipGroup;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.ui.CheckableImageView;
import org.tasks.data.TaskContainer;
import org.tasks.databinding.SubtaskAdapterRowBodyBinding;
import org.tasks.ui.CheckBoxProvider;
import org.tasks.ui.ChipProvider;
public class SubtaskViewHolder extends RecyclerView.ViewHolder {
private final Callbacks callbacks;
private final DisplayMetrics metrics;
private final ChipProvider chipProvider;
private final CheckBoxProvider checkBoxProvider;
private TaskContainer task;
private final ViewGroup rowBody;
private final TextView nameView;
private final CheckableImageView completeBox;
private final ChipGroup chipGroup;
SubtaskViewHolder(
SubtaskAdapterRowBodyBinding binding,
Callbacks callbacks,
DisplayMetrics metrics,
ChipProvider chipProvider,
CheckBoxProvider checkBoxProvider) {
super(binding.getRoot());
this.callbacks = callbacks;
this.metrics = metrics;
this.chipProvider = chipProvider;
this.checkBoxProvider = checkBoxProvider;
rowBody = binding.rowBody;
nameView = binding.title;
completeBox = binding.completeBox;
chipGroup = binding.chipGroup;
nameView.setOnClickListener(v -> openSubtask());
completeBox.setOnClickListener(v -> onCompleteBoxClick());
ViewGroup view = binding.getRoot();
view.setTag(this);
for (int i = 0; i < view.getChildCount(); i++) {
view.getChildAt(i).setTag(this);
}
}
private float getShiftSize() {
return 20 * metrics.density;
}
private int getIndentSize(int indent) {
return Math.round(indent * getShiftSize());
}
void bindView(TaskContainer task) {
this.task = task;
setIndent(task.indent);
if (task.hasChildren()) {
chipGroup.removeAllViews();
Chip child = chipProvider.newSubtaskChip(task, true);
child.setOnClickListener(v -> callbacks.toggleSubtask(task.getId(), !task.isCollapsed()));
chipGroup.addView(child);
chipGroup.setVisibility(View.VISIBLE);
} else {
chipGroup.setVisibility(View.GONE);
}
nameView.setText(task.getTitle());
setupTitleAndCheckbox();
}
private void setupTitleAndCheckbox() {
if (task.isCompleted()) {
nameView.setEnabled(false);
nameView.setPaintFlags(nameView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
} else {
nameView.setEnabled(!task.isHidden());
nameView.setPaintFlags(nameView.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
completeBox.setChecked(task.isCompleted());
completeBox.setImageDrawable(checkBoxProvider.getCheckBox(task.getTask()));
completeBox.invalidate();
}
private void openSubtask() {
callbacks.openSubtask(task.getTask());
}
private void onCompleteBoxClick() {
if (task == null) {
return;
}
boolean newState = completeBox.isChecked();
if (newState != task.isCompleted()) {
callbacks.complete(task.getTask(), newState);
}
// set check box to actual action item state
setupTitleAndCheckbox();
}
private void setIndent(int indent) {
int indentSize = getIndentSize(indent);
MarginLayoutParams layoutParams = (MarginLayoutParams) rowBody.getLayoutParams();
layoutParams.setMarginStart(indentSize);
rowBody.setLayoutParams(layoutParams);
}
public interface Callbacks {
void openSubtask(Task task);
void toggleSubtask(long taskId, boolean collapsed);
void complete(Task task, boolean completed);
}
}

@ -0,0 +1,112 @@
package org.tasks.tasklist
import android.graphics.Paint
import android.util.DisplayMetrics
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import android.widget.TextView
import androidx.compose.ui.platform.ComposeView
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.ui.CheckableImageView
import org.tasks.data.TaskContainer
import org.tasks.databinding.SubtaskAdapterRowBodyBinding
import org.tasks.ui.CheckBoxProvider
import org.tasks.ui.ChipProvider
import kotlin.math.roundToInt
class SubtaskViewHolder internal constructor(
binding: SubtaskAdapterRowBodyBinding,
private val callbacks: Callbacks,
private val metrics: DisplayMetrics,
private val chipProvider: ChipProvider,
private val checkBoxProvider: CheckBoxProvider
) : RecyclerView.ViewHolder(binding.root) {
private var task: TaskContainer? = null
private val rowBody: ViewGroup
private val nameView: TextView
private val completeBox: CheckableImageView
private val chipGroup: ComposeView
init {
rowBody = binding.rowBody
nameView = binding.title
completeBox = binding.completeBox
chipGroup = binding.chipGroup
nameView.setOnClickListener { v: View? -> openSubtask() }
completeBox.setOnClickListener { v: View? -> onCompleteBoxClick() }
val view: ViewGroup = binding.root
view.tag = this
for (i in 0 until view.childCount) {
view.getChildAt(i).tag = this
}
}
private val shiftSize: Float
get() = 20 * metrics.density
private fun getIndentSize(indent: Int): Int {
return (indent * shiftSize).roundToInt()
}
fun bindView(task: TaskContainer) {
this.task = task
setIndent(task.indent)
chipGroup.setContent {
MdcTheme {
if (task.hasChildren()) {
chipProvider.SubtaskChip(task = task, compact = true) {
callbacks.toggleSubtask(task.id, !task.isCollapsed)
}
}
}
}
nameView.text = task.title
setupTitleAndCheckbox()
}
private fun setupTitleAndCheckbox() {
if (task!!.isCompleted) {
nameView.isEnabled = false
nameView.paintFlags = nameView.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
} else {
nameView.isEnabled = !task!!.isHidden
nameView.paintFlags = nameView.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}
completeBox.isChecked = task!!.isCompleted
completeBox.setImageDrawable(checkBoxProvider.getCheckBox(task!!.getTask()))
completeBox.invalidate()
}
private fun openSubtask() {
callbacks.openSubtask(task!!.getTask())
}
private fun onCompleteBoxClick() {
if (task == null) {
return
}
val newState = completeBox.isChecked
if (newState != task!!.isCompleted) {
callbacks.complete(task!!.getTask(), newState)
}
// set check box to actual action item state
setupTitleAndCheckbox()
}
private fun setIndent(indent: Int) {
val indentSize = getIndentSize(indent)
val layoutParams = rowBody.layoutParams as MarginLayoutParams
layoutParams.marginStart = indentSize
rowBody.layoutParams = layoutParams
}
interface Callbacks {
fun openSubtask(task: Task)
fun toggleSubtask(taskId: Long, collapsed: Boolean)
fun complete(task: Task, completed: Boolean)
}
}

@ -7,8 +7,11 @@ import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import android.widget.TextView
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.unit.dp
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.chip.ChipGroup
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
import com.todoroo.astrid.api.Filter
@ -61,7 +64,7 @@ class TaskViewHolder internal constructor(
private val completeBox: CheckableImageView = binding.completeBox.apply {
setOnClickListener { onCompleteBoxClick() }
}
private val chipGroup: ChipGroup = binding.chipGroup
private val chipGroup: ComposeView = binding.chipGroup
lateinit var task: TaskContainer
@ -211,21 +214,25 @@ class TaskViewHolder internal constructor(
}
private fun setupChips(filter: Filter, sortByStartDate: Boolean) {
val chips = chipProvider.getChips(filter, indent > 0, task, sortByStartDate)
if (chips.isEmpty()) {
chipGroup.visibility = View.GONE
} else {
chipGroup.removeAllViews()
for (chip in chips) {
chip.setOnClickListener { v: View -> onChipClick(v) }
chipGroup.addView(chip)
chipGroup.setContent {
MdcTheme {
FlowRow(
mainAxisSpacing = 4.dp,
crossAxisSpacing = 4.dp,
) {
chipProvider.Chips(
filter = filter,
isSubtask = indent > 0,
task = task,
sortByStartDate = sortByStartDate,
onClick = this::onChipClick
)
}
}
chipGroup.visibility = View.VISIBLE
}
}
private fun onChipClick(v: View) {
val tag = v.tag
private fun onChipClick(tag: Any) {
if (tag is Filter) {
callback.onClick(tag)
} else if (tag is TaskContainer) {

@ -1,11 +1,24 @@
package org.tasks.ui
import android.app.Activity
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.view.View
import androidx.annotation.DrawableRes
import androidx.core.content.res.ResourcesCompat
import com.google.android.material.chip.Chip
import com.todoroo.andlib.utility.AndroidUtilities
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.size
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView
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.android.material.composethemeadapter.MdcTheme
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter
@ -22,92 +35,133 @@ import org.tasks.filters.PlaceFilter
import org.tasks.locale.Locale
import org.tasks.preferences.Preferences
import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons
import org.tasks.themes.CustomIcons.getIconResId
import org.tasks.themes.ThemeColor
import org.tasks.time.DateTimeUtils.startOfDay
import java.time.format.FormatStyle
import java.util.*
import javax.inject.Inject
class ChipProvider @Inject constructor(
private val activity: Activity,
private val inventory: Inventory,
private val lists: ChipListCache,
private val preferences: Preferences,
private val colorProvider: ColorProvider,
private val locale: Locale) {
private val iconAlpha: Int = (255 * ResourcesCompat.getFloat(activity.resources, R.dimen.alpha_secondary)).toInt()
private var filled = false
private var showIcon = false
private var showText = false
fun setStyle(style: Int) {
filled = style == 1
}
private val activity: Activity,
private val inventory: Inventory,
private val lists: ChipListCache,
private val preferences: Preferences,
private val colorProvider: ColorProvider,
private val locale: Locale
) {
private val showIcon: Boolean
private val showText: Boolean
fun setAppearance(appearance: Int) {
init {
val appearance = preferences.getIntegerFromString(R.string.p_chip_appearance, 0)
showText = appearance != 2
showIcon = appearance != 1
}
private fun newStartDateChip(task: TaskContainer, compact: Boolean, timeOnly: Boolean): Chip? {
val chip = newChip(task)
@Composable
private fun StartDateChip(task: TaskContainer, compact: Boolean, timeOnly: Boolean) {
val text = if (timeOnly
&& task.sortGroup?.startOfDay() == task.startDate.startOfDay()
&& preferences.showGroupHeaders()
&& task.sortGroup?.startOfDay() == task.startDate.startOfDay()
&& preferences.showGroupHeaders()
) {
task.startDate
.takeIf { Task.hasDueTime(it) }
?.let { DateUtilities.getTimeString(activity, it.toDateTime()) }
?: return null
.takeIf { Task.hasDueTime(it) }
?.let { DateUtilities.getTimeString(activity, it.toDateTime()) }
?: return
} else {
DateUtilities.getRelativeDateTime(
activity,
task.startDate,
locale.locale,
if (compact) FormatStyle.SHORT else FormatStyle.MEDIUM,
false,
false
activity,
task.startDate,
locale.locale,
if (compact) FormatStyle.SHORT else FormatStyle.MEDIUM,
false,
false
)
}
apply(chip, R.drawable.ic_pending_actions_24px, text, 0, showText = true, showIcon = true)
return chip
TasksChip(
R.drawable.ic_pending_actions_24px,
text,
0,
showText = true,
showIcon = true,
onClick = {},
)
}
fun newSubtaskChip(task: TaskContainer, compact: Boolean): Chip {
val chip = newChip(task)
apply(
chip,
if (task.isCollapsed) R.drawable.ic_keyboard_arrow_down_black_24dp else R.drawable.ic_keyboard_arrow_up_black_24dp,
if (compact) locale.formatNumber(task.children) else activity
.resources
.getQuantityString(R.plurals.subtask_count, task.children, task.children),
0,
showText = true,
showIcon = true)
return chip
@Composable
fun SubtaskChip(
task: TaskContainer,
compact: Boolean,
onClick: () -> Unit,
) {
TasksChip(
if (task.isCollapsed) R.drawable.ic_keyboard_arrow_down_black_24dp else R.drawable.ic_keyboard_arrow_up_black_24dp,
if (compact) locale.formatNumber(task.children) else activity
.resources
.getQuantityString(R.plurals.subtask_count, task.children, task.children),
0,
showText = true,
showIcon = true,
onClick = onClick,
)
}
@Composable
fun FilterChip(
filter: Filter,
defaultIcon: Int,
onClick: (Any) -> Unit,
) {
TasksChip(
getIcon(filter.icon, defaultIcon),
filter.listingTitle,
filter.tint,
showText,
showIcon,
onClick = { onClick(filter) },
)
}
fun getChips(filter: Filter?, isSubtask: Boolean, task: TaskContainer, sortByStartDate: Boolean): List<Chip> {
AndroidUtilities.assertMainThread()
val chips = ArrayList<Chip>()
@Composable
fun Chips(
filter: Filter?,
isSubtask: Boolean,
task: TaskContainer,
sortByStartDate: Boolean,
onClick: (Any) -> Unit,
) {
if (task.hasChildren() && preferences.showSubtaskChip) {
chips.add(newSubtaskChip(task, !showText))
SubtaskChip(task, !showText, onClick = { onClick(task) })
}
if (task.isHidden && preferences.showStartDateChip) {
newStartDateChip(task, !showText, sortByStartDate)?.let(chips::add)
StartDateChip(task, !showText, sortByStartDate)
}
if (task.hasLocation() && filter !is PlaceFilter && preferences.showPlaceChip) {
val location = task.getLocation()
newChip(PlaceFilter(location.place), R.drawable.ic_outline_place_24px)?.let(chips::add)
FilterChip(
filter = PlaceFilter(location.place),
defaultIcon = R.drawable.ic_outline_place_24px,
onClick = onClick
)
}
if (!isSubtask && preferences.showListChip) {
if (!isNullOrEmpty(task.googleTaskList) && filter !is GtasksFilter) {
newChip(lists.getGoogleTaskList(task.googleTaskList), R.drawable.ic_list_24px)
?.let(chips::add)
lists.getGoogleTaskList(task.googleTaskList)?.let { list ->
FilterChip(
filter = list,
defaultIcon = R.drawable.ic_list_24px,
onClick = onClick
)
}
} else if (!isNullOrEmpty(task.caldav) && filter !is CaldavFilter) {
newChip(lists.getCaldavList(task.caldav), R.drawable.ic_list_24px)?.let(chips::add)
lists.getCaldavList(task.caldav)?.let { list ->
FilterChip(
filter = list,
defaultIcon = R.drawable.ic_list_24px,
onClick = onClick
)
}
}
}
val tagString = task.tagsString
@ -117,91 +171,66 @@ class ChipProvider @Inject constructor(
tags.remove(filter.uuid)
}
tags.mapNotNull(lists::getTag)
.sortedBy(TagFilter::listingTitle)
.map { newChip(it, R.drawable.ic_outline_label_24px)!! }
.let(chips::addAll)
.sortedBy(TagFilter::listingTitle)
.forEach {
FilterChip(
filter = it,
defaultIcon = R.drawable.ic_outline_label_24px,
onClick = onClick
)
}
}
return chips
}
fun apply(chip: Chip, tagData: TagData) {
apply(
chip,
getIcon(tagData.getIcon()!!, R.drawable.ic_outline_label_24px),
tagData.name,
tagData.getColor()!!,
showText = true,
showIcon = true)
fun newListChip(filter: Filter, defIcon: Int, onClick: () -> Unit) = newView {
TasksChip(
getIcon(filter.icon, defIcon),
filter.listingTitle,
filter.tint,
showText = true,
showIcon = true,
onClick = onClick,
)
}
private fun newChip(filter: Filter?, defIcon: Int): Chip? =
newChip(filter, defIcon, showText, showIcon)
fun newChip(filter: Filter?, defIcon: Int, showText: Boolean, showIcon: Boolean): Chip? {
if (filter == null) {
return null
fun newTagChip(tag: TagData, onClick: () -> Unit): View {
return newView {
TasksChip(
getIcon(tag.getIcon()!!, R.drawable.ic_outline_label_24px),
tag.name,
tag.getColor()!!,
showText = true,
showIcon = true,
onClick = onClick,
)
}
val chip = newChip(filter)
apply(chip, getIcon(filter.icon, defIcon), filter.listingTitle, filter.tint, showText, showIcon)
return chip
}
fun newClosableChip(tag: Any?): Chip {
val chip = chip
chip.isCloseIconVisible = true
chip.tag = tag
return chip
}
private fun newChip(tag: Any?): Chip {
val chip = chip
chip.tag = tag
return chip
}
private val chip: Chip
get() = activity
.layoutInflater
.inflate(if (filled) R.layout.chip_filled else R.layout.chip_outlined, null) as Chip
private fun apply(
chip: Chip,
@DrawableRes icon: Int?,
name: String?,
theme: Int,
showText: Boolean,
showIcon: Boolean) {
if (showText) {
chip.text = name
chip.iconEndPadding = 0f
} else {
chip.text = null
chip.contentDescription = name
chip.textStartPadding = 0f
chip.chipEndPadding = 0f
}
val themeColor = getColor(theme)
if (themeColor != null) {
val primaryColor = themeColor.primaryColor
val primaryColorSL = ColorStateList(arrayOf(intArrayOf()), intArrayOf(primaryColor))
if (filled) {
val colorOnPrimary = themeColor.colorOnPrimary
val colorOnPrimarySL = ColorStateList(arrayOf(intArrayOf()), intArrayOf(colorOnPrimary))
chip.chipBackgroundColor = primaryColorSL
chip.setTextColor(colorOnPrimary)
chip.closeIconTint = colorOnPrimarySL
chip.chipIconTint = colorOnPrimarySL
} else {
chip.setTextColor(primaryColor)
chip.closeIconTint = primaryColorSL
chip.chipIconTint = primaryColorSL
chip.chipStrokeColor = primaryColorSL
private fun newView(content: @Composable () -> Unit): View = ComposeView(activity).apply {
setContent {
MdcTheme {
content()
}
}
if (showIcon && icon != null) {
chip.setChipIconResource(icon)
chip.chipDrawable.alpha = iconAlpha
}
}
@Composable
fun TasksChip(
@DrawableRes icon: Int?,
name: String?,
theme: Int,
showText: Boolean,
showIcon: Boolean,
onClick: () -> Unit,
) {
val color =
getColor(theme)?.primaryColor ?: activity.getColor(R.color.default_chip_background)
TasksChip(
color = Color(color),
text = if (showText) name else null,
icon = if (showIcon && icon != null) icon else null,
onClick = onClick,
)
}
@DrawableRes
@ -216,9 +245,97 @@ class ChipProvider @Inject constructor(
}
return null
}
}
init {
setStyle(preferences.getIntegerFromString(R.string.p_chip_style, 0))
setAppearance(preferences.getIntegerFromString(R.string.p_chip_appearance, 0))
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun TasksChip(
text: String? = null,
icon: Int? = null,
color: Color,
onClick: () -> Unit = {},
) {
CompositionLocalProvider(
LocalMinimumTouchTargetEnforcement provides false
) {
Chip(
onClick = onClick,
border = BorderStroke(1.dp, color = color),
leadingIcon = {
if (text != null) {
ChipIcon(iconRes = icon)
}
},
modifier = Modifier.defaultMinSize(minHeight = 26.dp),
colors = ChipDefaults.chipColors(
backgroundColor = color.copy(alpha = .1f),
contentColor = MaterialTheme.colors.onSurface
),
) {
if (text == null) {
ChipIcon(iconRes = icon)
}
text?.let {
Text(
text = it,
style = MaterialTheme.typography.caption,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
}
}
}
@Composable
fun ChipIcon(iconRes: Int?) {
iconRes?.let {
Icon(
painter = painterResource(id = iconRes),
contentDescription = null,
modifier = Modifier.size(18.dp)
)
}
}
@ExperimentalComposeUiApi
@Preview(showBackground = true)
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
fun TasksChipIconAndTextPreview() {
MdcTheme {
TasksChip(
text = "Home",
icon = getIconResId(CustomIcons.LABEL),
color = Color.Red,
)
}
}
@ExperimentalComposeUiApi
@Preview(showBackground = true)
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
fun TasksChipIconPreview() {
MdcTheme {
TasksChip(
text = null,
icon = getIconResId(CustomIcons.LABEL),
color = Color.Red,
)
}
}
@ExperimentalComposeUiApi
@Preview(showBackground = true)
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
fun TasksChipTextPreview() {
MdcTheme {
TasksChip(
text = "Home",
icon = null,
color = Color.Red,
)
}
}
}

@ -77,12 +77,11 @@ class ListFragment : TaskEditControlFragment() {
private fun refreshView() {
chipGroup.removeAllViews()
val chip = chipProvider.newChip(
val chip = chipProvider.newListChip(
viewModel.selectedList!!,
R.drawable.ic_list_24px,
showText = true,
showIcon = true)!!
chip.setOnClickListener { openPicker() }
this::openPicker
)
chipGroup.addView(chip)
}

@ -70,7 +70,7 @@ class SubtaskControlSet : TaskEditControlFragment(), SubtaskViewHolder.Callbacks
override fun createView(savedInstanceState: Bundle?) {
viewModel.newSubtasks.forEach { addSubtask(it) }
recyclerAdapter = SubtasksRecyclerAdapter(activity, chipProvider, checkBoxProvider, this)
viewModel.task?.let {
viewModel.task.let {
if (it.id > 0) {
recyclerAdapter.submitList(listViewModel.value)
listViewModel.setFilter(Filter("subtasks", getQueryTemplate(it)))

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.chip.Chip style="@style/ChipStyle.Filled" />

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.chip.Chip style="@style/ChipStyle.Outlined" />

@ -13,7 +13,7 @@
android:paddingStart="0dp"
android:paddingEnd="@dimen/keyline_first" />
<com.google.android.material.chip.ChipGroup
<androidx.compose.ui.platform.ComposeView
android:id="@+id/chip_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

@ -78,17 +78,14 @@
android:visibility="gone"
tools:text="Task description" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/chip_group"
android:layout_below="@id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/task_list_item_spacing"
android:layout_marginStart="@dimen/keyline_content_inset"
android:layout_marginEnd="@dimen/keyline_first"
android:visibility="gone"
app:chipSpacingHorizontal="@dimen/chip_spacing"
app:chipSpacingVertical="@dimen/chip_spacing" />
<androidx.compose.ui.platform.ComposeView
android:id="@+id/chip_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/description"
android:layout_marginTop="@dimen/task_list_item_spacing"
android:layout_marginStart="@dimen/keyline_content_inset"
android:layout_marginEnd="@dimen/keyline_first" />
</RelativeLayout>

@ -557,9 +557,6 @@
<string name="chip_appearance_text_and_icon">النص والايقونة</string>
<string name="navigation_drawer">درج التنقل</string>
<string name="chips">رقائق</string>
<string name="chip_style_filled">ممتلئ</string>
<string name="chip_style_outlined">مخطط</string>
<string name="chip_style">نمط الرقاقة</string>
<string name="back">عودة</string>
<string name="upgrade_blurb_2">لقد أمضيت آلاف الساعات في العمل على \"مهام\" ، وأنا أنشر جميع التعليمات البرمجية المصدر عبر الإنترنت مجانًا. من أجل دعم عملي ، ولذلك تتطلب بعض الميزات اشتراكًا</string>
<string name="invalid_username_or_password">خطأ في اسم المستخدم أو كلمة مرور</string>

@ -586,11 +586,8 @@
<string name="map_theme">Тема на картата</string>
<string name="widget_do_nothing">Без действие</string>
<string name="wearable_notifications_summary">Показване на известия на носимото устройство</string>
<string name="chip_style_outlined">Очертан</string>
<string name="color_wheel">Цветно колело</string>
<string name="chip_style">Стил на индикаторите в списъка</string>
<string name="notification_troubleshooting_summary">Докоснете тук, ако имате проблеми с известията</string>
<string name="chip_style_filled">Запълнен</string>
<plurals name="reminder_hours">
<item quantity="one">Час</item>
<item quantity="other">Часове</item>

@ -485,8 +485,6 @@
<string name="desaturate_colors_summary_off">Barvy nebudou jemnější u tmavých motivů vzhledu</string>
<string name="desaturate_colors_summary_on">Barvy budou jemnější u tmavých motivů vzhledu</string>
<string name="desaturate_colors">Zjemnit barvy</string>
<string name="chip_style_filled">Vyplněný</string>
<string name="chip_style_outlined">Jen obrys</string>
<string name="action_new_task">Nový úkol</string>
<string name="caldav_home_set_not_found">Domovská sada nenalezena</string>
<string name="list_separator_with_space">", "</string>
@ -622,7 +620,6 @@
<string name="date_picker_multiple">Vícenásobné</string>
<string name="chip_appearance">Vzhled známek</string>
<string name="chips">Známky</string>
<string name="chip_style">Styl známek</string>
<string name="your_subscription_expired">Platnost vašeho předplatného skončila. Pokud chcete službu dále využívat, obnovte ho.</string>
<string name="map_theme_use_app_theme">Stejný vzhled jako aplikace</string>
<string name="account_not_included">Nezahrnuto v předplatném typu „Zaplaťte kolik chcete“</string>

@ -153,9 +153,6 @@
<string name="desaturate_colors">Afmættede farver</string>
<string name="chip_appearance">Boble-udseende</string>
<string name="chips">Bobler</string>
<string name="chip_style_filled">Udfyldt</string>
<string name="chip_style_outlined">Omrids</string>
<string name="chip_style">Boble-stil</string>
<string name="back">Tilbage</string>
<string name="upgrade_blurb_2">Jeg har brugt tusindvis af arbejdstimer på Tasks, og jeg udgiver hele kildekoden gratis online. For at støtte mit arbejde kræver nogle funktioner et abonnement</string>
<string name="upgrade_blurb_1">Hej! Jeg hedder Alex. Jeg er den selvstændige udvikler bag Tasks</string>

@ -469,9 +469,6 @@
<string name="upgrade_blurb_1">Hallo! Mein Name ist Alex. Ich bin der unabhängige Entwickler hinter Tasks</string>
<string name="upgrade_blurb_2">Ich habe Tausende von Stunden mit der Arbeit an Tasks verbracht und veröffentliche den gesamten Quellcode kostenlos online. Um meine Arbeit zu unterstützen, erfordern einige Funktionen ein Abonnement</string>
<string name="back">Zurück</string>
<string name="chip_style">Stil der Marken</string>
<string name="chip_style_outlined">mit Kontur</string>
<string name="chip_style_filled">mit Füllung</string>
<string name="chips">Marken</string>
<string name="chip_appearance">Aussehen der Marken</string>
<string name="desaturate_colors">Entsättigte Farben</string>

@ -468,9 +468,6 @@
<string name="upgrade_blurb_1">¡Hola! Me llamo Alex. Soy el desarrollador independiente detrás de Tasks</string>
<string name="upgrade_blurb_2">He invertido miles de horas en trabajar en Tasks, y todo el código fuente lo publico gratuitamente en internet. Para apoyar mi trabajo, determinadas funciones necesita suscripción</string>
<string name="back">Volver</string>
<string name="chip_style">Estilo de los distintivos</string>
<string name="chip_style_outlined">Contorneado</string>
<string name="chip_style_filled">Lleno</string>
<string name="chips">Distintivos</string>
<string name="chip_appearance">Apariencia de los distintivos</string>
<string name="desaturate_colors">Colores desaturados</string>

@ -468,9 +468,6 @@
<string name="upgrade_blurb_1">Kaixo! Nire izana Alex da. Ni naiz Tasks aplikazioaren garatzaile independentea</string>
<string name="upgrade_blurb_2">Milaka ordu eman ditut Tasks aplikazioan lanean, eta kode guztia argitaratzen dut doan. Nire lana babesteko ezaugarri batzuk harpidetza eskatzen dute</string>
<string name="back">Atzera</string>
<string name="chip_style">Txip estiloa</string>
<string name="chip_style_outlined">Ingerada</string>
<string name="chip_style_filled">Betea</string>
<string name="chips">Txipak</string>
<string name="chip_appearance">Txip itxura</string>
<string name="desaturate_colors">Desasetu koloreak</string>

@ -378,10 +378,7 @@
<string name="desaturate_colors_summary_off">Värejä ei muuteta tummiin teemoihin</string>
<string name="desaturate_colors_summary_on">Värit näytetään harmaampina tummissa teemoissa</string>
<string name="chip_appearance">Lappujen sisältö</string>
<string name="chip_style">Lappujen ulkoasu</string>
<string name="chips">Lisätietolaput</string>
<string name="chip_style_filled">Yksivärinen</string>
<string name="chip_style_outlined">Ympäröity</string>
<string name="back">Takaisin</string>
<string name="color_wheel">Väriympyrä</string>
<string name="invalid_username_or_password">Virheellinen käyttäjätunnus tai salasana</string>

@ -463,9 +463,6 @@
<string name="upgrade_blurb_1">Salut ! Je m\'appelle Alex. Je suis le développeur indépendant à l\'origine de Tasks</string>
<string name="upgrade_blurb_2">J\'ai passé des milliers d\'heures à travailler sur Tasks, et je publie gratuitement tout le code source en ligne. Afin de soutenir mon travail, certaines fonctionnalités nécessitent un abonnement</string>
<string name="back">Retour</string>
<string name="chip_style">Style d\'étiquette</string>
<string name="chip_style_outlined">Entouré</string>
<string name="chip_style_filled">Rempli</string>
<string name="chips">Étiquettes</string>
<string name="chip_appearance">Apparence de l\'étiquette</string>
<string name="desaturate_colors">Désaturer les couleurs</string>

@ -554,8 +554,6 @@
<string name="troubleshooting">Soporte técnico</string>
<string name="more_settings">Máis opcións</string>
<string name="color_wheel">Roda de cores</string>
<string name="chip_style_outlined">Marcado</string>
<string name="chip_style_filled">Cuberto</string>
<string name="navigation_drawer">Xestionar a navegación</string>
<string name="chip_appearance_text_and_icon">Texto e iconas</string>
<string name="chip_appearance_text_only">Só texto</string>

@ -176,9 +176,6 @@
<string name="chip_appearance_text_and_icon">Tekst i ikona</string>
<string name="chip_appearance">Izgled čipa</string>
<string name="chips">Čipovi</string>
<string name="chip_style_filled">Ispunjeno</string>
<string name="chip_style_outlined">Konturno</string>
<string name="chip_style">Stil čipa</string>
<string name="next_saturday">Sljedeća subota</string>
<string name="next_friday">Sljedeći petak</string>
<string name="next_thursday">Sljedeći četvrtak</string>

@ -466,9 +466,6 @@
<string name="upgrade_blurb_1">Szia! Alexnek hívnak. Én vagyok a Tasks mögött álló független fejlesztő</string>
<string name="upgrade_blurb_2">Több ezer órát dolgoztam a Tasks appon, és a teljes forráskódot ingyenesen elérhetővé tettem. A munkám támogatása érdekében néhány funkció eléréséhez előfizetés szükséges</string>
<string name="back">Vissza</string>
<string name="chip_style">Jelölő stílusa</string>
<string name="chip_style_outlined">Körvonal</string>
<string name="chip_style_filled">Tele</string>
<string name="chips">Jelölő</string>
<string name="chip_appearance">Jelölő kinézete</string>
<string name="desaturate_colors">Fakó színek</string>

@ -392,8 +392,6 @@
<string name="hide_unused_tags">Sembunyikan tag yang tidak digunakan</string>
<string name="navigation_drawer">Panel navigasi</string>
<string name="chip_appearance">Penampilan chip</string>
<string name="chip_style_filled">Dipenuhi</string>
<string name="chip_style_outlined">Skematik</string>
<string name="back">Kembali</string>
<string name="invalid_username_or_password">Nama pengguna dan kata sandi salah</string>
<string name="davx5_selection_description">Sinkronkan tugas Anda dengan aplikasi DAVx⁵</string>
@ -568,7 +566,6 @@
<string name="desaturate_colors_summary_on">Warna akan dikurangi/desaturasi dalam tema gelap</string>
<string name="desaturate_colors">Pengurangan/desaturasi warna</string>
<string name="chips">Chip</string>
<string name="chip_style">Gaya chip</string>
<string name="color_wheel">Roda warna</string>
<string name="wearable_notifications_summary">Tampilkan notifikasi pada alat wearable Anda</string>
<string name="wearable_notifications">Notifikasi pada alat wearable</string>

@ -438,8 +438,6 @@
<string name="places">Luoghi</string>
<string name="desaturate_colors_summary_on">I colori perderanno saturazione nei temi scuri</string>
<string name="desaturate_colors_summary_off">I colori non perderanno saturazione nei temi scuri</string>
<string name="chip_style_filled">Pieno</string>
<string name="chip_style_outlined">Contornato</string>
<string name="back">Indietro</string>
<string name="upgrade_blurb_2">Ho dedicato a Tasks migliaia di ore di lavoro, pubblicando tutto il codice sorgente online, gratuitamente. Per supportare il mio lavoro alcune funzioni richiedono un abbonamento</string>
<string name="upgrade_blurb_1">Ciao! Mi chiamo Alex. Sono lo sviluppatore indipendente di Tasks.</string>
@ -491,7 +489,6 @@
<string name="subtasks">Attività secondaria</string>
<string name="TEA_timer_controls">Timer</string>
<string name="chip_appearance">Aspetto icona</string>
<string name="chip_style">Stile icona</string>
<string name="chips">Icone</string>
<string name="custom_filter_not">NON</string>
<string name="custom_filter_or">O</string>

@ -591,9 +591,6 @@
<string name="desaturate_colors">האפרת צבעים</string>
<string name="chip_appearance">מראה הצ׳יפ</string>
<string name="chips">צ׳יפים</string>
<string name="chip_style">סגנון צ׳יפ</string>
<string name="chip_style_filled">מלא</string>
<string name="chip_style_outlined">עם קו מתאר</string>
<string name="account">חשבון</string>
<string name="device_settings">הגדרות המכשיר</string>
<string name="last_backup_never">אף פעם</string>

@ -463,10 +463,7 @@
<string name="desaturate_colors_summary_off">다크 테마 사용 시 채도를 낮추지 않습니다</string>
<string name="desaturate_colors">저채도 색상</string>
<string name="chip_appearance">칩 모양</string>
<string name="chip_style_outlined">테두리 보임</string>
<string name="chips"></string>
<string name="chip_style_filled">배경색 채움</string>
<string name="chip_style">칩 스타일</string>
<string name="upgrade_blurb_2">저는 Tasks 개발에 엄청나게 많은 시간을 쏟고 있으며, 모든 소스코드를 웹에 무상으로 공개하고 있습니다. 저의 작업을 후원하기 위해 일부 기능은 구독이 필요합니다</string>
<string name="color_wheel">색상환</string>
<string name="invalid_username_or_password">유효하지 않은 사용자명과 비밀번호</string>

@ -680,9 +680,6 @@
<string name="desaturate_colors">Blankios spalvos</string>
<string name="chip_appearance">Skrituliuko išvaizda</string>
<string name="chips">Skrituliukai</string>
<string name="chip_style_filled">Užpildytas</string>
<string name="chip_style_outlined">Tuščiaviduris</string>
<string name="chip_style">Skrituliuko stilius</string>
<string name="widget_id">Valdiklio ID: %d</string>
<string name="add_filter">Pridėti filtrą</string>
<string name="add_tags">Pridėti etiketes</string>

@ -508,12 +508,9 @@
<string name="desaturate_colors">Gi farger mindre metning</string>
<string name="chip_appearance">Flisutseende</string>
<string name="chips">Flis</string>
<string name="chip_style_outlined">Omrisset</string>
<string name="chip_style">Flisstil</string>
<string name="upgrade_blurb_2">Jeg har brukt tusenvis av timer på å jobbe med Tasks, og jeg offentliggjør all kildekoden på nettet gratis. For å støtte mitt arbeid krever noen funksjoner et abonnement</string>
<string name="upgrade_blurb_1">Hei, jeg heter Alex. Jeg er den uavhengige utvikleren bak Tasks</string>
<string name="caldav_account_description">Krever en konto med en CalDAV-tjenestetilbyder, eller en selvdrevet tjener. Finn en tjenestetilbyder ved å besøke tasks.org/caldav</string>
<string name="chip_style_filled">Fylt</string>
<string name="wearable_notifications_summary">Vis merknader på din ikledbare</string>
<string name="wearable_notifications">Ikledbare merknader</string>
<string name="filter_eisenhower_box_4">Ikke viktig og haster ikke</string>

@ -10,6 +10,5 @@
<color name="text_secondary">@color/white_60</color>
<color name="text_tertiary">@color/white_38</color>
<color name="overdue">@color/error_color_material_dark</color>
<color name="chip_text">@color/white_72</color>
<color name="divider">@color/white_12</color>
</resources>

@ -468,9 +468,6 @@
<string name="upgrade_blurb_1">Hallo! Mijn naam is Alex. Ik ben de onafhankelijke ontwikkelaar achter Tasks</string>
<string name="upgrade_blurb_2">Ik heb duizenden uren gewerkt aan Tasks en publiceer alle broncode gratis online. Om mijn werk te steunen, is voor sommige functies een abonnement nodig</string>
<string name="back">Terug</string>
<string name="chip_style">Merkstijl</string>
<string name="chip_style_outlined">Omlijnd</string>
<string name="chip_style_filled">Gevuld</string>
<string name="chips">Vormgeving</string>
<string name="chip_appearance">Uiterlijk van chip</string>
<string name="desaturate_colors">Minder verzadigde kleuren</string>

@ -479,9 +479,6 @@
<string name="upgrade_blurb_1">Cześć! Mam na imię Alex. Jestem niezależnym deweloperem stojącym za Tasks</string>
<string name="upgrade_blurb_2">Spędziłem tysiące godzin pracując nad Tasks i publikuję cały kod źródłowy online za darmo. Aby wesprzeć moją pracę, niektóre funkcję wymagają subskrypcji</string>
<string name="back">Wstecz</string>
<string name="chip_style">Styl chipa</string>
<string name="chip_style_outlined">Obrysowany</string>
<string name="chip_style_filled">Wypełniony</string>
<string name="chips">Chipy</string>
<string name="chip_appearance">Wygląd chipów</string>
<string name="desaturate_colors">Desaturuj kolory</string>

@ -440,9 +440,6 @@
<string name="desaturate_colors">Dessaturar cores</string>
<string name="chip_appearance">Aparência da Pastilha</string>
<string name="chips">Pastilha</string>
<string name="chip_style_filled">Preenchido</string>
<string name="chip_style_outlined">Contornado</string>
<string name="chip_style">Estilo da pastilha</string>
<string name="back">Voltar</string>
<string name="upgrade_blurb_2">Eu investi centenas de horas trabalhando no Tasks, e eu publico todo o código-fonte online de graça. Para apoiar meu trabalho, algumas funcionalidades precisam de um plano de assinatura</string>
<string name="upgrade_blurb_1">Olá! Meu nome é Alex e eu sou o desenvolvedor independente por trás do Tasks</string>

@ -498,9 +498,6 @@
<string name="desaturate_colors">Dessaturar cores</string>
<string name="chip_appearance">Aparência da ficha</string>
<string name="chips">Fichas</string>
<string name="chip_style_filled">Preenchida</string>
<string name="chip_style_outlined">Linha de contorno</string>
<string name="chip_style">Estilo de ficha</string>
<string name="back">Voltar</string>
<string name="upgrade_blurb_2">Eu investi centenas de horas a trabalhar no Tasks e publico todo o código-fonte na Internet gratuitamente. Para apoiar o meu trabalho, algumas funcionalidades precisam de uma subscrição</string>
<string name="upgrade_blurb_1">Olá! O meu nome é Alex e sou o programador independente por trás do Tasks</string>

@ -598,9 +598,6 @@
<string name="desaturate_colors">Desaturați culorile</string>
<string name="chip_appearance">Aspect fragmentat</string>
<string name="chips">Fragmente</string>
<string name="chip_style_filled">Încărcat</string>
<string name="chip_style_outlined">Conturat</string>
<string name="chip_style">Stil fragmentat</string>
<string name="back">Înapoi</string>
<string name="upgrade_blurb_2">Am petrecut mii de ore lucrând la Tasks și am publicat tot codul sursă online gratuit. Pentru a-mi susține munca, unele caracteristici necesită un abonament</string>
<string name="upgrade_blurb_1">Bună, mă numesc Alex. Sunt dezvoltatorul independent din spatele Tasks</string>

@ -484,9 +484,6 @@
<string name="upgrade_blurb_1">Привет! Меня зовут Алекс. Я - независимый разработчик, стоящий за программой Tasks</string>
<string name="upgrade_blurb_2">Я потратил тысячи часов, работая над Tasks, и я публикую весь исходный код онлайн, бесплатно. Для того, чтобы поддержать мою работу, некоторые функциональности требуют подписки</string>
<string name="back">Назад</string>
<string name="chip_style">Стиль индикаторов</string>
<string name="chip_style_outlined">Оконтуренный</string>
<string name="chip_style_filled">Заполненный</string>
<string name="chips">Индикаторы</string>
<string name="chip_appearance">Внешний вид индикаторов</string>
<string name="desaturate_colors">Уменьшить насыщенность цветов</string>

@ -407,8 +407,6 @@
<string name="EPr_reset_preferences_warning">මනාපයන් පෙරනිමි අගයන් වෙත යළි පිහිටුවනු ඇත</string>
<string name="EPr_reset_preferences">මනාපයන් යළි පිහිටුවන්න</string>
<string name="chips">චිප්ස්</string>
<string name="chip_style_filled">පුරවා ඇති</string>
<string name="chip_style">චිප් විලාසය</string>
<string name="color_wheel">වර්ණ රෝදය</string>
<string name="wearable_notifications_summary">ඔබගේ පැළඳිය හැකි උපාංගයන්හි දැනුම්දීම් පෙන්වන්න</string>
<string name="wearable_notifications">පැළඳිය හැකි උපාංග දැනුම්දීම්</string>
@ -688,7 +686,6 @@
<string name="navigation_drawer">මෙනුව</string>
<string name="place_settings">ස්ථාන සැකසුම්</string>
<string name="desaturate_colors_summary_on">අඳුරු තේමාවන් වලදී වර්ණ අසංතෘප්ත වේ</string>
<string name="chip_style_outlined">භාහිර රේඛාවන් ඇති</string>
<string name="TFE_workingOn">ක්‍රියාත්මකව පවතින කාර්යයන්</string>
<string name="repeat_snackbar">%1$s, %2$s සඳහා නැවත සකස් කරන ලදි</string>
<string name="CFC_importance_text">අවම වශයෙන් ප්‍රමුඛතාවය \?</string>

@ -449,7 +449,6 @@
<string name="chip_appearance_text_and_icon">Text och ikon</string>
<string name="place_settings">Plats inställningar</string>
<string name="places">Platser</string>
<string name="chip_style_filled">Fylld</string>
<string name="back">Tillbaka</string>
<string name="color_wheel">Färghjul</string>
<string name="invalid_username_or_password">Ogiltigt användarnamn eller lösenord</string>
@ -604,8 +603,6 @@
<string name="desaturate_colors">Avmatta färger</string>
<string name="chip_appearance">Utseende av flis</string>
<string name="chips">Pommes frites</string>
<string name="chip_style_outlined">Beskrivs på</string>
<string name="chip_style">Chip stil</string>
<string name="upgrade_blurb_1">Hej! Jag heter Alex. Jag är den oberoende utvecklaren bakom Tasks</string>
<string name="disable_battery_optimizations">Inaktivera batterioptimeringar</string>
<string name="notification_troubleshooting_summary">Tryck här om du har problem med aviseringar</string>

@ -201,9 +201,6 @@
<string name="desaturate_colors_summary_on">இருண்ட கருப்பொருள்களில் நிறங்கள் தேய்மானம் செய்யப்படும்</string>
<string name="desaturate_colors">தேய்மான நிறங்கள்</string>
<string name="chip_appearance">சிப் தோற்றம்</string>
<string name="chip_style_filled">நிரப்ப</string>
<string name="chip_style_outlined">கோடிட்டுக் காட்டப்பட்டுள்ளது</string>
<string name="chip_style">சிப் பாணி</string>
<string name="back">மீண்டும்</string>
<string name="upgrade_blurb_2">நான் பணிகளில் ஆயிரக்கணக்கான மணிநேரங்களை செலவிட்டேன், மேலும் மூலக் குறியீடு அனைத்தையும் ஆன்லைனில் இலவசமாக வெளியிடுகிறேன். எனது பணியை ஆதரிக்க சில அம்சங்களுக்கு சந்தா தேவை</string>
<string name="upgrade_blurb_1">வணக்கம்! என் பெயர் அலெக்ஸ். பணிகளுக்குப் பின்னால் உள்ள சுயாதீன டெவலப்பர் நான்</string>

@ -154,9 +154,6 @@
<string name="desaturate_colors">สีที่อิ่มตัว</string>
<string name="chip_appearance">ลักษณะชิป</string>
<string name="chips">เศษ</string>
<string name="chip_style_filled">เต็มแล้ว</string>
<string name="chip_style_outlined">เค้าร่าง</string>
<string name="chip_style">สไตล์ชิป</string>
<string name="back">กลับ</string>
<string name="upgrade_blurb_2">ฉันใช้เวลาหลายพันชั่วโมงในการทํางานและฉันเผยแพร่ซอร์สโค้ดทั้งหมดออนไลน์ฟรี เพื่อสนับสนุนงานของฉันคุณสมบัติบางอย่างต้องมีการสมัครสมาชิก</string>
<string name="upgrade_blurb_1">สวัสดี! ฉันชื่ออเล็กซ์ ฉันเป็นนักพัฒนาอิสระที่อยู่เบื้องหลังงาน</string>

@ -468,9 +468,6 @@
<string name="upgrade_blurb_1">Hey! Ben Alex. Tasks\'ın arkasındaki bağımsız geliştiriciyim</string>
<string name="upgrade_blurb_2">Binlerce saatimi Tasks\'ta çalışarak geçirdim, kaynak kodun tümünü çevrim içi olarak ücretsiz yayımladım. Çalışmamı desteklemek için bazı özellikler abonelik gerektirir</string>
<string name="back">Geri</string>
<string name="chip_style">Yonga biçimi</string>
<string name="chip_style_outlined">Dış çizgi</string>
<string name="chip_style_filled">Tok</string>
<string name="chips">Yongalar</string>
<string name="chip_appearance">Yonga görünümü</string>
<string name="desaturate_colors">Renkleri solgunlaştır</string>

@ -498,9 +498,6 @@
<string name="places">Місця</string>
<string name="chip_appearance">Вигляд індикаторів списків</string>
<string name="chips">Індикатори списків</string>
<string name="chip_style_outlined">Контур</string>
<string name="chip_style_filled">Заповнений</string>
<string name="chip_style">Стиль індикаторів списків</string>
<string name="back">Назад</string>
<string name="upgrade_blurb_2">Я витратив тисячі годин, працюючи над Tasks, і я публікую весь код онлайн безоплатно. Щоб підтримати мою роботу, деякі функції потребують підписки</string>
<string name="upgrade_blurb_1">Привіт! Моє ім\'я Алекс. Я - незалежний розробник Tasks</string>

@ -220,9 +220,6 @@
<string name="desaturate_colors">Khử bão hoà màu sắc</string>
<string name="chip_appearance">Ngoại hình nhãn</string>
<string name="chips">Nhãn</string>
<string name="chip_style_filled">Lấp đầy</string>
<string name="chip_style_outlined">Tô đường viền</string>
<string name="chip_style">Kiểu nhãn</string>
<string name="back">Quay lại</string>
<string name="upgrade_blurb_2">Tôi đã dành hàng nghìn tiếng cho việc hoàn thiện Tasks, và tôi xuất bản tất cả mã nguồn trên mạng miễn phí. Để hỗ trợ công sức của tôi, một số tính năng yêu cầu đăng ký</string>
<string name="upgrade_blurb_1">Xin chào! Tên tôi là Alex. Tôi là nhà phát triển độc lập đứng sau Tasks</string>

@ -458,9 +458,6 @@
<string name="upgrade_blurb_1">你好!我叫 Alex是 Tasks 背后的独立开发者</string>
<string name="upgrade_blurb_2">我已经花了数千个小时用于开发 Tasks并且在网上免费发布了所有源代码。 为了支持我的工作,某些功能需要订阅</string>
<string name="back">返回</string>
<string name="chip_style">纸片样式</string>
<string name="chip_style_outlined">描边</string>
<string name="chip_style_filled">填充</string>
<string name="chips">纸片</string>
<string name="chip_appearance">纸片外观</string>
<string name="desaturate_colors">降低颜色饱和度</string>

@ -213,16 +213,6 @@
<item>@drawable/ic_decsync</item>
</array>
<string-array name="chip_styles">
<item>@string/chip_style_outlined</item>
<item>@string/chip_style_filled</item>
</string-array>
<string-array name="chip_style_values">
<item>0</item>
<item>1</item>
</string-array>
<string-array name="chip_appearance">
<item>@string/chip_appearance_text_and_icon</item>
<item>@string/chip_appearance_text_only</item>

@ -145,10 +145,8 @@
<color name="drawer_color_selected">@color/drawer_background_light_selected</color>
<color name="text_secondary">@color/black_60</color>
<color name="text_tertiary">@color/black_38</color>
<color name="chip_text">@color/black_100</color>
<color name="divider">@color/black_12</color>
<color name="default_chip_background">@color/grey_300</color>
<color name="default_chip_text_color">@color/black_87</color>
</resources>

@ -392,7 +392,6 @@
<string name="p_disable_sort_groups">disable_sort_groups</string>
<string name="p_wearable_notifications">wearable_notifications</string>
<string name="p_notified_oauth_error">notified_oauth_error_%1$s_%2$s</string>
<string name="p_chip_style">chip_style</string>
<string name="p_chip_appearance">chip_appearance</string>
<string name="p_subtask_chips">chips_subtask</string>
<string name="p_start_date_chip">chips_start_date</string>

@ -557,9 +557,6 @@ File %1$s contained %2$s.\n\n
<string name="upgrade_blurb_1">Hi! My name is Alex. I am the independent developer behind Tasks</string>
<string name="upgrade_blurb_2">I have spent thousands of hours working on Tasks, and I publish all of the source code online for free. In order to support my work some features require a subscription</string>
<string name="back">Back</string>
<string name="chip_style">Chip style</string>
<string name="chip_style_outlined">Outlined</string>
<string name="chip_style_filled">Filled</string>
<string name="chips">Chips</string>
<string name="chip_appearance">Chip appearance</string>
<string name="desaturate_colors">Desaturate colors</string>

@ -188,39 +188,6 @@
<item name="android:layout_height">24dp</item>
</style>
<style name="ChipStyle" parent="Base.Widget.MaterialComponents.Chip">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:maxLines">1</item>
<item name="android:ellipsize">end</item>
<item name="chipIconSize">@dimen/chip_icon_size</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Small</item>
<item name="chipMinHeight">@dimen/chip_min_height</item>
<item name="closeIconVisible">false</item>
<item name="ensureMinTouchTargetSize">false</item>
<item name="chipSurfaceColor">@android:color/transparent</item>
<item name="iconStartPadding">5dp</item>
<item name="iconEndPadding">2dp</item>
<item name="closeIconEndPadding">5dp</item>
<item name="chipEndPadding">4dp</item>
</style>
<style name="ChipStyle.Outlined">
<item name="chipStrokeWidth">@dimen/chip_stroke</item>
<item name="chipBackgroundColor">@android:color/transparent</item>
<item name="android:textColor">@color/chip_text</item>
<item name="chipIconTint">@color/chip_text</item>
<item name="closeIconTint">@color/chip_text</item>
<item name="chipStrokeColor">@color/text_secondary</item>
</style>
<style name="ChipStyle.Filled">
<item name="chipBackgroundColor">@color/default_chip_background</item>
<item name="android:textColor">@color/default_chip_text_color</item>
<item name="chipIconTint">@color/default_chip_text_color</item>
<item name="closeIconTint">@color/default_chip_text_color</item>
</style>
<style name="OutlineButton" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:textColor">@color/button_accent_text</item>
<item name="backgroundTint">@color/button_accent_background</item>

@ -83,14 +83,6 @@
<PreferenceCategory android:title="@string/chips">
<ListPreference
android:defaultValue="0"
android:entries="@array/chip_styles"
android:entryValues="@array/chip_style_values"
android:key="@string/p_chip_style"
android:summary="%s"
android:title="@string/chip_style" />
<ListPreference
android:defaultValue="0"
android:entries="@array/chip_appearance"

@ -553,7 +553,10 @@
+| +--- androidx.activity:activity-ktx:1.4.0 (*)
+| +--- androidx.compose.ui:ui:1.0.1 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
+\--- androidx.compose.material:material-icons-extended:1.2.0-rc01
+ +--- androidx.compose.material:material-icons-core:1.2.0-rc01 (*)
+ +--- androidx.compose.runtime:runtime:1.2.0-rc01 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
++--- androidx.compose.material:material-icons-extended:1.2.0-rc01
+| +--- androidx.compose.material:material-icons-core:1.2.0-rc01 (*)
+| +--- androidx.compose.runtime:runtime:1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
+\--- com.google.accompanist:accompanist-flowlayout:0.24.11-rc
+ +--- androidx.compose.foundation:foundation:1.2.0-rc01 (*)
+ \--- androidx.compose.ui:ui-util:1.2.0-rc01 (*)

@ -689,7 +689,10 @@
+| +--- androidx.activity:activity-ktx:1.4.0 (*)
+| +--- androidx.compose.ui:ui:1.0.1 -> 1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 -> 1.6.21 (*)
+\--- androidx.compose.material:material-icons-extended:1.2.0-rc01
+ +--- androidx.compose.material:material-icons-core:1.2.0-rc01 (*)
+ +--- androidx.compose.runtime:runtime:1.2.0-rc01 (*)
+ \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
++--- androidx.compose.material:material-icons-extended:1.2.0-rc01
+| +--- androidx.compose.material:material-icons-core:1.2.0-rc01 (*)
+| +--- androidx.compose.runtime:runtime:1.2.0-rc01 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
+\--- com.google.accompanist:accompanist-flowlayout:0.24.11-rc
+ +--- androidx.compose.foundation:foundation:1.2.0-rc01 (*)
+ \--- androidx.compose.ui:ui-util:1.2.0-rc01 (*)

Loading…
Cancel
Save