From c386c4fca3bd0d9aeacd522d8bac06b4acad5749 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 28 Feb 2020 12:59:09 -0600 Subject: [PATCH] Update color and icon list settings layouts --- .../activities/BaseListSettingsActivity.java | 48 ++++++++++++------- .../java/org/tasks/themes/DrawableUtil.java | 31 ++++++++++++ .../main/res/layout/list_settings_color.xml | 17 ++----- .../main/res/layout/list_settings_icon.xml | 15 +----- 4 files changed, 69 insertions(+), 42 deletions(-) create mode 100644 app/src/main/java/org/tasks/themes/DrawableUtil.java diff --git a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.java b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.java index 7c7dee532..d42e51b70 100644 --- a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.java @@ -1,6 +1,7 @@ package org.tasks.activities; import static org.tasks.dialogs.IconPickerDialog.newIconPicker; +import static org.tasks.themes.DrawableUtil.getLeftDrawable; import static org.tasks.themes.ThemeColor.newThemeColor; import android.content.DialogInterface; @@ -9,7 +10,7 @@ import android.graphics.drawable.LayerDrawable; import android.os.Bundle; import android.view.MenuItem; import android.view.View; -import android.widget.ImageView; +import android.widget.TextView; import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar.OnMenuItemClickListener; import androidx.core.content.ContextCompat; @@ -19,28 +20,36 @@ import butterknife.ButterKnife; import butterknife.OnClick; import javax.inject.Inject; import org.tasks.R; -import org.tasks.dialogs.ColorWheelPicker; import org.tasks.dialogs.ColorPalettePicker; +import org.tasks.dialogs.ColorWheelPicker; import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.IconPickerDialog.IconPickerCallback; import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.themes.CustomIcons; +import org.tasks.themes.DrawableUtil; import org.tasks.themes.ThemeColor; public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatActivity - implements IconPickerCallback, OnMenuItemClickListener, ColorPalettePicker.ColorPickedCallback, - ColorWheelPicker.ColorPickedCallback { + implements IconPickerCallback, + OnMenuItemClickListener, + ColorPalettePicker.ColorPickedCallback, + ColorWheelPicker.ColorPickedCallback { private static final String EXTRA_SELECTED_THEME = "extra_selected_theme"; private static final String EXTRA_SELECTED_ICON = "extra_selected_icon"; private static final String FRAG_TAG_ICON_PICKER = "frag_tag_icon_picker"; private static final String FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"; + protected int selectedColor = 0; + protected int selectedIcon = -1; + + @BindView(R.id.clear) + View clear; @BindView(R.id.color) - ImageView color; + TextView color; @BindView(R.id.icon) - ImageView icon; + TextView icon; @BindView(R.id.toolbar) Toolbar toolbar; @@ -48,9 +57,6 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA @Inject ThemeColor themeColor; @Inject DialogBuilder dialogBuilder; - protected int selectedColor = 0; - protected int selectedIcon = -1; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -110,6 +116,11 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA } } + @OnClick(R.id.clear) + protected void clearColor() { + onColorPicked(0); + } + @OnClick(R.id.color_row) protected void showThemePicker() { ColorWheelPicker.Companion.newColorWheel(null, 0, selectedColor) @@ -146,23 +157,24 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA protected void promptDelete() { dialogBuilder .newDialog(R.string.delete_tag_confirmation, getToolbarTitle()) - .setPositiveButton( - R.string.delete, - (dialog, which) -> delete()) + .setPositiveButton(R.string.delete, (dialog, which) -> delete()) .setNegativeButton(android.R.string.cancel, null) .show(); } protected void updateTheme() { ThemeColor themeColor; + DrawableUtil.setLeftDrawable(this, color, R.drawable.color_picker); + Drawable leftDrawable = getLeftDrawable(color); if (selectedColor == 0) { themeColor = this.themeColor; - color.setVisibility(View.GONE); + DrawableCompat.setTint(leftDrawable, ContextCompat.getColor(this, android.R.color.transparent)); + clear.setVisibility(View.GONE); } else { themeColor = newThemeColor(this, selectedColor); - Drawable drawable = color.getDrawable(); - DrawableCompat.setTint(((LayerDrawable) drawable).getDrawable(0), themeColor.getPrimaryColor()); - color.setVisibility(View.VISIBLE); + DrawableCompat.setTint( + ((LayerDrawable) leftDrawable).getDrawable(0), themeColor.getPrimaryColor()); + clear.setVisibility(View.VISIBLE); } themeColor.apply(toolbar); themeColor.applyToSystemBars(this); @@ -170,6 +182,8 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA if (icon == null) { icon = CustomIcons.getIconResId(CustomIcons.getCLOUD()); } - this.icon.setImageResource(icon == null ? R.drawable.ic_outline_cloud_24px : icon); + DrawableUtil.setLeftDrawable(this, this.icon, icon); + DrawableCompat.setTint( + getLeftDrawable(this.icon), ContextCompat.getColor(this, R.color.icon_tint_with_alpha)); } } diff --git a/app/src/main/java/org/tasks/themes/DrawableUtil.java b/app/src/main/java/org/tasks/themes/DrawableUtil.java new file mode 100644 index 000000000..aef55d4d9 --- /dev/null +++ b/app/src/main/java/org/tasks/themes/DrawableUtil.java @@ -0,0 +1,31 @@ +package org.tasks.themes; + +import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybeanMR1; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.widget.TextView; +import androidx.annotation.DrawableRes; +import androidx.core.content.ContextCompat; +import androidx.core.graphics.drawable.DrawableCompat; + +public class DrawableUtil { + public static Drawable getWrapped(Context context, @DrawableRes int resId) { + return DrawableCompat.wrap(ContextCompat.getDrawable(context, resId).mutate()); + } + + public static void setLeftDrawable(Context context, TextView tv, @DrawableRes int resId) { + Drawable wrapped = getWrapped(context, resId); + if (atLeastJellybeanMR1()) { + tv.setCompoundDrawablesRelativeWithIntrinsicBounds(wrapped, null, null, null); + } else { + tv.setCompoundDrawablesWithIntrinsicBounds(wrapped, null, null, null); + } + } + + public static Drawable getLeftDrawable(TextView tv) { + return atLeastJellybeanMR1() + ? tv.getCompoundDrawablesRelative()[0] + : tv.getCompoundDrawables()[0]; + } +} diff --git a/app/src/main/res/layout/list_settings_color.xml b/app/src/main/res/layout/list_settings_color.xml index ee67f97ea..7dd967c16 100644 --- a/app/src/main/res/layout/list_settings_color.xml +++ b/app/src/main/res/layout/list_settings_color.xml @@ -5,24 +5,17 @@ style="@style/TagSettingsRow" android:background="?attr/selectableItemBackground"> - + diff --git a/app/src/main/res/layout/list_settings_icon.xml b/app/src/main/res/layout/list_settings_icon.xml index cd41d7f10..a6b7a37c3 100644 --- a/app/src/main/res/layout/list_settings_icon.xml +++ b/app/src/main/res/layout/list_settings_icon.xml @@ -5,24 +5,13 @@ style="@style/TagSettingsRow" android:background="?attr/selectableItemBackground"> - -