From 9832eef2c68e0fb863e11ab828aab606ce5cc3f9 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 19 Jun 2022 11:41:56 -0500 Subject: [PATCH] Update chips * Convert to jetpack compose * Remove filled/outlined option --- app/build.gradle.kts | 2 + .../com/todoroo/astrid/tags/TagsControlSet.kt | 10 +- .../fragments/TaskListPreferences.kt | 12 - .../org/tasks/tasklist/SubtaskViewHolder.java | 135 ------ .../org/tasks/tasklist/SubtaskViewHolder.kt | 112 +++++ .../java/org/tasks/tasklist/TaskViewHolder.kt | 33 +- .../main/java/org/tasks/ui/ChipProvider.kt | 389 ++++++++++++------ .../main/java/org/tasks/ui/ListFragment.kt | 7 +- .../java/org/tasks/ui/SubtaskControlSet.kt | 2 +- app/src/main/res/layout/chip_filled.xml | 2 - app/src/main/res/layout/chip_outlined.xml | 2 - .../res/layout/subtask_adapter_row_body.xml | 2 +- app/src/main/res/layout/task_adapter_row.xml | 19 +- app/src/main/res/values-ar/strings.xml | 3 - app/src/main/res/values-bg-rBG/strings.xml | 3 - app/src/main/res/values-cs/strings.xml | 3 - app/src/main/res/values-da/strings.xml | 3 - app/src/main/res/values-de/strings.xml | 3 - app/src/main/res/values-es/strings.xml | 3 - app/src/main/res/values-eu/strings.xml | 3 - app/src/main/res/values-fi/strings.xml | 3 - app/src/main/res/values-fr/strings.xml | 3 - app/src/main/res/values-gl/strings.xml | 2 - app/src/main/res/values-hr/strings.xml | 3 - app/src/main/res/values-hu/strings.xml | 3 - app/src/main/res/values-id/strings.xml | 3 - app/src/main/res/values-it/strings.xml | 3 - app/src/main/res/values-iw/strings.xml | 3 - app/src/main/res/values-ko/strings.xml | 3 - app/src/main/res/values-lt/strings.xml | 3 - app/src/main/res/values-nb/strings.xml | 3 - app/src/main/res/values-night/colors.xml | 1 - app/src/main/res/values-nl/strings.xml | 3 - app/src/main/res/values-pl/strings.xml | 3 - app/src/main/res/values-pt-rBR/strings.xml | 3 - app/src/main/res/values-pt/strings.xml | 3 - app/src/main/res/values-ro/strings.xml | 3 - app/src/main/res/values-ru/strings.xml | 3 - app/src/main/res/values-si/strings.xml | 3 - app/src/main/res/values-sv/strings.xml | 3 - app/src/main/res/values-ta/strings.xml | 3 - app/src/main/res/values-th/strings.xml | 3 - app/src/main/res/values-tr/strings.xml | 3 - app/src/main/res/values-uk/strings.xml | 3 - app/src/main/res/values-vi/strings.xml | 3 - app/src/main/res/values-zh-rCN/strings.xml | 3 - app/src/main/res/values/arrays.xml | 10 - app/src/main/res/values/colors.xml | 2 - app/src/main/res/values/keys.xml | 1 - app/src/main/res/values/strings.xml | 3 - app/src/main/res/values/styles.xml | 33 -- .../main/res/xml/preferences_task_list.xml | 8 - deps_fdroid.txt | 11 +- deps_googleplay.txt | 11 +- 54 files changed, 416 insertions(+), 486 deletions(-) delete mode 100644 app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java create mode 100644 app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.kt delete mode 100644 app/src/main/res/layout/chip_filled.xml delete mode 100644 app/src/main/res/layout/chip_outlined.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 156379841..f9b8b2039 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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") 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 a7c826856..c9f761d5a 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt @@ -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) } } diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskListPreferences.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskListPreferences.kt index 056f5a78f..bcbd9c883 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskListPreferences.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskListPreferences.kt @@ -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 -> diff --git a/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java b/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java deleted file mode 100644 index 4c0be2db6..000000000 --- a/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java +++ /dev/null @@ -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); - } -} diff --git a/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.kt b/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.kt new file mode 100644 index 000000000..4b2b125df --- /dev/null +++ b/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.kt @@ -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) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt index abde59993..b92e34f17 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt +++ b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt @@ -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) { diff --git a/app/src/main/java/org/tasks/ui/ChipProvider.kt b/app/src/main/java/org/tasks/ui/ChipProvider.kt index d760b6947..2f5e4b495 100644 --- a/app/src/main/java/org/tasks/ui/ChipProvider.kt +++ b/app/src/main/java/org/tasks/ui/ChipProvider.kt @@ -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 { - AndroidUtilities.assertMainThread() - val chips = ArrayList() + @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, + ) } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/tasks/ui/ListFragment.kt b/app/src/main/java/org/tasks/ui/ListFragment.kt index 732290d22..3685eafb7 100644 --- a/app/src/main/java/org/tasks/ui/ListFragment.kt +++ b/app/src/main/java/org/tasks/ui/ListFragment.kt @@ -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) } diff --git a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt index 17bf7353f..251b7bbf9 100644 --- a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt +++ b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt @@ -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))) diff --git a/app/src/main/res/layout/chip_filled.xml b/app/src/main/res/layout/chip_filled.xml deleted file mode 100644 index 5bb701234..000000000 --- a/app/src/main/res/layout/chip_filled.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/app/src/main/res/layout/chip_outlined.xml b/app/src/main/res/layout/chip_outlined.xml deleted file mode 100644 index a13135424..000000000 --- a/app/src/main/res/layout/chip_outlined.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/app/src/main/res/layout/subtask_adapter_row_body.xml b/app/src/main/res/layout/subtask_adapter_row_body.xml index f909e972f..a06375c6d 100644 --- a/app/src/main/res/layout/subtask_adapter_row_body.xml +++ b/app/src/main/res/layout/subtask_adapter_row_body.xml @@ -13,7 +13,7 @@ android:paddingStart="0dp" android:paddingEnd="@dimen/keyline_first" /> - - + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index cd6868219..5b3af988a 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -557,9 +557,6 @@ النص والايقونة درج التنقل رقائق - ممتلئ - مخطط - نمط الرقاقة عودة لقد أمضيت آلاف الساعات في العمل على \"مهام\" ، وأنا أنشر جميع التعليمات البرمجية المصدر عبر الإنترنت مجانًا. من أجل دعم عملي ، ولذلك تتطلب بعض الميزات اشتراكًا خطأ في اسم المستخدم أو كلمة مرور diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 67ee69eb4..d7546b97e 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -586,11 +586,8 @@ Тема на картата Без действие Показване на известия на носимото устройство - Очертан Цветно колело - Стил на индикаторите в списъка Докоснете тук, ако имате проблеми с известията - Запълнен Час Часове diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7b7bd659f..b1bfa5e27 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -485,8 +485,6 @@ Barvy nebudou jemnější u tmavých motivů vzhledu Barvy budou jemnější u tmavých motivů vzhledu Zjemnit barvy - Vyplněný - Jen obrys Nový úkol Domovská sada nenalezena ", " @@ -622,7 +620,6 @@ Vícenásobné Vzhled známek Známky - Styl známek Platnost vašeho předplatného skončila. Pokud chcete službu dále využívat, obnovte ho. Stejný vzhled jako aplikace Nezahrnuto v předplatném typu „Zaplaťte kolik chcete“ diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 83e2aa969..dbbf3eed4 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -153,9 +153,6 @@ Afmættede farver Boble-udseende Bobler - Udfyldt - Omrids - Boble-stil Tilbage 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 Hej! Jeg hedder Alex. Jeg er den selvstændige udvikler bag Tasks diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8ae40d948..0faef3281 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -469,9 +469,6 @@ Hallo! Mein Name ist Alex. Ich bin der unabhängige Entwickler hinter Tasks 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 Zurück - Stil der Marken - mit Kontur - mit Füllung Marken Aussehen der Marken Entsättigte Farben diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6e3138b88..9947d0afd 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -468,9 +468,6 @@ ¡Hola! Me llamo Alex. Soy el desarrollador independiente detrás de Tasks 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 Volver - Estilo de los distintivos - Contorneado - Lleno Distintivos Apariencia de los distintivos Colores desaturados diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 092be1769..07536d450 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -468,9 +468,6 @@ Kaixo! Nire izana Alex da. Ni naiz Tasks aplikazioaren garatzaile independentea Milaka ordu eman ditut Tasks aplikazioan lanean, eta kode guztia argitaratzen dut doan. Nire lana babesteko ezaugarri batzuk harpidetza eskatzen dute Atzera - Txip estiloa - Ingerada - Betea Txipak Txip itxura Desasetu koloreak diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index e9ac33239..944be918c 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -378,10 +378,7 @@ Värejä ei muuteta tummiin teemoihin Värit näytetään harmaampina tummissa teemoissa Lappujen sisältö - Lappujen ulkoasu Lisätietolaput - Yksivärinen - Ympäröity Takaisin Väriympyrä Virheellinen käyttäjätunnus tai salasana diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 479c6b9a1..80c20ceaa 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -463,9 +463,6 @@ Salut ! Je m\'appelle Alex. Je suis le développeur indépendant à l\'origine de Tasks 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 Retour - Style d\'étiquette - Entouré - Rempli Étiquettes Apparence de l\'étiquette Désaturer les couleurs diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 4bbfcba37..70476f36e 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -554,8 +554,6 @@ Soporte técnico Máis opcións Roda de cores - Marcado - Cuberto Xestionar a navegación Texto e iconas Só texto diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 48a58f835..99be9674a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -176,9 +176,6 @@ Tekst i ikona Izgled čipa Čipovi - Ispunjeno - Konturno - Stil čipa Sljedeća subota Sljedeći petak Sljedeći četvrtak diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index eb21c2f9e..183e3b24b 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -466,9 +466,6 @@ Szia! Alexnek hívnak. Én vagyok a Tasks mögött álló független fejlesztő 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 Vissza - Jelölő stílusa - Körvonal - Tele Jelölő Jelölő kinézete Fakó színek diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index e178d2152..8ebf9b398 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -392,8 +392,6 @@ Sembunyikan tag yang tidak digunakan Panel navigasi Penampilan chip - Dipenuhi - Skematik Kembali Nama pengguna dan kata sandi salah Sinkronkan tugas Anda dengan aplikasi DAVx⁵ @@ -568,7 +566,6 @@ Warna akan dikurangi/desaturasi dalam tema gelap Pengurangan/desaturasi warna Chip - Gaya chip Roda warna Tampilkan notifikasi pada alat wearable Anda Notifikasi pada alat wearable diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c4419c744..8961ef211 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -438,8 +438,6 @@ Luoghi I colori perderanno saturazione nei temi scuri I colori non perderanno saturazione nei temi scuri - Pieno - Contornato Indietro 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 Ciao! Mi chiamo Alex. Sono lo sviluppatore indipendente di Tasks. @@ -491,7 +489,6 @@ Attività secondaria Timer Aspetto icona - Stile icona Icone NON O diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 3a82907fe..5483195ae 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -591,9 +591,6 @@ האפרת צבעים מראה הצ׳יפ צ׳יפים - סגנון צ׳יפ - מלא - עם קו מתאר חשבון הגדרות המכשיר אף פעם diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 0313f5d92..c7da690c0 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -463,10 +463,7 @@ 다크 테마 사용 시 채도를 낮추지 않습니다 저채도 색상 칩 모양 - 테두리 보임 - 배경색 채움 - 칩 스타일 저는 Tasks 개발에 엄청나게 많은 시간을 쏟고 있으며, 모든 소스코드를 웹에 무상으로 공개하고 있습니다. 저의 작업을 후원하기 위해 일부 기능은 구독이 필요합니다 색상환 유효하지 않은 사용자명과 비밀번호 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 6984bef29..5f7b24778 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -680,9 +680,6 @@ Blankios spalvos Skrituliuko išvaizda Skrituliukai - Užpildytas - Tuščiaviduris - Skrituliuko stilius Valdiklio ID: %d Pridėti filtrą Pridėti etiketes diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 6115c774f..7f3465dc9 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -508,12 +508,9 @@ Gi farger mindre metning Flisutseende Flis - Omrisset - Flisstil 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 Hei, jeg heter Alex. Jeg er den uavhengige utvikleren bak Tasks Krever en konto med en CalDAV-tjenestetilbyder, eller en selvdrevet tjener. Finn en tjenestetilbyder ved å besøke tasks.org/caldav - Fylt Vis merknader på din ikledbare Ikledbare merknader Ikke viktig og haster ikke diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 9697f228c..498b38a9e 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -10,6 +10,5 @@ @color/white_60 @color/white_38 @color/error_color_material_dark - @color/white_72 @color/white_12 \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 44834d9b8..99ad31051 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -468,9 +468,6 @@ Hallo! Mijn naam is Alex. Ik ben de onafhankelijke ontwikkelaar achter Tasks 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 Terug - Merkstijl - Omlijnd - Gevuld Vormgeving Uiterlijk van chip Minder verzadigde kleuren diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e1e57bd61..0318ecfd4 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -479,9 +479,6 @@ Cześć! Mam na imię Alex. Jestem niezależnym deweloperem stojącym za Tasks 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 Wstecz - Styl chipa - Obrysowany - Wypełniony Chipy Wygląd chipów Desaturuj kolory diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index cd389a93a..ef6e1869f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -440,9 +440,6 @@ Dessaturar cores Aparência da Pastilha Pastilha - Preenchido - Contornado - Estilo da pastilha Voltar 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 Olá! Meu nome é Alex e eu sou o desenvolvedor independente por trás do Tasks diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 06fd36968..fd5c103f1 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -498,9 +498,6 @@ Dessaturar cores Aparência da ficha Fichas - Preenchida - Linha de contorno - Estilo de ficha Voltar 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 Olá! O meu nome é Alex e sou o programador independente por trás do Tasks diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index e538aa192..8d84fb1ce 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -598,9 +598,6 @@ Desaturați culorile Aspect fragmentat Fragmente - Încărcat - Conturat - Stil fragmentat Înapoi 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 Bună, mă numesc Alex. Sunt dezvoltatorul independent din spatele Tasks diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 0fdcd1ef6..19acde35b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -484,9 +484,6 @@ Привет! Меня зовут Алекс. Я - независимый разработчик, стоящий за программой Tasks Я потратил тысячи часов, работая над Tasks, и я публикую весь исходный код онлайн, бесплатно. Для того, чтобы поддержать мою работу, некоторые функциональности требуют подписки Назад - Стиль индикаторов - Оконтуренный - Заполненный Индикаторы Внешний вид индикаторов Уменьшить насыщенность цветов diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 7716ed12b..ca3aaebe9 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -407,8 +407,6 @@ මනාපයන් පෙරනිමි අගයන් වෙත යළි පිහිටුවනු ඇත මනාපයන් යළි පිහිටුවන්න චිප්ස් - පුරවා ඇති - චිප් විලාසය වර්ණ රෝදය ඔබගේ පැළඳිය හැකි උපාංගයන්හි දැනුම්දීම් පෙන්වන්න පැළඳිය හැකි උපාංග දැනුම්දීම් @@ -688,7 +686,6 @@ මෙනුව ස්ථාන සැකසුම් අඳුරු තේමාවන් වලදී වර්ණ අසංතෘප්ත වේ - භාහිර රේඛාවන් ඇති ක්‍රියාත්මකව පවතින කාර්යයන් %1$s, %2$s සඳහා නැවත සකස් කරන ලදි අවම වශයෙන් ප්‍රමුඛතාවය \? diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 46aa363e5..857ce8406 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -449,7 +449,6 @@ Text och ikon Plats inställningar Platser - Fylld Tillbaka Färghjul Ogiltigt användarnamn eller lösenord @@ -604,8 +603,6 @@ Avmatta färger Utseende av flis Pommes frites - Beskrivs på - Chip stil Hej! Jag heter Alex. Jag är den oberoende utvecklaren bakom Tasks Inaktivera batterioptimeringar Tryck här om du har problem med aviseringar diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index f8638801e..cddcb2498 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -201,9 +201,6 @@ இருண்ட கருப்பொருள்களில் நிறங்கள் தேய்மானம் செய்யப்படும் தேய்மான நிறங்கள் சிப் தோற்றம் - நிரப்ப - கோடிட்டுக் காட்டப்பட்டுள்ளது - சிப் பாணி மீண்டும் நான் பணிகளில் ஆயிரக்கணக்கான மணிநேரங்களை செலவிட்டேன், மேலும் மூலக் குறியீடு அனைத்தையும் ஆன்லைனில் இலவசமாக வெளியிடுகிறேன். எனது பணியை ஆதரிக்க சில அம்சங்களுக்கு சந்தா தேவை வணக்கம்! என் பெயர் அலெக்ஸ். பணிகளுக்குப் பின்னால் உள்ள சுயாதீன டெவலப்பர் நான் diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 3ea682648..cd801f2fb 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -154,9 +154,6 @@ สีที่อิ่มตัว ลักษณะชิป เศษ - เต็มแล้ว - เค้าร่าง - สไตล์ชิป กลับ ฉันใช้เวลาหลายพันชั่วโมงในการทํางานและฉันเผยแพร่ซอร์สโค้ดทั้งหมดออนไลน์ฟรี เพื่อสนับสนุนงานของฉันคุณสมบัติบางอย่างต้องมีการสมัครสมาชิก สวัสดี! ฉันชื่ออเล็กซ์ ฉันเป็นนักพัฒนาอิสระที่อยู่เบื้องหลังงาน diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 54d000c18..740cc6318 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -468,9 +468,6 @@ Hey! Ben Alex. Tasks\'ın arkasındaki bağımsız geliştiriciyim 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 Geri - Yonga biçimi - Dış çizgi - Tok Yongalar Yonga görünümü Renkleri solgunlaştır diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2508db0e3..1efef3f37 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -498,9 +498,6 @@ Місця Вигляд індикаторів списків Індикатори списків - Контур - Заповнений - Стиль індикаторів списків Назад Я витратив тисячі годин, працюючи над Tasks, і я публікую весь код онлайн безоплатно. Щоб підтримати мою роботу, деякі функції потребують підписки Привіт! Моє ім\'я Алекс. Я - незалежний розробник Tasks diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 863f38740..1e59667d7 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -220,9 +220,6 @@ Khử bão hoà màu sắc Ngoại hình nhãn Nhãn - Lấp đầy - Tô đường viền - Kiểu nhãn Quay lại 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ý Xin chào! Tên tôi là Alex. Tôi là nhà phát triển độc lập đứng sau Tasks diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4a44394db..0a7740f31 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -458,9 +458,6 @@ 你好!我叫 Alex,是 Tasks 背后的独立开发者 我已经花了数千个小时用于开发 Tasks,并且在网上免费发布了所有源代码。 为了支持我的工作,某些功能需要订阅 返回 - 纸片样式 - 描边 - 填充 纸片 纸片外观 降低颜色饱和度 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 88a6951c3..ef579c4b4 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -213,16 +213,6 @@ @drawable/ic_decsync - - @string/chip_style_outlined - @string/chip_style_filled - - - - 0 - 1 - - @string/chip_appearance_text_and_icon @string/chip_appearance_text_only diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index bc93ba16f..b0526582b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -145,10 +145,8 @@ @color/drawer_background_light_selected @color/black_60 @color/black_38 - @color/black_100 @color/black_12 @color/grey_300 - @color/black_87 diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 61ad7a3e8..a7a388bc8 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -392,7 +392,6 @@ disable_sort_groups wearable_notifications notified_oauth_error_%1$s_%2$s - chip_style chip_appearance chips_subtask chips_start_date diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb374d6bb..e61904608 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -557,9 +557,6 @@ File %1$s contained %2$s.\n\n Hi! My name is Alex. I am the independent developer behind Tasks 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 Back - Chip style - Outlined - Filled Chips Chip appearance Desaturate colors diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e58c56bdd..6994ca6d1 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -188,39 +188,6 @@ 24dp - - - - - -