Store colors as android color ints

pull/935/head
Alex Baker 4 years ago
parent 5847170a8c
commit 236658e3d2

@ -34,7 +34,7 @@ android {
defaultConfig {
testApplicationId = "org.tasks.test"
applicationId = "org.tasks"
versionCode = 674
versionCode = 675
versionName = "8.1"
targetSdkVersion(Versions.targetSdk)
minSdkVersion(Versions.minSdk)

@ -13,6 +13,7 @@ import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat;
import static com.todoroo.astrid.activity.TaskEditFragment.newTaskEditFragment;
import static com.todoroo.astrid.activity.TaskListFragment.newTaskListFragment;
import static org.tasks.tasklist.ActionUtils.applySupportActionModeColor;
import static org.tasks.themes.ThemeColor.newThemeColor;
import static org.tasks.ui.NavigationDrawerFragment.REQUEST_NEW_LIST;
import android.annotation.SuppressLint;
@ -302,8 +303,8 @@ public class MainActivity extends InjectingAppCompatActivity
}
private ThemeColor getFilterColor() {
return filter != null && filter.tint >= 0
? themeCache.getThemeColor(filter.tint)
return filter != null && filter.tint != 0
? newThemeColor(this, filter.tint)
: theme.getThemeColor();
}

@ -12,6 +12,7 @@ import static com.google.common.collect.Lists.newArrayList;
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
import static org.tasks.activities.RemoteListPicker.newRemoteListSupportPicker;
import static org.tasks.caldav.CaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR;
import static org.tasks.themes.ThemeColor.newThemeColor;
import static org.tasks.ui.CheckBoxes.getPriorityColor;
import android.app.Activity;
@ -264,7 +265,7 @@ public final class TaskListFragment extends InjectingFragment
filter = getFilter();
themeColor = filter.tint >= 0 ? themeCache.getThemeColor(filter.tint) : defaultThemeColor;
themeColor = filter.tint != 0 ? newThemeColor(context, filter.tint) : defaultThemeColor;
filter.setFilterQueryOverride(null);

@ -27,7 +27,6 @@ import org.tasks.filters.NavigationDrawerSubheader;
import org.tasks.locale.Locale;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeAccent;
import org.tasks.themes.ThemeCache;
public class FilterAdapter extends BaseAdapter {
@ -39,19 +38,16 @@ public class FilterAdapter extends BaseAdapter {
private final Locale locale;
private final Inventory inventory;
private final LayoutInflater inflater;
private final ThemeCache themeCache;
private Filter selected = null;
private List<FilterListItem> items = new ArrayList<>();
@Inject
public FilterAdapter(
Activity activity, Theme theme, ThemeCache themeCache, Locale locale, Inventory inventory) {
public FilterAdapter(Activity activity, Theme theme, Locale locale, Inventory inventory) {
this.activity = activity;
this.accent = theme.getThemeAccent();
this.locale = locale;
this.inventory = inventory;
this.inflater = theme.getLayoutInflater(activity);
this.themeCache = themeCache;
}
public void save(Bundle outState) {
@ -105,8 +101,7 @@ public class FilterAdapter extends BaseAdapter {
switch (viewType) {
case ITEM:
viewHolder =
new FilterViewHolder(
convertView, accent, themeCache, false, locale, activity, inventory, null);
new FilterViewHolder(convertView, accent, false, locale, activity, inventory, null);
break;
case SEPARATOR:
viewHolder = new FilterViewHolder(convertView);

@ -1,6 +1,7 @@
package com.todoroo.astrid.adapter;
import static com.todoroo.andlib.utility.AndroidUtilities.preLollipop;
import static org.tasks.themes.ThemeColor.newThemeColor;
import android.app.Activity;
import android.content.Intent;
@ -30,7 +31,6 @@ import org.tasks.locale.Locale;
import org.tasks.preferences.SyncPreferences;
import org.tasks.themes.CustomIcons;
import org.tasks.themes.ThemeAccent;
import org.tasks.themes.ThemeCache;
import org.tasks.themes.ThemeColor;
public class FilterViewHolder extends RecyclerView.ViewHolder {
@ -50,7 +50,6 @@ public class FilterViewHolder extends RecyclerView.ViewHolder {
TextView size;
private OnClick onClick;
private ThemeCache themeCache;
private boolean navigationDrawer;
private Locale locale;
private Activity activity;
@ -60,7 +59,6 @@ public class FilterViewHolder extends RecyclerView.ViewHolder {
FilterViewHolder(
@NonNull View itemView,
ThemeAccent accent,
ThemeCache themeCache,
boolean navigationDrawer,
Locale locale,
Activity activity,
@ -72,7 +70,6 @@ public class FilterViewHolder extends RecyclerView.ViewHolder {
ButterKnife.bind(this, itemView);
this.itemView = itemView;
this.themeCache = themeCache;
this.navigationDrawer = navigationDrawer;
this.locale = locale;
this.activity = activity;
@ -135,8 +132,8 @@ public class FilterViewHolder extends RecyclerView.ViewHolder {
}
private int getColor(FilterListItem filter) {
if (filter.tint >= 0) {
ThemeColor color = themeCache.getThemeColor(filter.tint);
if (filter.tint != 0) {
ThemeColor color = newThemeColor(activity, filter.tint);
if (color.isFree() || inventory.purchasedThemes()) {
return color.getPrimaryColor();
}

@ -32,7 +32,6 @@ import org.tasks.filters.NavigationDrawerSubheader;
import org.tasks.locale.Locale;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeAccent;
import org.tasks.themes.ThemeCache;
public class NavigationDrawerAdapter extends ListAdapter<FilterListItem, FilterViewHolder> {
@ -42,21 +41,19 @@ public class NavigationDrawerAdapter extends ListAdapter<FilterListItem, FilterV
private final Locale locale;
private final Inventory inventory;
private final LayoutInflater inflater;
private final ThemeCache themeCache;
private OnClick onClick;
private Filter selected = null;
private Map<Filter, Integer> counts = new HashMap<>();
@Inject
public NavigationDrawerAdapter(
Activity activity, Theme theme, ThemeCache themeCache, Locale locale, Inventory inventory) {
Activity activity, Theme theme, Locale locale, Inventory inventory) {
super(new DiffCallback());
this.activity = activity;
this.accent = theme.getThemeAccent();
this.locale = locale;
this.inventory = inventory;
this.inflater = theme.getLayoutInflater(activity);
this.themeCache = themeCache;
}
public void setOnClick(OnClick onClick) {
@ -98,7 +95,7 @@ public class NavigationDrawerAdapter extends ListAdapter<FilterListItem, FilterV
View view = inflater.inflate(type.layout, parent, false);
if (type == ITEM) {
return new FilterViewHolder(
view, accent, themeCache, true, locale, activity, inventory, this::onClickFilter);
view, accent, true, locale, activity, inventory, this::onClickFilter);
} else if (type == SUBHEADER) {
return new FilterViewHolder(view, activity);
} else {

@ -24,7 +24,7 @@ public abstract class FilterListItem implements Parcelable {
public String listingTitle = null;
public int icon = -1;
public int tint = -1;
public int tint = 0;
public int count = -1;
public abstract Type getItemType();

@ -6,7 +6,9 @@ import static com.google.common.collect.Lists.newArrayList;
import static org.tasks.caldav.CaldavUtils.getParent;
import static org.tasks.db.DbUtils.batch;
import android.content.Context;
import android.os.Environment;
import androidx.core.content.ContextCompat;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
@ -20,6 +22,7 @@ import javax.inject.Inject;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.caldav.CaldavUtils;
import org.tasks.data.CaldavCalendar;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask;
import org.tasks.data.CaldavTaskContainer;
@ -36,8 +39,10 @@ import org.tasks.data.TaskAttachment;
import org.tasks.data.TaskAttachmentDao;
import org.tasks.data.UserActivity;
import org.tasks.data.UserActivityDao;
import org.tasks.injection.ForApplication;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences;
import org.tasks.themes.ThemeColor;
public class Upgrader {
@ -51,6 +56,8 @@ public class Upgrader {
private static final int V6_8_1 = 607;
private static final int V6_9 = 608;
private static final int V7_0 = 617;
private static final int V8_2 = 675;
private final Context context;
private final Preferences preferences;
private final Tracker tracker;
private final TagDataDao tagDataDao;
@ -65,6 +72,7 @@ public class Upgrader {
@Inject
public Upgrader(
@ForApplication Context context,
Preferences preferences,
Tracker tracker,
TagDataDao tagDataDao,
@ -76,6 +84,7 @@ public class Upgrader {
TaskAttachmentDao taskAttachmentDao,
CaldavDao caldavDao,
TaskDao taskDao) {
this.context = context;
this.preferences = preferences;
this.tracker = tracker;
this.tagDataDao = tagDataDao;
@ -101,6 +110,7 @@ public class Upgrader {
run(from, V6_8_1, this::migrateCaldavFilters);
run(from, V6_9, this::applyCaldavCategories);
run(from, V7_0, this::applyCaldavSubtasks);
run(from, V8_2, this::migrateColors);
}
preferences.setCurrentVersion(to);
}
@ -112,6 +122,33 @@ public class Upgrader {
}
}
private void migrateColors() {
preferences.setInt(
R.string.p_theme_color, getAndroidColor(preferences.getInt(R.string.p_theme_color, 7)));
for (CaldavCalendar calendar : caldavDao.getCalendars()) {
calendar.setColor(getAndroidColor(calendar.getColor()));
caldavDao.update(calendar);
}
for (GoogleTaskList list : googleTaskListDao.getAllLists()) {
list.setColor(getAndroidColor(list.getColor()));
googleTaskListDao.update(list);
}
for (TagData tagData : tagDataDao.getAll()) {
tagData.setColor(getAndroidColor(tagData.getColor()));
tagDataDao.update(tagData);
}
for (Filter filter : filterDao.getFilters()) {
filter.setColor(getAndroidColor(filter.getColor()));
filterDao.update(filter);
}
}
private int getAndroidColor(int index) {
return index >= 0 && index < ThemeColor.COLORS.length
? ContextCompat.getColor(context, ThemeColor.COLORS[index])
: 0;
}
private void applyCaldavSubtasks() {
List<CaldavTask> updated = newArrayList();

@ -1,6 +1,7 @@
package org.tasks.activities;
import static org.tasks.dialogs.IconPickerDialog.newIconPicker;
import static org.tasks.themes.ThemeColor.newThemeColor;
import android.content.DialogInterface;
import android.content.Intent;
@ -22,7 +23,6 @@ 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.ThemeCache;
import org.tasks.themes.ThemeColor;
public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatActivity
@ -42,11 +42,10 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
@BindView(R.id.toolbar)
Toolbar toolbar;
@Inject ThemeCache themeCache;
@Inject ThemeColor themeColor;
@Inject DialogBuilder dialogBuilder;
protected int selectedTheme = -1;
protected int selectedColor = -1;
protected int selectedIcon = -1;
@Override
@ -58,7 +57,7 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
ButterKnife.bind(this);
if (savedInstanceState != null) {
selectedTheme = savedInstanceState.getInt(EXTRA_SELECTED_THEME);
selectedColor = savedInstanceState.getInt(EXTRA_SELECTED_THEME);
selectedIcon = savedInstanceState.getInt(EXTRA_SELECTED_ICON);
}
@ -69,14 +68,13 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
toolbar.inflateMenu(R.menu.menu_tag_settings);
}
toolbar.setOnMenuItemClickListener(this);
themeColor.apply(toolbar);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(EXTRA_SELECTED_THEME, selectedTheme);
outState.putInt(EXTRA_SELECTED_THEME, selectedColor);
outState.putInt(EXTRA_SELECTED_ICON, selectedIcon);
}
@ -114,7 +112,7 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
Intent intent = new Intent(BaseListSettingsActivity.this, ColorPickerActivity.class);
intent.putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS);
intent.putExtra(ColorPickerActivity.EXTRA_SHOW_NONE, true);
intent.putExtra(ColorPickerActivity.EXTRA_THEME_INDEX, selectedTheme);
intent.putExtra(ColorPickerActivity.EXTRA_COLOR, selectedColor);
startActivityForResult(intent, REQUEST_COLOR_PICKER);
}
@ -134,7 +132,8 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_COLOR_PICKER) {
if (resultCode == RESULT_OK) {
selectedTheme = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
int index = data.getIntExtra(ColorPickerActivity.EXTRA_COLOR, -1);
selectedColor = index < 0 ? 0 : ContextCompat.getColor(this, ThemeColor.COLORS[index]);
updateTheme();
}
} else {
@ -163,11 +162,11 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
protected void updateTheme() {
ThemeColor themeColor;
if (selectedTheme < 0) {
if (selectedColor == 0) {
themeColor = this.themeColor;
color.setVisibility(View.GONE);
} else {
themeColor = themeCache.getThemeColor(selectedTheme);
themeColor = newThemeColor(this, selectedColor);
Drawable colorIcon = ContextCompat.getDrawable(this, R.drawable.ic_baseline_lens_24px);
Drawable wrappedColorIcon = DrawableCompat.wrap(colorIcon.mutate());
DrawableCompat.setTint(wrappedColorIcon, themeColor.getPrimaryColor());

@ -2,6 +2,7 @@ package org.tasks.activities;
import static org.tasks.billing.PurchaseDialog.newPurchaseDialog;
import static org.tasks.dialogs.ColorPickerDialog.newColorPickerDialog;
import static org.tasks.themes.ThemeColor.newThemeColor;
import android.content.Intent;
import java.util.List;
@ -9,6 +10,7 @@ import javax.inject.Inject;
import org.tasks.R;
import org.tasks.billing.Inventory;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.ColorPickerDialog.Pickable;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.Preferences;
@ -20,7 +22,7 @@ public class ColorPickerActivity extends InjectingAppCompatActivity
public static final String EXTRA_PALETTE = "extra_palette";
public static final String EXTRA_SHOW_NONE = "extra_show_none";
public static final String EXTRA_THEME_INDEX = "extra_index";
public static final String EXTRA_COLOR = "extra_index";
private static final String FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker";
private static final String FRAG_TAG_PURCHASE = "frag_tag_purchase";
@Inject Theme theme;
@ -37,11 +39,22 @@ public class ColorPickerActivity extends InjectingAppCompatActivity
Intent intent = getIntent();
palette = (ColorPalette) intent.getSerializableExtra(EXTRA_PALETTE);
boolean showNone = intent.getBooleanExtra(EXTRA_SHOW_NONE, false);
int selected =
intent.hasExtra(EXTRA_THEME_INDEX)
? intent.getIntExtra(EXTRA_THEME_INDEX, -1)
: getCurrentSelection(palette);
newColorPickerDialog(getItems(palette), showNone, selected)
List<? extends Pickable> items = getItems(palette);
int selected;
if (palette == ColorPalette.COLORS) {
selected =
items.indexOf(
intent.hasExtra(EXTRA_COLOR)
? newThemeColor(this, intent.getIntExtra(EXTRA_COLOR, 0))
: theme.getThemeColor());
} else {
selected =
intent.hasExtra(EXTRA_COLOR)
? intent.getIntExtra(EXTRA_COLOR, -1)
: getCurrentSelection(palette);
}
newColorPickerDialog(items, showNone, selected)
.show(getSupportFragmentManager(), FRAG_TAG_COLOR_PICKER);
}
@ -71,7 +84,7 @@ public class ColorPickerActivity extends InjectingAppCompatActivity
public void themePicked(ColorPickerDialog.Pickable picked) {
Intent data = new Intent();
data.putExtra(EXTRA_PALETTE, palette);
data.putExtra(EXTRA_THEME_INDEX, picked == null ? -1 : picked.getIndex());
data.putExtra(EXTRA_COLOR, picked == null ? -1 : picked.getIndex());
setResult(RESULT_OK, data);
finish();
}

@ -45,7 +45,7 @@ public class FilterSettingsActivity extends BaseListSettingsActivity {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
selectedTheme = filter.tint;
selectedColor = filter.tint;
selectedIcon = filter.icon;
}
@ -85,7 +85,7 @@ public class FilterSettingsActivity extends BaseListSettingsActivity {
if (hasChanges()) {
filter.listingTitle = newName;
filter.tint = selectedTheme;
filter.tint = selectedColor;
filter.icon = selectedIcon;
filterDao.update(filter.toStoreObject());
setResult(
@ -103,7 +103,7 @@ public class FilterSettingsActivity extends BaseListSettingsActivity {
@Override
protected boolean hasChanges() {
return !(getNewName().equals(filter.listingTitle)
&& selectedTheme == filter.tint
&& selectedColor == filter.tint
&& selectedIcon == filter.icon);
}

@ -69,7 +69,7 @@ public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity {
}
if (savedInstanceState == null) {
selectedTheme = gtasksList.getColor();
selectedColor = gtasksList.getColor();
selectedIcon = gtasksList.getIcon();
}
@ -141,7 +141,7 @@ public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity {
renameListViewModel.renameList(gtasksInvoker, gtasksList, newName);
} else {
if (colorChanged() || iconChanged()) {
gtasksList.setColor(selectedTheme);
gtasksList.setColor(selectedColor);
gtasksList.setIcon(selectedIcon);
googleTaskListDao.insertOrReplace(gtasksList);
setResult(
@ -192,13 +192,13 @@ public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity {
@Override
protected boolean hasChanges() {
if (isNewList) {
return selectedTheme >= 0 || !isEmpty(getNewName());
return selectedColor >= 0 || !isEmpty(getNewName());
}
return colorChanged() || nameChanged() || iconChanged();
}
private boolean colorChanged() {
return selectedTheme != gtasksList.getColor();
return selectedColor != gtasksList.getColor();
}
private boolean iconChanged() {
@ -212,7 +212,7 @@ public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity {
private void onListCreated(TaskList taskList) {
gtasksList.setRemoteId(taskList.getId());
gtasksList.setTitle(taskList.getTitle());
gtasksList.setColor(selectedTheme);
gtasksList.setColor(selectedColor);
gtasksList.setIcon(selectedIcon);
gtasksList.setId(googleTaskListDao.insertOrReplace(gtasksList));
setResult(
@ -230,7 +230,7 @@ public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity {
private void onListRenamed(TaskList taskList) {
gtasksList.setTitle(taskList.getTitle());
gtasksList.setColor(selectedTheme);
gtasksList.setColor(selectedColor);
gtasksList.setIcon(selectedIcon);
googleTaskListDao.insertOrReplace(gtasksList);
setResult(

@ -56,7 +56,7 @@ public class TagSettingsActivity extends BaseListSettingsActivity {
tagData.setRemoteId(UUIDHelper.newUUID());
}
if (savedInstanceState == null) {
selectedTheme = tagData.getColor();
selectedColor = tagData.getColor();
selectedIcon = tagData.getIcon();
}
@ -120,13 +120,13 @@ public class TagSettingsActivity extends BaseListSettingsActivity {
if (isNewTag) {
tagData.setName(newName);
tagData.setColor(selectedTheme);
tagData.setColor(selectedColor);
tagData.setIcon(selectedIcon);
tagDataDao.createNew(tagData);
setResult(RESULT_OK, new Intent().putExtra(MainActivity.OPEN_FILTER, new TagFilter(tagData)));
} else if (hasChanges()) {
tagData.setName(newName);
tagData.setColor(selectedTheme);
tagData.setColor(selectedColor);
tagData.setIcon(selectedIcon);
tagDataDao.update(tagData);
tagDao.rename(tagData.getRemoteId(), newName);
@ -142,9 +142,9 @@ public class TagSettingsActivity extends BaseListSettingsActivity {
@Override
protected boolean hasChanges() {
if (isNewTag) {
return selectedTheme >= 0 || selectedIcon >= 0 || !isEmpty(getNewName());
return selectedColor >= 0 || selectedIcon >= 0 || !isEmpty(getNewName());
}
return !(selectedTheme == tagData.getColor()
return !(selectedColor == tagData.getColor()
&& selectedIcon == tagData.getIcon()
&& getNewName().equals(tagData.getName()));
}

@ -79,7 +79,7 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting
if (savedInstanceState == null) {
if (caldavCalendar != null) {
name.setText(caldavCalendar.getName());
selectedTheme = caldavCalendar.getColor();
selectedColor = caldavCalendar.getColor();
selectedIcon = caldavCalendar.getIcon();
}
}
@ -183,7 +183,7 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting
caldavCalendar.setAccount(caldavAccount.getUuid());
caldavCalendar.setUrl(url);
caldavCalendar.setName(getNewName());
caldavCalendar.setColor(selectedTheme);
caldavCalendar.setColor(selectedColor);
caldavCalendar.setIcon(selectedIcon);
caldavDao.insert(caldavCalendar);
setResult(
@ -194,7 +194,7 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting
private void updateAccount() {
caldavCalendar.setName(getNewName());
caldavCalendar.setColor(selectedTheme);
caldavCalendar.setColor(selectedColor);
caldavCalendar.setIcon(selectedIcon);
caldavDao.update(caldavCalendar);
setResult(
@ -207,11 +207,11 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting
@Override
protected boolean hasChanges() {
if (caldavCalendar == null) {
return !isEmpty(getNewName()) || selectedTheme != -1 || selectedIcon != -1;
return !isEmpty(getNewName()) || selectedColor != -1 || selectedIcon != -1;
}
return !caldavCalendar.getName().equals(getNewName())
|| selectedIcon != caldavCalendar.getIcon()
|| selectedTheme != caldavCalendar.getColor();
|| selectedColor != caldavCalendar.getColor();
}
private String getNewName() {

@ -59,6 +59,9 @@ public abstract class GoogleTaskListDao {
@Update
public abstract void update(GoogleTaskAccount account);
@Update
public abstract void update(GoogleTaskList list);
@Query(
"SELECT google_task_lists.*, google_task_accounts.*, COUNT(tasks._id) AS count"
+ " FROM google_task_accounts "

@ -41,8 +41,8 @@ public class ActivityModule {
@Provides
@ActivityScope
public ThemeColor getThemeColor(ThemeCache themeCache, Preferences preferences) {
return themeCache.getThemeColor(preferences.getInt(R.string.p_theme_color, 7));
public ThemeColor getThemeColor(Preferences preferences) {
return ThemeColor.newThemeColor(activity, preferences.getInt(R.string.p_theme_color, 0));
}
@Provides

@ -9,6 +9,7 @@ import android.os.Bundle
import android.os.Handler
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
import androidx.preference.ListPreference
import androidx.preference.Preference
import com.google.common.base.Strings
@ -228,7 +229,7 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_THEME_PICKER) {
if (resultCode == RESULT_OK) {
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0)
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_COLOR, 0)
preferences.setInt(R.string.p_theme, index)
Handler().post {
themeCache.getThemeBase(index).setDefaultNightMode()
@ -237,19 +238,20 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
}
} else if (requestCode == REQUEST_COLOR_PICKER) {
if (resultCode == RESULT_OK) {
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0)
preferences.setInt(R.string.p_theme_color, index)
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_COLOR, 0)
val color = ThemeColor.COLORS[index]
preferences.setInt(R.string.p_theme_color, ContextCompat.getColor(context!!, color))
recreate()
}
} else if (requestCode == REQUEST_ACCENT_PICKER) {
if (resultCode == RESULT_OK) {
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0)
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_COLOR, 0)
preferences.setInt(R.string.p_theme_accent, index)
recreate()
}
} else if (requestCode == REQUEST_LAUNCHER_PICKER) {
if (resultCode == RESULT_OK) {
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0)
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_COLOR, 0)
setLauncherIcon(index)
preferences.setInt(R.string.p_theme_launcher, index)
updateLauncherPreference()
@ -324,7 +326,7 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
}
private fun setupColorPreference(
@StringRes prefId: Int, summary: String,
@StringRes prefId: Int, summary: String?,
palette: ColorPickerActivity.ColorPalette,
requestCode: Int
) {

@ -82,7 +82,7 @@ class ScrollableWidget : InjectingPreferenceFragment() {
ColorPickerActivity.ColorPalette.WIDGET_BACKGROUND
)
intent.putExtra(
ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.themeIndex
ColorPickerActivity.EXTRA_COLOR, widgetPreferences.themeIndex
)
startActivityForResult(intent, REQUEST_THEME_SELECTION)
false
@ -93,9 +93,10 @@ class ScrollableWidget : InjectingPreferenceFragment() {
colorPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val intent = Intent(context, ColorPickerActivity::class.java)
intent.putExtra(
ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS
ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS
)
intent.putExtra(ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.colorIndex)
val color = ThemeColor.COLORS[widgetPreferences.colorIndex]
intent.putExtra(ColorPickerActivity.EXTRA_COLOR, color)
startActivityForResult(intent, REQUEST_COLOR_SELECTION)
false
}
@ -117,7 +118,7 @@ class ScrollableWidget : InjectingPreferenceFragment() {
if (resultCode == Activity.RESULT_OK) {
widgetPreferences.setTheme(
data!!.getIntExtra(
ColorPickerActivity.EXTRA_THEME_INDEX,
ColorPickerActivity.EXTRA_COLOR,
0
)
)
@ -127,7 +128,7 @@ class ScrollableWidget : InjectingPreferenceFragment() {
if (resultCode == Activity.RESULT_OK) {
widgetPreferences.setColor(
data!!.getIntExtra(
ColorPickerActivity.EXTRA_THEME_INDEX,
ColorPickerActivity.EXTRA_COLOR,
0
)
)

@ -1,5 +1,7 @@
package org.tasks.tags;
import static org.tasks.themes.ThemeColor.newThemeColor;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
@ -16,6 +18,7 @@ import org.tasks.data.TagData;
import org.tasks.tags.CheckBoxTriStates.State;
import org.tasks.themes.CustomIcons;
import org.tasks.themes.ThemeCache;
import org.tasks.themes.ThemeColor;
public class TagRecyclerAdapter extends RecyclerView.Adapter<TagPickerViewHolder> {
@ -59,9 +62,11 @@ public class TagRecyclerAdapter extends RecyclerView.Adapter<TagPickerViewHolder
}
private int getColor(TagData tagData) {
return themeCache
.getThemeColor(tagData.getColor() >= 0 ? tagData.getColor() : 19)
.getPrimaryColor();
ThemeColor themeColor =
tagData.getColor() > 0
? newThemeColor(context, tagData.getColor())
: themeCache.getThemeColor(19);
return themeColor.getPrimaryColor();
}
private @Nullable Integer getIcon(TagData tagData) {

@ -19,11 +19,13 @@ import android.view.SubMenu;
import android.view.View;
import androidx.annotation.RequiresApi;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.ColorUtils;
import androidx.drawerlayout.widget.DrawerLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import org.tasks.R;
import org.tasks.dialogs.ColorPickerDialog;
import timber.log.Timber;
public class ThemeColor implements ColorPickerDialog.Pickable {
@ -75,7 +77,7 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
".Grey"
};
static final int[] COLORS =
public static final int[] COLORS =
new int[] {
R.color.blue_grey_500,
R.color.grey_900,
@ -120,17 +122,17 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
private final int colorPrimaryVariant;
private final boolean isDark;
public ThemeColor(Context context, int color) {
name = null;
index = -1;
this.color = -1;
colorPrimary = color;
colorPrimaryVariant = ColorUtil.darken(colorPrimary, 12);
public static ThemeColor newThemeColor(Context context, int color) {
try {
return new ThemeColor(context, color);
} catch (Exception e) {
Timber.e(e);
return new ThemeColor(context, 0);
}
}
int whiteText = context.getResources().getColor(R.color.white_100);
double contrast = ColorUtils.calculateContrast(whiteText, colorPrimary);
this.isDark = contrast < 3;
colorOnPrimary = isDark ? context.getResources().getColor(R.color.black_87) : whiteText;
public ThemeColor(Context context, int color) {
this(context, null, -1, color == 0 ? ContextCompat.getColor(context, R.color.blue_500) : color);
}
public ThemeColor(
@ -140,7 +142,8 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
int colorPrimary) {
this.name = name;
this.index = index;
this.color = COLORS[index];
this.color = index >= 0 ? COLORS[index] : -1;
colorPrimary |= 0xFF000000; // remove alpha
this.colorPrimary = colorPrimary;
this.colorPrimaryVariant = ColorUtil.darken(colorPrimary, 12);
@ -320,4 +323,23 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
}
return drawable;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof ThemeColor)) {
return false;
}
ThemeColor that = (ThemeColor) o;
return colorPrimary == that.colorPrimary;
}
@Override
public int hashCode() {
return colorPrimary;
}
}

@ -6,6 +6,7 @@ import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Lists.transform;
import static com.google.common.collect.Sets.newHashSet;
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
import static org.tasks.themes.ThemeColor.newThemeColor;
import android.app.Activity;
import android.content.Context;
@ -49,6 +50,7 @@ public class ChipProvider {
private final Map<String, GtasksFilter> googleTaskLists = new HashMap<>();
private final Map<String, CaldavFilter> caldavCalendars = new HashMap<>();
private final Map<String, TagFilter> tagDatas = new HashMap<>();
private final Context context;
private final Inventory inventory;
private final ThemeCache themeCache;
private final int iconAlpha;
@ -70,6 +72,7 @@ public class ChipProvider {
CaldavDao caldavDao,
TagDataDao tagDataDao,
LocalBroadcastManager localBroadcastManager) {
this.context = context;
this.inventory = inventory;
this.themeCache = themeCache;
this.localBroadcastManager = localBroadcastManager;
@ -209,8 +212,8 @@ public class ChipProvider {
}
private ThemeColor getColor(int theme) {
if (theme >= 0) {
ThemeColor color = themeCache.getThemeColor(theme);
if (theme != 0) {
ThemeColor color = newThemeColor(context, theme);
if (color.isFree() || inventory.purchasedThemes()) {
return color;
}

@ -91,7 +91,7 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
}
} else if (requestCode == REQUEST_COLOR_PICKER) {
if (resultCode == RESULT_OK) {
selectedTheme = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
selectedTheme = data.getIntExtra(ColorPickerActivity.EXTRA_COLOR, 0);
updateTheme();
}
} else {
@ -136,7 +136,7 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
Intent intent = new Intent(this, ColorPickerActivity.class);
intent.putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPalette.LAUNCHER);
intent.putExtra(ColorPickerActivity.EXTRA_SHOW_NONE, false);
intent.putExtra(ColorPickerActivity.EXTRA_THEME_INDEX, selectedTheme);
intent.putExtra(ColorPickerActivity.EXTRA_COLOR, selectedTheme);
startActivityForResult(intent, REQUEST_COLOR_PICKER);
}
@ -162,7 +162,7 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
return selectedTheme;
}
int index =
selectedFilter == null || selectedFilter.tint == -1
selectedFilter == null || selectedFilter.tint == 0
? themeColor.getIndex()
: selectedFilter.tint;
if (index >= ThemeColor.ICONS.length - 1) {

Loading…
Cancel
Save