New palette and wheel color pickers

pull/935/head
Alex Baker 4 years ago
parent 78deb5c0d6
commit 4faffdd905

@ -195,6 +195,7 @@ dependencies {
implementation("com.mapbox.mapboxsdk:mapbox-android-sdk:7.3.0")
implementation("com.mapbox.mapboxsdk:mapbox-sdk-services:4.6.0")
implementation("com.etesync:journalmanager:1.0.4")
implementation("com.github.QuadFlask:colorpicker:0.0.15")
googleplayImplementation("com.crashlytics.sdk.android:crashlytics:${Versions.crashlytics}")
googleplayImplementation("com.google.firebase:firebase-analytics:${Versions.firebase}")

@ -836,3 +836,8 @@
license: The Apache Software License, Version 2.0
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
url: https://developer.android.com/topic/libraries/architecture/index.html
- artifact: com.github.QuadFlask:colorpicker:+
name: QuadFlask/colorpicker
copyrightHolder: QuadFlask
license: The Apache Software License, Version 2.0
url: https://github.com/QuadFlask/colorpicker

@ -137,10 +137,6 @@
<!-- ====================================================== Activities = -->
<activity
android:name=".activities.ColorPickerActivity"
android:theme="@style/TranslucentDialog"/>
<activity
android:name=".activities.DatePickerActivity"
android:theme="@style/TranslucentDialog"/>

@ -2061,7 +2061,7 @@
"artifactId": {
"name": "databinding-adapters",
"group": "androidx.databinding",
"version": "3.6.0-rc03"
"version": "3.6.0"
}
},
{
@ -2125,7 +2125,7 @@
"artifactId": {
"name": "databinding-common",
"group": "androidx.databinding",
"version": "3.6.0-rc03"
"version": "3.6.0"
}
},
{
@ -2141,7 +2141,7 @@
"artifactId": {
"name": "databinding-runtime",
"group": "androidx.databinding",
"version": "3.6.0-rc03"
"version": "3.6.0"
}
},
{
@ -2173,7 +2173,7 @@
"artifactId": {
"name": "viewbinding",
"group": "androidx.databinding",
"version": "3.6.0-rc03"
"version": "3.6.0"
}
},
{
@ -2255,6 +2255,22 @@
"group": "androidx.lifecycle",
"version": "1.0.0"
}
},
{
"notice": null,
"copyrightHolder": "QuadFlask",
"copyrightStatement": "Copyright &copy; QuadFlask. All rights reserved.",
"license": "The Apache Software License, Version 2.0",
"licenseUrl": "",
"normalizedLicense": "apache2",
"year": null,
"url": "https://github.com/QuadFlask/colorpicker",
"libraryName": "QuadFlask/colorpicker",
"artifactId": {
"name": "colorpicker",
"group": "com.github.QuadFlask",
"version": "0.0.15"
}
}
]
}

@ -4,7 +4,6 @@ import static org.tasks.dialogs.IconPickerDialog.newIconPicker;
import static org.tasks.themes.ThemeColor.newThemeColor;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
@ -20,6 +19,8 @@ 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.DialogBuilder;
import org.tasks.dialogs.IconPickerDialog.IconPickerCallback;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
@ -27,12 +28,13 @@ import org.tasks.themes.CustomIcons;
import org.tasks.themes.ThemeColor;
public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatActivity
implements IconPickerCallback, OnMenuItemClickListener {
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 int REQUEST_COLOR_PICKER = 10109;
private static final String FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker";
@BindView(R.id.color)
ImageView color;
@ -46,7 +48,7 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
@Inject ThemeColor themeColor;
@Inject DialogBuilder dialogBuilder;
protected int selectedColor = -1;
protected int selectedColor = 0;
protected int selectedIcon = -1;
@Override
@ -110,11 +112,8 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
@OnClick(R.id.color_row)
protected void showThemePicker() {
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_COLOR, selectedColor);
startActivityForResult(intent, REQUEST_COLOR_PICKER);
ColorWheelPicker.Companion.newColorWheel(null, 0, selectedColor)
.show(getSupportFragmentManager(), FRAG_TAG_COLOR_PICKER);
}
@OnClick(R.id.icon_row)
@ -130,16 +129,9 @@ public abstract class BaseListSettingsActivity extends ThemedInjectingAppCompatA
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_COLOR_PICKER) {
if (resultCode == RESULT_OK) {
int index = data.getIntExtra(ColorPickerActivity.EXTRA_COLOR, -1);
selectedColor = index < 0 ? 0 : ContextCompat.getColor(this, ThemeColor.COLORS[index]);
updateTheme();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
public void onColorPicked(int color) {
selectedColor = color;
updateTheme();
}
@Override

@ -1,119 +0,0 @@
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;
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;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeCache;
public class ColorPickerActivity extends InjectingAppCompatActivity
implements ColorPickerDialog.ThemePickerCallback {
public static final String EXTRA_PALETTE = "extra_palette";
public static final String EXTRA_SHOW_NONE = "extra_show_none";
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;
@Inject ThemeCache themeCache;
@Inject Inventory inventory;
@Inject Preferences preferences;
private ColorPalette palette;
@Override
protected void onPostResume() {
super.onPostResume();
Intent intent = getIntent();
palette = (ColorPalette) intent.getSerializableExtra(EXTRA_PALETTE);
boolean showNone = intent.getBooleanExtra(EXTRA_SHOW_NONE, false);
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);
}
private List<? extends ColorPickerDialog.Pickable> getItems(ColorPalette palette) {
switch (palette) {
case ACCENTS:
return themeCache.getAccents();
case COLORS:
return themeCache.getColors();
case LAUNCHER:
return themeCache.getColors().subList(0, themeCache.getColors().size() - 1);
case WIDGET_BACKGROUND:
return themeCache.getWidgetThemes();
default:
throw new IllegalArgumentException("Unsupported palette: " + palette);
}
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
@Override
public void themePicked(ColorPickerDialog.Pickable picked) {
Intent data = new Intent();
data.putExtra(EXTRA_PALETTE, palette);
data.putExtra(EXTRA_COLOR, picked == null ? -1 : picked.getIndex());
setResult(RESULT_OK, data);
finish();
}
@Override
public void initiateThemePurchase() {
newPurchaseDialog().show(getSupportFragmentManager(), FRAG_TAG_PURCHASE);
}
@Override
public void dismissed() {
finish();
}
private int getCurrentSelection(ColorPalette palette) {
switch (palette) {
case COLORS:
return theme.getThemeColor().getIndex();
case ACCENTS:
return theme.getThemeAccent().getIndex();
case LAUNCHER:
return preferences.getInt(R.string.p_theme_launcher, 7);
default:
return theme.getThemeBase().getIndex();
}
}
public enum ColorPalette {
COLORS,
ACCENTS,
LAUNCHER,
WIDGET_BACKGROUND
}
}

@ -0,0 +1,123 @@
package org.tasks.dialogs
import android.app.Activity
import android.app.Activity.RESULT_OK
import android.app.Dialog
import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.view.LayoutInflater
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.RecyclerView
import butterknife.BindView
import butterknife.ButterKnife
import org.tasks.Callback
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseDialog
import org.tasks.injection.DialogFragmentComponent
import org.tasks.injection.InjectingDialogFragment
import org.tasks.themes.ThemeCache
import org.tasks.themes.ThemeColor
import javax.inject.Inject
class ColorPalettePicker : InjectingDialogFragment() {
companion object {
private const val FRAG_TAG_PURCHASE = "frag_tag_purchase"
private const val EXTRA_PALETTE = "extra_palette"
const val EXTRA_SELECTED = ColorWheelPicker.EXTRA_SELECTED
fun newColorPalette(
target: Fragment?,
rc: Int,
palette: ColorPickerAdapter.Palette
): ColorPalettePicker {
val args = Bundle()
args.putSerializable(EXTRA_PALETTE, palette)
val dialog = ColorPalettePicker()
dialog.setTargetFragment(target, rc)
dialog.arguments = args
return dialog
}
}
interface Pickable : Parcelable {
val pickerColor: Int
val isFree: Boolean
val index: Int
}
interface ColorPickedCallback {
fun onColorPicked(index: Int)
}
@Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var inventory: Inventory
@Inject lateinit var themeCache: ThemeCache
@BindView(R.id.icons) lateinit var recyclerView: RecyclerView
lateinit var colors: List<Pickable>
lateinit var palette: ColorPickerAdapter.Palette
var callback: ColorPickedCallback? = null
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val inflater = LayoutInflater.from(context)
val view = inflater.inflate(R.layout.dialog_icon_picker, null)
ButterKnife.bind(this, view)
palette = arguments!!.getSerializable(EXTRA_PALETTE) as ColorPickerAdapter.Palette
colors = when (palette) {
ColorPickerAdapter.Palette.COLORS -> themeCache.colors
ColorPickerAdapter.Palette.ACCENTS -> themeCache.accents
ColorPickerAdapter.Palette.LAUNCHERS -> themeCache.colors.dropLast(1)
ColorPickerAdapter.Palette.WIDGET_BACKGROUND -> themeCache.widgetThemes
}
val iconPickerAdapter = ColorPickerAdapter(
context as Activity,
inventory,
Callback { index: Int -> onSelected(index) })
recyclerView.layoutManager = IconLayoutManager(context)
recyclerView.adapter = iconPickerAdapter
iconPickerAdapter.submitList(colors)
val builder =
dialogBuilder
.newDialog()
.setView(view)
if (inventory.hasPro()) {
builder.setNegativeButton(android.R.string.cancel, null)
} else {
builder.setPositiveButton(R.string.button_subscribe) { _: DialogInterface?, _: Int ->
PurchaseDialog.newPurchaseDialog().show(parentFragmentManager, FRAG_TAG_PURCHASE)
}
}
return builder.show()
}
override fun onAttach(activity: Activity) {
super.onAttach(activity)
if (activity is ColorPickedCallback) {
callback = activity
}
}
private fun onSelected(index: Int) {
val result = when (palette) {
ColorPickerAdapter.Palette.COLORS ->
(colors.find { it.index == index } as ThemeColor).primaryColor
else -> index
}
dialog?.dismiss()
if (targetFragment == null) {
callback?.onColorPicked(result)
} else {
val data = Intent().putExtra(EXTRA_SELECTED, result)
targetFragment?.onActivityResult(targetRequestCode, RESULT_OK, data)
}
}
override fun inject(component: DialogFragmentComponent) = component.inject(this)
}

@ -0,0 +1,56 @@
package org.tasks.dialogs
import android.app.Activity
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import org.tasks.Callback
import org.tasks.R
import org.tasks.billing.Inventory
class ColorPickerAdapter(
private val activity: Activity,
private val inventory: Inventory,
private val onSelected: Callback<Int>
) : ListAdapter<ColorPalettePicker.Pickable, IconPickerHolder>(DiffCallback()) {
enum class Palette {
COLORS,
ACCENTS,
LAUNCHERS,
WIDGET_BACKGROUND
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IconPickerHolder {
val view = activity.layoutInflater.inflate(R.layout.dialog_icon_picker_cell, parent, false)
return IconPickerHolder(activity, view, onSelected)
}
override fun onBindViewHolder(holder: IconPickerHolder, position: Int) {
val pickable = getItem(position)
val available = inventory.hasPro() || pickable.isFree
holder.bind(
pickable.index,
if (available) R.drawable.color_picker else R.drawable.ic_outline_vpn_key_24px,
pickable.pickerColor,
1f,
available
)
}
private class DiffCallback : DiffUtil.ItemCallback<ColorPalettePicker.Pickable>() {
override fun areItemsTheSame(
oldItem: ColorPalettePicker.Pickable,
newItem: ColorPalettePicker.Pickable
): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(
oldItem: ColorPalettePicker.Pickable,
newItem: ColorPalettePicker.Pickable
): Boolean {
return oldItem.index == newItem.index
}
}
}

@ -1,147 +0,0 @@
package org.tasks.dialogs;
import static androidx.core.content.ContextCompat.getColor;
import static com.google.common.collect.Lists.transform;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.billing.Inventory;
import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForActivity;
import org.tasks.injection.InjectingDialogFragment;
import org.tasks.preferences.Preferences;
import org.tasks.themes.Theme;
import org.tasks.ui.SingleCheckedArrayAdapter;
public class ColorPickerDialog extends InjectingDialogFragment {
private static final String EXTRA_ITEMS = "extra_items";
private static final String EXTRA_SELECTED = "extra_selected";
private static final String EXTRA_SHOW_NONE = "extra_show_none";
@Inject DialogBuilder dialogBuilder;
@Inject @ForActivity Context context;
@Inject Preferences preferences;
@Inject Theme theme;
@Inject Inventory inventory;
private ThemePickerCallback callback;
private SingleCheckedArrayAdapter adapter;
private Dialog dialog;
public static ColorPickerDialog newColorPickerDialog(
List<? extends Pickable> items, boolean showNone, int selection) {
ColorPickerDialog dialog = new ColorPickerDialog();
Bundle args = new Bundle();
args.putParcelableArrayList(EXTRA_ITEMS, new ArrayList<Pickable>(items));
args.putInt(EXTRA_SELECTED, selection);
args.putBoolean(EXTRA_SHOW_NONE, showNone);
dialog.setArguments(args);
return dialog;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
Bundle arguments = getArguments();
final List<Pickable> items = arguments.getParcelableArrayList(EXTRA_ITEMS);
boolean showNone = arguments.getBoolean(EXTRA_SHOW_NONE);
int selected = arguments.getInt(EXTRA_SELECTED, -1);
adapter =
new SingleCheckedArrayAdapter(
context, transform(items, Pickable::getName), theme.getThemeAccent()) {
@Override
protected int getDrawable(int position) {
return inventory.purchasedThemes() || items.get(position).isFree()
? R.drawable.ic_baseline_lens_24px
: R.drawable.ic_outline_vpn_key_24px;
}
@Override
protected int getDrawableColor(int position) {
int pickerColor = items.get(position).getPickerColor();
return pickerColor == -1 ? getColor(context, R.color.grey_50) : pickerColor;
}
};
AlertDialogBuilder builder =
dialogBuilder
.newDialog()
.setSingleChoiceItems(
adapter,
selected,
(dialog, which) -> {
Pickable picked = items.get(which);
if (inventory.purchasedThemes() || picked.isFree()) {
callback.themePicked(picked);
} else {
callback.initiateThemePurchase();
}
})
.setOnDismissListener(dialogInterface -> callback.dismissed());
if (showNone) {
builder.setNeutralButton(R.string.none, (dialogInterface, i) -> callback.themePicked(null));
}
dialog = builder.create();
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return dialog;
}
@Override
public void onResume() {
super.onResume();
adapter.notifyDataSetChanged();
}
@Override
public void onCancel(DialogInterface dialog) {
callback.dismissed();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callback = (ThemePickerCallback) activity;
}
@Override
protected void inject(DialogFragmentComponent component) {
component.inject(this);
}
public interface Pickable extends Parcelable {
String getName();
int getPickerColor();
boolean isFree();
int getIndex();
}
public interface ThemePickerCallback {
void themePicked(Pickable pickable);
void initiateThemePurchase();
void dismissed();
}
}

@ -0,0 +1,126 @@
package org.tasks.dialogs
import android.app.Activity
import android.app.Activity.RESULT_CANCELED
import android.app.Activity.RESULT_OK
import android.app.Dialog
import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import com.flask.colorpicker.ColorPickerView
import com.flask.colorpicker.builder.ColorPickerDialogBuilder
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.injection.DialogFragmentComponent
import org.tasks.injection.InjectingDialogFragment
import org.tasks.ui.NavigationDrawerFragment.REQUEST_PURCHASE
import javax.inject.Inject
private const val REQUEST_PURCHASE = 10010
class ColorWheelPicker : InjectingDialogFragment() {
companion object {
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
const val EXTRA_SELECTED = "extra_selected"
fun newColorWheel(target: Fragment?, rc: Int, selected: Int): ColorWheelPicker {
val args = Bundle()
args.putInt(EXTRA_SELECTED, selected)
val dialog = ColorWheelPicker()
dialog.setTargetFragment(target, rc)
dialog.arguments = args
return dialog
}
}
interface ColorPickedCallback {
fun onColorPicked(color: Int)
}
@Inject lateinit var inventory: Inventory
var dialog: AlertDialog? = null
var selected = -1
var callback: ColorPickedCallback? = null
override fun inject(component: DialogFragmentComponent) = component.inject(this)
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
selected = savedInstanceState?.getInt(EXTRA_SELECTED) ?: arguments!!.getInt(EXTRA_SELECTED, 0)
val button = if (inventory.hasPro()) android.R.string.ok else R.string.button_subscribe
val builder = ColorPickerDialogBuilder
.with(activity)
.wheelType(ColorPickerView.WHEEL_TYPE.CIRCLE)
.density(7)
.setOnColorChangedListener { which ->
selected = which
}
.setOnColorSelectedListener { which ->
selected = which
}
.lightnessSliderOnly()
.setPositiveButton(button) { _, _, _ ->
if (inventory.hasPro()) {
deliverSelection()
} else {
startActivityForResult(Intent(activity, PurchaseActivity::class.java), REQUEST_PURCHASE)
}
}
if (selected != 0) {
builder.initialColor(selected)
}
val buttonText = if (inventory.hasPro()) R.string.material_palette else R.string.free_colors
builder.setNegativeButton(buttonText) { _, _ ->
newColorPalette(targetFragment, targetRequestCode, ColorPickerAdapter.Palette.COLORS)
.show(parentFragmentManager, FRAG_TAG_COLOR_PICKER)
}
dialog = builder.build()
return dialog as Dialog
}
override fun onAttach(activity: Activity) {
super.onAttach(activity)
if (activity is ColorPickedCallback) {
callback = activity
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == org.tasks.dialogs.REQUEST_PURCHASE) {
if (inventory.hasPro()) {
deliverSelection()
} else {
dialog?.cancel()
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
private fun deliverSelection() {
dialog?.dismiss()
if (targetFragment == null) {
callback?.onColorPicked(selected)
} else {
val data = Intent().putExtra(EXTRA_SELECTED, selected)
targetFragment?.onActivityResult(targetRequestCode, RESULT_OK, data)
}
}
override fun onCancel(dialog: DialogInterface) {
targetFragment?.onActivityResult(targetRequestCode, RESULT_CANCELED, null)
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt(EXTRA_SELECTED, selected)
}
}

@ -1,8 +1,12 @@
package org.tasks.dialogs;
import static org.tasks.preferences.ResourceResolver.getData;
import android.app.Activity;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.recyclerview.widget.DiffUtil.ItemCallback;
import androidx.recyclerview.widget.ListAdapter;
import org.tasks.Callback;
@ -31,7 +35,6 @@ public class IconPickerAdapter extends ListAdapter<Integer, IconPickerHolder> {
public IconPickerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new IconPickerHolder(
activity,
inventory,
activity.getLayoutInflater().inflate(R.layout.dialog_icon_picker_cell, parent, false),
onSelected);
}
@ -41,7 +44,15 @@ public class IconPickerAdapter extends ListAdapter<Integer, IconPickerHolder> {
int index = CustomIcons.getIndex(position);
Integer icon = CustomIcons.getIconResId(index);
if (icon != null) {
holder.bind(index, icon, index == current);
int tint = index == current
? getData(activity, R.attr.colorAccent)
: ContextCompat.getColor(activity, R.color.icon_tint);
boolean available = index < 1000 || inventory.hasPro();
float alpha =
available
? 1f
: ResourcesCompat.getFloat(activity.getResources(), R.dimen.alpha_disabled);
holder.bind(index, icon, tint, alpha, available);
}
}

@ -1,14 +1,12 @@
package org.tasks.dialogs;
import static org.tasks.preferences.ResourceResolver.getData;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
@ -16,23 +14,20 @@ import butterknife.ButterKnife;
import butterknife.OnClick;
import org.tasks.Callback;
import org.tasks.R;
import org.tasks.billing.Inventory;
public class IconPickerHolder extends RecyclerView.ViewHolder {
private final Context context;
private final Callback<Integer> onClick;
private final Inventory inventory;
@BindView(R.id.icon)
AppCompatImageView imageView;
private int index;
private boolean isEnabled;
IconPickerHolder(
Context context, Inventory inventory, @NonNull View view, Callback<Integer> onClick) {
IconPickerHolder(Context context, @NonNull View view, Callback<Integer> onClick) {
super(view);
this.inventory = inventory;
ButterKnife.bind(this, view);
@ -42,32 +37,21 @@ public class IconPickerHolder extends RecyclerView.ViewHolder {
@OnClick(R.id.icon)
void onClick() {
if (isEnabled()) {
if (isEnabled) {
onClick.call(index);
} else {
Toast.makeText(context, R.string.requires_pro_subscription, Toast.LENGTH_SHORT).show();
}
}
public void bind(int index, int icon, boolean selected) {
public void bind(int index, int icon, int tint, float alpha, boolean isEnabled) {
this.index = index;
this.isEnabled = isEnabled;
imageView.setImageResource(icon);
if (inventory.hasPro()) {
imageView.setAlpha(ResourcesCompat.getFloat(context.getResources(), R.dimen.alpha_secondary));
} else {
imageView.setAlpha(
index < 1000
? 1.0f
: ResourcesCompat.getFloat(context.getResources(), R.dimen.alpha_disabled));
}
imageView.setAlpha(alpha);
Drawable drawable = imageView.getDrawable();
DrawableCompat.setTint(
imageView.getDrawable(),
selected
? getData(context, R.attr.colorAccent)
: ContextCompat.getColor(context, R.color.icon_tint));
}
private boolean isEnabled() {
return index < 1000 || inventory.hasPro();
drawable instanceof LayerDrawable ? ((LayerDrawable) drawable).getDrawable(0) : drawable,
tint);
}
}

@ -1,6 +1,5 @@
package org.tasks.injection;
import androidx.annotation.NonNull;
import com.todoroo.astrid.activity.BeastModePreferences;
import com.todoroo.astrid.activity.MainActivity;
import com.todoroo.astrid.activity.ShareLinkActivity;
@ -11,7 +10,6 @@ import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import dagger.Subcomponent;
import org.tasks.activities.CalendarSelectionActivity;
import org.tasks.activities.CameraActivity;
import org.tasks.activities.ColorPickerActivity;
import org.tasks.activities.DateAndTimePickerActivity;
import org.tasks.activities.DatePickerActivity;
import org.tasks.activities.FilterSelectionActivity;
@ -99,14 +97,12 @@ public interface ActivityComponent {
void inject(VoiceCommandActivity voiceCommandActivity);
void inject(@NonNull WidgetConfigActivity widgetConfigActivity);
void inject(WidgetConfigActivity widgetConfigActivity);
void inject(ShortcutConfigActivity shortcutConfigActivity);
void inject(MyFilePickerActivity myFilePickerActivity);
void inject(ColorPickerActivity colorPickerActivity);
void inject(GoogleTaskListSettingsActivity googleTaskListSettingsActivity);
void inject(CaldavCalendarSettingsActivity caldavCalendarSettingsActivity);
@ -141,11 +137,11 @@ public interface ActivityComponent {
void inject(MainPreferences mainPreferences);
void inject(@NonNull HelpAndFeedback helpAndFeedback);
void inject(HelpAndFeedback helpAndFeedback);
void inject(@NonNull NotificationPreferences notificationPreferences);
void inject(NotificationPreferences notificationPreferences);
void inject(@NonNull ManageSpaceActivity manageSpaceActivity);
void inject(ManageSpaceActivity manageSpaceActivity);
void inject(@NonNull SyncPreferences syncPreferences);
void inject(SyncPreferences syncPreferences);
}

@ -6,7 +6,8 @@ import org.tasks.activities.RemoteListPicker;
import org.tasks.billing.NameYourPriceDialog;
import org.tasks.billing.PurchaseDialog;
import org.tasks.dialogs.AddAttachmentDialog;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.ColorWheelPicker;
import org.tasks.dialogs.ColorPalettePicker;
import org.tasks.dialogs.ExportTasksDialog;
import org.tasks.dialogs.GeofenceDialog;
import org.tasks.dialogs.IconPickerDialog;
@ -36,8 +37,6 @@ public interface DialogFragmentComponent {
void inject(SortDialog sortDialog);
void inject(ColorPickerDialog colorPickerDialog);
void inject(RecordAudioDialog recordAudioDialog);
void inject(CustomRecurrenceDialog customRecurrenceDialog);
@ -61,4 +60,8 @@ public interface DialogFragmentComponent {
void inject(LocalePickerDialog localePickerDialog);
void inject(ThemePickerDialog themePickerDialog);
void inject(ColorWheelPicker colorWheelPicker);
void inject(ColorPalettePicker colorPalettePicker);
}

@ -9,8 +9,6 @@ import android.os.Bundle
import android.os.Handler
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.DrawableCompat
import androidx.preference.ListPreference
import androidx.preference.Preference
import com.google.common.base.Strings
@ -20,12 +18,15 @@ import com.todoroo.astrid.api.Filter
import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.activities.ColorPickerActivity
import org.tasks.activities.ColorPickerActivity.ColorPalette.*
import org.tasks.activities.FilterSelectionActivity
import org.tasks.activities.TimePickerActivity
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
import org.tasks.dialogs.ColorWheelPicker
import org.tasks.dialogs.ColorWheelPicker.Companion.newColorWheel
import org.tasks.dialogs.ColorPalettePicker
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter
import org.tasks.dialogs.ThemePickerDialog
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.gtasks.PlayServices
@ -61,6 +62,7 @@ private const val REQUEST_EVENING = 10009
private const val REQUEST_NIGHT = 10010
private const val FRAG_TAG_LOCALE_PICKER = "frag_tag_locale_picker"
private const val FRAG_TAG_THEME_PICKER = "frag_tag_theme_picker"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChangeListener {
@ -89,7 +91,7 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
themePref.summary = themeBase.name
themePref.setOnPreferenceClickListener {
newThemePickerDialog(this, REQUEST_THEME_PICKER, themeBase.index)
.show(parentFragmentManager, FRAG_TAG_THEME_PICKER)
.show(parentFragmentManager, FRAG_TAG_THEME_PICKER)
false
}
@ -140,12 +142,17 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
override fun onResume() {
super.onResume()
setupColorPreference(R.string.p_theme_color, themeColor.pickerColor, COLORS, REQUEST_COLOR_PICKER)
setupColorPreference(
R.string.p_theme_accent,
themeAccent.pickerColor,
ACCENTS,
REQUEST_ACCENT_PICKER
R.string.p_theme_color,
themeColor.pickerColor,
ColorPickerAdapter.Palette.COLORS,
REQUEST_COLOR_PICKER
)
setupColorPreference(
R.string.p_theme_accent,
themeAccent.pickerColor,
ColorPickerAdapter.Palette.ACCENTS,
REQUEST_ACCENT_PICKER
)
updateLauncherPreference()
@ -158,7 +165,10 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
private fun updateLauncherPreference() {
val launcher = themeCache.getThemeColor(preferences.getInt(R.string.p_theme_launcher, 7))
setupColorPreference(
R.string.p_theme_launcher, launcher.pickerColor, LAUNCHER, REQUEST_LAUNCHER_PICKER
R.string.p_theme_launcher,
launcher.pickerColor,
ColorPickerAdapter.Palette.LAUNCHERS,
REQUEST_LAUNCHER_PICKER
)
}
@ -254,39 +264,49 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
if (requestCode == REQUEST_PURCHASE) {
val index = if (inventory.hasPro()) {
data?.getIntExtra(ThemePickerDialog.EXTRA_SELECTED, themeBase.index)
?: themeBase.index
?: themeBase.index
} else {
preferences.getInt(R.string.p_theme, 0)
}
setBaseTheme(index)
} else if (requestCode == REQUEST_THEME_PICKER) {
val index = data?.getIntExtra(ThemePickerDialog.EXTRA_SELECTED, themeBase.index)
?: preferences.getInt(R.string.p_theme, 0)
?: preferences.getInt(R.string.p_theme, 0)
if (resultCode == RESULT_OK) {
if (inventory.hasPro() || index < 2) {
setBaseTheme(index)
} else {
startActivityForResult(Intent(context, PurchaseActivity::class.java), REQUEST_PURCHASE)
startActivityForResult(
Intent(context, PurchaseActivity::class.java),
REQUEST_PURCHASE
)
}
} else {
setBaseTheme(index)
}
} else if (requestCode == REQUEST_COLOR_PICKER) {
if (resultCode == RESULT_OK) {
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()
val color = data?.getIntExtra(
ColorWheelPicker.EXTRA_SELECTED,
themeColor.primaryColor
)
?: themeColor.primaryColor
if (preferences.getInt(R.string.p_theme_color, -1) != color) {
preferences.setInt(R.string.p_theme_color, color)
recreate()
}
}
} else if (requestCode == REQUEST_ACCENT_PICKER) {
if (resultCode == RESULT_OK) {
val index = data!!.getIntExtra(ColorPickerActivity.EXTRA_COLOR, 0)
preferences.setInt(R.string.p_theme_accent, index)
recreate()
val index = data!!.getIntExtra(ColorPalettePicker.EXTRA_SELECTED, 0)
if (preferences.getInt(R.string.p_theme_accent, -1) != index) {
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_COLOR, 0)
val index = data!!.getIntExtra(ColorPalettePicker.EXTRA_SELECTED, 0)
setLauncherIcon(index)
preferences.setInt(R.string.p_theme_launcher, index)
updateLauncherPreference()
@ -361,15 +381,20 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
}
private fun setupColorPreference(
@StringRes prefId: Int, color: Int,
palette: ColorPickerActivity.ColorPalette,
requestCode: Int
@StringRes prefId: Int,
color: Int,
palette: ColorPickerAdapter.Palette,
requestCode: Int
) {
tintIcon(prefId, color)
findPreference(prefId).setOnPreferenceClickListener {
val intent = Intent(context, ColorPickerActivity::class.java)
intent.putExtra(ColorPickerActivity.EXTRA_PALETTE, palette)
startActivityForResult(intent, requestCode)
if (palette == ColorPickerAdapter.Palette.COLORS) {
newColorWheel(this, requestCode, color)
.show(parentFragmentManager, FRAG_TAG_COLOR_PICKER)
} else {
newColorPalette(this, requestCode, palette)
.show(parentFragmentManager, FRAG_TAG_COLOR_PICKER)
}
false
}
}

@ -10,15 +10,18 @@ import androidx.preference.SwitchPreferenceCompat
import com.todoroo.astrid.api.Filter
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.activities.ColorPickerActivity
import org.tasks.activities.FilterSelectionActivity
import org.tasks.dialogs.ColorWheelPicker
import org.tasks.dialogs.ColorWheelPicker.Companion.newColorWheel
import org.tasks.dialogs.ColorPalettePicker
import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette
import org.tasks.dialogs.ColorPickerAdapter
import org.tasks.injection.FragmentComponent
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.Locale
import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences
import org.tasks.themes.ThemeCache
import org.tasks.themes.ThemeColor
import org.tasks.themes.WidgetTheme
import org.tasks.widget.TasksWidget
import org.tasks.widget.WidgetPreferences
@ -33,6 +36,8 @@ const val EXTRA_WIDGET_ID = "extra_widget_id"
class ScrollableWidget : InjectingPreferenceFragment() {
companion object {
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
fun newScrollableWidget(appWidgetId: Int): ScrollableWidget {
val widget = ScrollableWidget()
val args = Bundle()
@ -76,28 +81,16 @@ class ScrollableWidget : InjectingPreferenceFragment() {
findPreference(R.string.p_widget_theme)
.setOnPreferenceClickListener {
val intent = Intent(context, ColorPickerActivity::class.java)
intent.putExtra(
ColorPickerActivity.EXTRA_PALETTE,
ColorPickerActivity.ColorPalette.WIDGET_BACKGROUND
)
intent.putExtra(
ColorPickerActivity.EXTRA_COLOR, widgetPreferences.themeIndex
)
startActivityForResult(intent, REQUEST_THEME_SELECTION)
newColorPalette(this, REQUEST_THEME_SELECTION, ColorPickerAdapter.Palette.WIDGET_BACKGROUND)
.show(parentFragmentManager, FRAG_TAG_COLOR_PICKER)
false
}
val colorPreference = findPreference(R.string.p_widget_color)
val colorPreference = findPreference(R.string.p_widget_color_v2)
colorPreference.dependency = showHeader.key
colorPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val intent = Intent(context, ColorPickerActivity::class.java)
intent.putExtra(
ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS
)
val color = ThemeColor.COLORS[widgetPreferences.colorIndex]
intent.putExtra(ColorPickerActivity.EXTRA_COLOR, color)
startActivityForResult(intent, REQUEST_COLOR_SELECTION)
newColorWheel(this, REQUEST_COLOR_SELECTION, widgetPreferences.color)
.show(parentFragmentManager, FRAG_TAG_COLOR_PICKER)
false
}
@ -117,20 +110,18 @@ class ScrollableWidget : InjectingPreferenceFragment() {
} else if (requestCode == REQUEST_THEME_SELECTION) {
if (resultCode == Activity.RESULT_OK) {
widgetPreferences.setTheme(
data!!.getIntExtra(
ColorPickerActivity.EXTRA_COLOR,
data?.getIntExtra(
ColorPalettePicker.EXTRA_SELECTED,
0
)
) ?: widgetPreferences.themeIndex
)
updateTheme()
}
} else if (requestCode == REQUEST_COLOR_SELECTION) {
if (resultCode == Activity.RESULT_OK) {
widgetPreferences.setColor(
data!!.getIntExtra(
ColorPickerActivity.EXTRA_COLOR,
0
)
widgetPreferences.color = data!!.getIntExtra(
ColorWheelPicker.EXTRA_SELECTED,
0
)
updateColor()
}
@ -156,8 +147,7 @@ class ScrollableWidget : InjectingPreferenceFragment() {
}
private fun updateColor() {
val themeColor: ThemeColor = themeCache.getThemeColor(widgetPreferences.colorIndex)
findPreference(R.string.p_widget_color).summary = themeColor.name
tintIcon(R.string.p_widget_color_v2, widgetPreferences.color)
}
private fun updateFilter() {

@ -12,8 +12,10 @@ public class ColorUtil {
* @return darken color
*/
static int darken(int base, int amount) {
if (base == 0 || base == -1) {
return base;
if (base == Color.WHITE) {
return Color.WHITE;
} else if (base == Color.BLACK) {
return Color.BLACK;
}
float[] hsv = new float[3];

@ -4,9 +4,9 @@ import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
import org.tasks.R;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.ColorPalettePicker.Pickable;
public class ThemeAccent implements ColorPickerDialog.Pickable {
public class ThemeAccent implements Pickable {
static final int[] ACCENTS =
new int[] {
@ -40,20 +40,17 @@ public class ThemeAccent implements ColorPickerDialog.Pickable {
return new ThemeAccent[size];
}
};
private final String name;
private final int index;
private final int style;
private final int accentColor;
public ThemeAccent(String name, int index, int accentColor) {
this.name = name;
public ThemeAccent(int index, int accentColor) {
this.index = index;
this.style = ACCENTS[index];
this.accentColor = accentColor;
}
private ThemeAccent(Parcel source) {
name = source.readString();
index = source.readInt();
style = source.readInt();
accentColor = source.readInt();
@ -63,11 +60,6 @@ public class ThemeAccent implements ColorPickerDialog.Pickable {
theme.applyStyle(style, true);
}
@Override
public String getName() {
return name;
}
@Override
public int getPickerColor() {
return accentColor;
@ -100,7 +92,6 @@ public class ThemeAccent implements ColorPickerDialog.Pickable {
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(index);
dest.writeInt(style);
dest.writeInt(accentColor);

@ -8,9 +8,9 @@ import android.os.Parcelable;
import android.view.ContextThemeWrapper;
import androidx.appcompat.app.AppCompatDelegate;
import org.tasks.R;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.ColorPalettePicker.Pickable;
public class ThemeBase implements ColorPickerDialog.Pickable {
public class ThemeBase implements Pickable {
private static final int[] THEMES =
new int[] {
@ -50,7 +50,6 @@ public class ThemeBase implements ColorPickerDialog.Pickable {
dayNightMode = source.readInt();
}
@Override
public String getName() {
return name;
}

@ -70,16 +70,13 @@ public class ThemeCache {
getColor(context, R.color.grey_50),
AppCompatDelegate.MODE_NIGHT_AUTO));
String[] colorNames = resources.getStringArray(R.array.colors);
for (int i = 0; i < ThemeColor.COLORS.length; i++) {
colors.add(
new ThemeColor(
context, colorNames[i], i, ContextCompat.getColor(context, ThemeColor.COLORS[i])));
new ThemeColor(context, i, ContextCompat.getColor(context, ThemeColor.COLORS[i])));
}
String[] accentNames = resources.getStringArray(R.array.accents);
for (int i = 0; i < ThemeAccent.ACCENTS.length; i++) {
Resources.Theme theme = new ContextThemeWrapper(context, ThemeAccent.ACCENTS[i]).getTheme();
accents.add(new ThemeAccent(accentNames[i], i, resolveAttribute(theme, R.attr.colorSecondary)));
accents.add(new ThemeAccent(i, resolveAttribute(theme, R.attr.colorSecondary)));
}
String[] widgetBackgroundNames = resources.getStringArray(R.array.widget_background);
for (int i = 0; i < WidgetTheme.BACKGROUNDS.length; i++) {
@ -92,7 +89,7 @@ public class ThemeCache {
getColor(context, i == 0 ? R.color.black_54 : R.color.white_70)));
}
untaggedColor =
new ThemeColor(context, null, 19, getColor(context, R.color.tag_color_none_background));
new ThemeColor(context, 19, getColor(context, R.color.tag_color_none_background));
}
private static int resolveAttribute(Resources.Theme theme, int attribute) {

@ -24,10 +24,10 @@ 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 org.tasks.dialogs.ColorPalettePicker.Pickable;
import timber.log.Timber;
public class ThemeColor implements ColorPickerDialog.Pickable {
public class ThemeColor implements Pickable {
public static final int[] ICONS =
new int[] {
@ -114,10 +114,8 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
return new ThemeColor[size];
}
};
private final String name;
private final int index;
private final int colorOnPrimary;
private final int color;
private final int colorPrimary;
private final int colorPrimaryVariant;
private final boolean isDark;
@ -132,17 +130,14 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
}
public ThemeColor(Context context, int color) {
this(context, null, -1, color == 0 ? ContextCompat.getColor(context, R.color.blue_500) : color);
this(context, -1, color == 0 ? ContextCompat.getColor(context, R.color.blue_500) : color);
}
public ThemeColor(
Context context,
String name,
int index,
int colorPrimary) {
this.name = name;
this.index = index;
this.color = index >= 0 ? COLORS[index] : -1;
colorPrimary |= 0xFF000000; // remove alpha
this.colorPrimary = colorPrimary;
this.colorPrimaryVariant = ColorUtil.darken(colorPrimary, 12);
@ -154,10 +149,8 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
}
private ThemeColor(Parcel source) {
name = source.readString();
index = source.readInt();
colorOnPrimary = source.readInt();
color = source.readInt();
colorPrimary = source.readInt();
colorPrimaryVariant = source.readInt();
isDark = source.readInt() == 1;
@ -237,11 +230,6 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
}
}
@Override
public String getName() {
return name;
}
@Override
public int getPickerColor() {
return colorPrimary;
@ -249,10 +237,10 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
@Override
public boolean isFree() {
switch (color) {
case R.color.blue_500:
case R.color.blue_grey_500:
case R.color.grey_900:
switch (colorPrimary) {
case -14575885: // blue_500
case -10453621: // blue_grey_500
case -14606047: // grey_900
return true;
default:
return false;
@ -286,10 +274,8 @@ public class ThemeColor implements ColorPickerDialog.Pickable {
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(index);
dest.writeInt(colorOnPrimary);
dest.writeInt(color);
dest.writeInt(colorPrimary);
dest.writeInt(colorPrimaryVariant);
dest.writeInt(isDark ? 1 : 0);

@ -3,9 +3,9 @@ package org.tasks.themes;
import android.os.Parcel;
import android.os.Parcelable;
import org.tasks.R;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.ColorPalettePicker.Pickable;
public class WidgetTheme implements ColorPickerDialog.Pickable {
public class WidgetTheme implements Pickable {
static final int[] BACKGROUNDS =
new int[] {R.color.grey_50, R.color.widget_background_black, R.color.md_background_dark};
@ -56,7 +56,6 @@ public class WidgetTheme implements ColorPickerDialog.Pickable {
return textColorSecondary;
}
@Override
public String getName() {
return name;
}

@ -3,10 +3,13 @@ package org.tasks.widget;
import android.app.Activity;
import android.content.Intent;
import android.content.Intent.ShortcutIconResource;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import android.os.Parcelable;
import android.widget.ImageView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -17,22 +20,23 @@ import com.google.common.base.Strings;
import com.todoroo.astrid.api.Filter;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.activities.ColorPickerActivity;
import org.tasks.activities.ColorPickerActivity.ColorPalette;
import org.tasks.activities.FilterSelectionActivity;
import org.tasks.dialogs.ColorPalettePicker;
import org.tasks.dialogs.ColorPickerAdapter.Palette;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
import org.tasks.intents.TaskIntents;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.themes.ThemeCache;
import org.tasks.themes.ThemeColor;
public class ShortcutConfigActivity extends InjectingAppCompatActivity {
public class ShortcutConfigActivity extends ThemedInjectingAppCompatActivity
implements ColorPalettePicker.ColorPickedCallback {
private static final String EXTRA_FILTER = "extra_filter";
private static final String EXTRA_THEME = "extra_theme";
private static final String FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker";
private static final int REQUEST_FILTER = 1019;
private static final int REQUEST_COLOR_PICKER = 1020;
@Inject DefaultFilterProvider defaultFilterProvider;
@Inject ThemeColor themeColor;
@ -50,8 +54,8 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
@BindView(R.id.shortcut_name)
TextInputEditText shortcutName;
@BindView(R.id.shortcut_color)
TextInputEditText shortcutColor;
@BindView(R.id.color)
ImageView colorIcon;
private Filter selectedFilter;
private int selectedTheme;
@ -89,11 +93,6 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
selectedFilter = data.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER);
updateFilterAndTheme();
}
} else if (requestCode == REQUEST_COLOR_PICKER) {
if (resultCode == RESULT_OK) {
selectedTheme = data.getIntExtra(ColorPickerActivity.EXTRA_COLOR, 0);
updateTheme();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
@ -123,21 +122,10 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
startActivityForResult(intent, REQUEST_FILTER);
}
@OnFocusChange(R.id.shortcut_color)
void onColorFocusChange(boolean focused) {
if (focused) {
shortcutColor.clearFocus();
showThemePicker();
}
}
@OnClick(R.id.shortcut_color)
@OnClick(R.id.color_row)
void showThemePicker() {
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_COLOR, selectedTheme);
startActivityForResult(intent, REQUEST_COLOR_PICKER);
ColorPalettePicker.Companion.newColorPalette(null, 0, Palette.LAUNCHERS)
.show(getSupportFragmentManager(), FRAG_TAG_COLOR_PICKER);
}
private void updateFilterAndTheme() {
@ -152,7 +140,8 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
private void updateTheme() {
ThemeColor color = themeCache.getThemeColor(getThemeIndex());
shortcutColor.setText(color.getName());
DrawableCompat.setTint(
((LayerDrawable) colorIcon.getDrawable()).getDrawable(0), color.getPrimaryColor());
color.apply(toolbar);
color.applyToSystemBars(this);
}
@ -182,4 +171,10 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
public void inject(ActivityComponent component) {
component.inject(this);
}
@Override
public void onColorPicked(int color) {
selectedTheme = color;
updateTheme();
}
}

@ -75,7 +75,7 @@ public class TasksWidget extends InjectingAppWidgetProvider {
rvIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
rvIntent.setData(Uri.parse(rvIntent.toUri(Intent.URI_INTENT_SCHEME)));
WidgetTheme theme = themeCache.getWidgetTheme(widgetPreferences.getThemeIndex());
ThemeColor color = themeCache.getThemeColor(widgetPreferences.getColorIndex());
ThemeColor color = ThemeColor.newThemeColor(context, widgetPreferences.getColor());
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.scrollable_widget);
if (atLeastJellybeanMR1()) {
remoteViews.setInt(R.id.widget, "setLayoutDirection", locale.getDirectionality());

@ -1,8 +1,10 @@
package org.tasks.widget;
import android.content.Context;
import androidx.core.content.ContextCompat;
import org.tasks.R;
import org.tasks.preferences.Preferences;
import org.tasks.themes.ThemeColor;
public class WidgetPreferences {
@ -44,8 +46,18 @@ public class WidgetPreferences {
return preferences.getInt(getKey(R.string.p_widget_theme), 0);
}
public int getColorIndex() {
return preferences.getInt(getKey(R.string.p_widget_color), 0);
public int getColor() {
int color = preferences.getInt(getKey(R.string.p_widget_color_v2), 0);
if (color != 0) {
return color;
}
int index = preferences.getInt(getKey(R.string.p_widget_color), -1);
if (index < 0 || index > ThemeColor.COLORS.length) {
index = 7;
}
color = ContextCompat.getColor(context, ThemeColor.COLORS[index]);
preferences.setInt(getKey(R.string.p_widget_color_v2), color);
return color;
}
public int getOpacity() {
@ -56,8 +68,8 @@ public class WidgetPreferences {
preferences.setInt(getKey(R.string.p_widget_opacity), value);
}
public void setColor(int index) {
preferences.setInt(getKey(R.string.p_widget_color), index);
public void setColor(int color) {
preferences.setInt(getKey(R.string.p_widget_color_v2), color);
}
public void setTheme(int index) {

@ -2,37 +2,30 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent" >
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/shortcut_list_layout"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/keyline_first"
android:layout_marginLeft="@dimen/keyline_first"
android:layout_marginTop="16dp"
android:layout_marginEnd="@dimen/keyline_first"
android:layout_marginRight="@dimen/keyline_first"
android:hint="@string/list"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
style="@style/TagSettingsRow"
app:layout_constraintStart_toStartOf="@+id/shortcut_name_layout"
app:layout_constraintTop_toBottomOf="@+id/shortcut_name_layout">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/shortcut_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<include layout="@layout/list_settings_color" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/shortcut_name_layout"
style="@style/TagSettingsRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/keyline_first"
android:layout_marginLeft="@dimen/keyline_first"
android:layout_marginTop="8dp"
android:layout_marginStart="@dimen/keyline_first"
android:layout_marginEnd="@dimen/keyline_first"
android:layout_marginLeft="@dimen/keyline_first"
android:layout_marginRight="@dimen/keyline_first"
android:hint="@string/display_name"
app:layout_constraintEnd_toEndOf="parent"
@ -47,20 +40,22 @@
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/shortcut_list_layout"
style="@style/TagSettingsRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginStart="@dimen/keyline_first"
android:layout_marginLeft="@dimen/keyline_first"
android:layout_marginTop="8dp"
android:layout_marginEnd="@dimen/keyline_first"
android:layout_marginLeft="@dimen/keyline_first"
android:layout_marginRight="@dimen/keyline_first"
android:hint="@string/color"
android:hint="@string/list"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/shortcut_name_layout"
app:layout_constraintTop_toBottomOf="@+id/shortcut_name_layout">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/shortcut_color"
android:id="@+id/shortcut_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@ -5,8 +5,7 @@
android:layout_height="match_parent"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:background="@color/content_background">
android:orientation="vertical">
<include layout="@layout/toolbar"/>

@ -145,7 +145,6 @@
<string name="show_hidden">عرض المهام المخفية</string>
<string name="show_completed">إظهار المكتملة</string>
<string name="opacity">التعتيم</string>
<string name="theme_white">أبيض</string>
<string name="settings_localization">تخصيص اللغة و الجهة</string>
<string name="backup_BAc_export">تصدير المهام</string>
</resources>

@ -372,28 +372,7 @@
<string name="color">Цвят</string>
<string name="accent">Акцент</string>
<string name="launcher_icon">Иконка на лаунчера</string>
<string name="theme_red">Червен</string>
<string name="theme_pink">Розов</string>
<string name="theme_purple">Лилав</string>
<string name="theme_deep_purple">Тъмно лилав</string>
<string name="theme_indigo">Индиго</string>
<string name="theme_blue">Син</string>
<string name="theme_light_blue">Светло син</string>
<string name="theme_cyan">Синьозелен</string>
<string name="theme_teal">Тюркоаз</string>
<string name="theme_green">Зелен</string>
<string name="theme_light_green">Светло зелен</string>
<string name="theme_lime">Лайм</string>
<string name="theme_yellow">Жълт</string>
<string name="theme_amber">Кехлибар</string>
<string name="theme_orange">Оранжев</string>
<string name="theme_deep_orange">Тъмно оранжева</string>
<string name="theme_brown">Кафяв</string>
<string name="theme_grey">Сив</string>
<string name="theme_blue_grey">Синьо-сив</string>
<string name="theme_black">Черен</string>
<string name="theme_dark_grey">Тъмно сива</string>
<string name="theme_white">Бяла</string>
<string name="theme_light">Светла</string>
<string name="theme_dark">Тъмна</string>
<string name="theme_wallpaper">Тапет</string>

@ -102,7 +102,6 @@
<string name="show_hidden">Mostra ocultes</string>
<string name="show_completed">Mostra completades</string>
<string name="reverse">Ordenació inversa</string>
<string name="theme_white">Blanc</string>
<string name="language">Idioma</string>
<string name="settings_localization">Localització</string>
<string name="led_notification">Led de notificació</string>

@ -233,24 +233,8 @@
<string name="opacity">Průhlednost</string>
<string name="theme">Vzhled</string>
<string name="color">Barva</string>
<string name="theme_red">Červená</string>
<string name="theme_pink">Růžová</string>
<string name="theme_purple">Purpurová</string>
<string name="theme_blue">Modrá</string>
<string name="theme_light_blue">Světle modrá</string>
<string name="theme_cyan">Tyrkysová</string>
<string name="theme_green">Zelená</string>
<string name="theme_light_green">Světle zelená</string>
<string name="theme_lime">Limetková</string>
<string name="theme_yellow">Žlutá</string>
<string name="theme_amber">Jantarová</string>
<string name="theme_orange">Oranžová</string>
<string name="theme_brown">Hnědá</string>
<string name="theme_grey">Šedá</string>
<string name="theme_blue_grey">Modrošedá</string>
<string name="theme_black">Černá</string>
<string name="theme_white">Bílý</string>
<string name="theme_light">Světlý</string>
<string name="theme_black">Černá</string>
<string name="theme_light">Světlý</string>
<string name="theme_dark">Tmavý</string>
<string name="theme_wallpaper">Tapeta</string>
<string name="theme_day_night">Den/Noc</string>

@ -363,26 +363,8 @@
<string name="color">Farbe</string>
<string name="accent">Akzent</string>
<string name="launcher_icon">Startersymbol</string>
<string name="theme_red">Rot</string>
<string name="theme_purple">Lila</string>
<string name="theme_deep_purple">Dunkel-Lila</string>
<string name="theme_indigo">Indigoblau</string>
<string name="theme_blue">Blau</string>
<string name="theme_light_blue">Hellblau</string>
<string name="theme_teal">Blaugrün</string>
<string name="theme_green">Grün</string>
<string name="theme_light_green">Hellgrün</string>
<string name="theme_lime">Limette</string>
<string name="theme_yellow">Gelb</string>
<string name="theme_amber">Bernstein</string>
<string name="theme_deep_orange">Dunkelorange</string>
<string name="theme_brown">Braun</string>
<string name="theme_grey">Grau</string>
<string name="theme_blue_grey">Blaugrau</string>
<string name="theme_black">Schwarz</string>
<string name="theme_dark_grey">Dunkelgrau</string>
<string name="theme_white">Weiß</string>
<string name="theme_light">Hell</string>
<string name="theme_black">Schwarz</string>
<string name="theme_light">Hell</string>
<string name="theme_dark">Dunkel</string>
<string name="theme_wallpaper">Hintergrundbild</string>
<string name="theme_day_night">Tag/Nacht</string>
@ -505,10 +487,7 @@
<string name="location_radius_meters">%s m</string>
<string name="filter">Filter</string>
<string name="theme">Thema</string>
<string name="theme_pink">Rosa</string>
<string name="theme_cyan">Cyan</string>
<string name="theme_orange">Orange</string>
<string name="url">URL</string>
<string name="url">URL</string>
<string name="list_separator_with_space">", "</string>
<string name="version_string">Version %s</string>
<string name="error_adding_account">Fehler: %s</string>

@ -371,29 +371,8 @@
<string name="theme">Tema</string>
<string name="accent">Acentuado</string>
<string name="launcher_icon">Icono de Launcher</string>
<string name="theme_red">Rojo</string>
<string name="theme_pink">Rosa</string>
<string name="theme_purple">Morado</string>
<string name="theme_deep_purple">Morado profundo</string>
<string name="theme_indigo">Añil</string>
<string name="theme_blue">Azul</string>
<string name="theme_light_blue">Azul claro</string>
<string name="theme_cyan">Cian</string>
<string name="theme_teal">Verde azulado</string>
<string name="theme_green">Verde</string>
<string name="theme_light_green">Verde claro</string>
<string name="theme_lime">Lima</string>
<string name="theme_yellow">Amarillo</string>
<string name="theme_amber">Ámbar</string>
<string name="theme_orange">Naranja</string>
<string name="theme_deep_orange">Naranja profundo</string>
<string name="theme_brown">Marrón</string>
<string name="theme_grey">Gris</string>
<string name="theme_blue_grey">Gris azulado</string>
<string name="theme_black">Negro</string>
<string name="theme_dark_grey">Gris oscuro</string>
<string name="theme_white">Blanco</string>
<string name="theme_light">Claro</string>
<string name="theme_black">Negro</string>
<string name="theme_light">Claro</string>
<string name="theme_dark">Oscuro</string>
<string name="theme_wallpaper">Fondo de pantalla</string>
<string name="theme_day_night">Día/Noche</string>

@ -233,24 +233,7 @@
<string name="theme">Teema</string>
<string name="color">Värv</string>
<string name="launcher_icon">Rakenduse ikoon</string>
<string name="theme_red">Punane</string>
<string name="theme_pink">Roosa</string>
<string name="theme_purple">Lilla</string>
<string name="theme_deep_purple">Tumelilla</string>
<string name="theme_blue">Sinine</string>
<string name="theme_light_blue">Helesinine</string>
<string name="theme_light_green">Heleroheline</string>
<string name="theme_lime">Laim</string>
<string name="theme_yellow">Kollane</string>
<string name="theme_amber">Merevaik</string>
<string name="theme_orange">Oraanž</string>
<string name="theme_deep_orange">Tume osaanž</string>
<string name="theme_brown">Pruun</string>
<string name="theme_grey">Hall</string>
<string name="theme_blue_grey">Sinakashall</string>
<string name="theme_black">Must</string>
<string name="theme_dark_grey">Tumehall</string>
<string name="theme_white">Valge</string>
<string name="theme_light">Hele</string>
<string name="theme_dark">Tume</string>
<string name="theme_wallpaper">Taustapilt</string>

@ -377,28 +377,7 @@
<string name="color">Kolorea</string>
<string name="accent">Azentua</string>
<string name="launcher_icon">Abiarazlearen ikonoa</string>
<string name="theme_red">Gorria</string>
<string name="theme_pink">Arrosa</string>
<string name="theme_purple">Morea</string>
<string name="theme_deep_purple">More sakona</string>
<string name="theme_indigo">Indigoa</string>
<string name="theme_blue">Urdina</string>
<string name="theme_light_blue">Urdin argia</string>
<string name="theme_cyan">Ziana</string>
<string name="theme_teal">Berde urdinxka</string>
<string name="theme_green">Berdea</string>
<string name="theme_light_green">Berde argia</string>
<string name="theme_lime">Lima</string>
<string name="theme_yellow">Horia</string>
<string name="theme_amber">Anbara</string>
<string name="theme_orange">Laranja</string>
<string name="theme_deep_orange">Laranja sakona</string>
<string name="theme_brown">Marroia</string>
<string name="theme_grey">Grisa</string>
<string name="theme_blue_grey">Gris urdinxka</string>
<string name="theme_black">Beltza</string>
<string name="theme_dark_grey">Gris iluna</string>
<string name="theme_white">Zuria</string>
<string name="theme_light">Argia</string>
<string name="theme_dark">Iluna</string>
<string name="theme_wallpaper">Horma-papera</string>

@ -231,16 +231,6 @@
<string name="opacity">شفافیت</string>
<string name="theme">تم</string>
<string name="color">رنگ</string>
<string name="theme_red">قرمز</string>
<string name="theme_pink">صورتی</string>
<string name="theme_purple">بنفش</string>
<string name="theme_blue">آبی</string>
<string name="theme_green">سبز</string>
<string name="theme_yellow">زرد</string>
<string name="theme_orange">نارنجی</string>
<string name="theme_brown">قهوه ای</string>
<string name="theme_grey">خاکستری</string>
<string name="theme_white">سفید</string>
<string name="theme_light">روشن</string>
<string name="theme_dark">تیره</string>
<string name="language">زبان</string>

@ -347,28 +347,7 @@
<string name="theme">Teema</string>
<string name="color">Väri</string>
<string name="accent">Sävy</string>
<string name="theme_red">Pun.</string>
<string name="theme_pink">Pinkki</string>
<string name="theme_purple">Purppura</string>
<string name="theme_deep_purple">Tumma purppura</string>
<string name="theme_indigo">Sininen</string>
<string name="theme_blue">Sininen</string>
<string name="theme_light_blue">Vaalea sininen</string>
<string name="theme_cyan">Syaani</string>
<string name="theme_teal">Sinivihreä</string>
<string name="theme_green">Vihreä</string>
<string name="theme_light_green">Vaalea vihreä</string>
<string name="theme_lime">LIme</string>
<string name="theme_yellow">Keltainen</string>
<string name="theme_amber">Kullanruskea</string>
<string name="theme_orange">Oranssi</string>
<string name="theme_deep_orange">Tumma oranssi</string>
<string name="theme_brown">Ruskea</string>
<string name="theme_grey">Harmaa</string>
<string name="theme_blue_grey">Siniharmaa</string>
<string name="theme_black">Musta</string>
<string name="theme_dark_grey">Tumma harmaa</string>
<string name="theme_white">Valkoinen</string>
<string name="theme_light">Vaalea</string>
<string name="theme_dark">Tumma</string>
<string name="theme_wallpaper">Taustakuva</string>

@ -353,26 +353,8 @@
<string name="theme">Thème</string>
<string name="color">Couleur</string>
<string name="launcher_icon">Icône du lanceur</string>
<string name="theme_red">Rouge</string>
<string name="theme_pink">Rose</string>
<string name="theme_purple">Violet</string>
<string name="theme_deep_purple">Violet foncé</string>
<string name="theme_blue">Bleu</string>
<string name="theme_light_blue">Bleu clair</string>
<string name="theme_teal">Turquoise</string>
<string name="theme_green">Vert</string>
<string name="theme_light_green">Vert clair</string>
<string name="theme_lime">Citron</string>
<string name="theme_yellow">Jaune</string>
<string name="theme_amber">Ambre</string>
<string name="theme_deep_orange">Orange foncé</string>
<string name="theme_brown">Marron</string>
<string name="theme_grey">Gris</string>
<string name="theme_blue_grey">Bleu gris</string>
<string name="theme_black">Noir</string>
<string name="theme_dark_grey">Gris sombre</string>
<string name="theme_white">Blanc</string>
<string name="theme_light">Lumineux</string>
<string name="theme_black">Noir</string>
<string name="theme_light">Lumineux</string>
<string name="theme_dark">Sombre</string>
<string name="theme_wallpaper">Fond d\'écran</string>
<string name="theme_day_night">Jour/Nuit</string>
@ -506,10 +488,7 @@ est configuré correctement</string>
<string name="location_radius_meters">%s m</string>
<string name="tags">Catégories</string>
<string name="accent">Accent</string>
<string name="theme_indigo">Indigo</string>
<string name="theme_cyan">Cyan</string>
<string name="theme_orange">Orange</string>
<string name="badges">Badges</string>
<string name="badges">Badges</string>
<string name="list_separator_with_space">", "</string>
<string name="version_string">Version %s</string>
<string name="icon">Icône</string>

@ -268,28 +268,7 @@
<string name="theme">Tema</string>
<string name="color">Cor</string>
<string name="accent">Acentuado</string>
<string name="theme_red">Rojo</string>
<string name="theme_pink">Rosa</string>
<string name="theme_purple">Morado</string>
<string name="theme_deep_purple">Morado profundo</string>
<string name="theme_indigo">Añil</string>
<string name="theme_blue">Azul</string>
<string name="theme_light_blue">Azul claro</string>
<string name="theme_cyan">Cian</string>
<string name="theme_teal">Verde azulado</string>
<string name="theme_green">Verde</string>
<string name="theme_light_green">Verde claro</string>
<string name="theme_lime">Lima</string>
<string name="theme_yellow">Amarillo</string>
<string name="theme_amber">Ámbar</string>
<string name="theme_orange">Naranja</string>
<string name="theme_deep_orange">Naranja profundo</string>
<string name="theme_brown">Marrón</string>
<string name="theme_grey">Gris</string>
<string name="theme_blue_grey">Gris azulado</string>
<string name="theme_black">Negro</string>
<string name="theme_dark_grey">Gris oscuro</string>
<string name="theme_white">Blanco</string>
<string name="theme_light">Claro</string>
<string name="theme_dark">Oscuro</string>
<string name="theme_wallpaper">Fondo de pantalla</string>

@ -371,29 +371,8 @@
<string name="color">Szín</string>
<string name="accent">Kiemelés</string>
<string name="launcher_icon">Launcher ikon</string>
<string name="theme_red">Piros</string>
<string name="theme_pink">Rózsaszín</string>
<string name="theme_purple">Lila</string>
<string name="theme_deep_purple">Bíbor</string>
<string name="theme_indigo">Sötétkék</string>
<string name="theme_blue">Kék</string>
<string name="theme_light_blue">Világoskék</string>
<string name="theme_cyan">Cián</string>
<string name="theme_teal">Zöldeskék</string>
<string name="theme_green">Zöld</string>
<string name="theme_light_green">Világoszöld</string>
<string name="theme_lime">Sárgászöld</string>
<string name="theme_yellow">Sárga</string>
<string name="theme_amber">Borostyán</string>
<string name="theme_orange">Narancs</string>
<string name="theme_deep_orange">Sötétnarancs</string>
<string name="theme_brown">Barna</string>
<string name="theme_grey">Szürke</string>
<string name="theme_blue_grey">Szürkéskék</string>
<string name="theme_black">Fekete</string>
<string name="theme_dark_grey">Sötétszürke</string>
<string name="theme_white">Fehér</string>
<string name="theme_light">Világos</string>
<string name="theme_black">Fekete</string>
<string name="theme_light">Világos</string>
<string name="theme_dark">Sötét</string>
<string name="theme_wallpaper">Háttérkép</string>
<string name="theme_day_night">Nappal/Éjszaka</string>

@ -287,26 +287,8 @@
<string name="icon">Ikon</string>
<string name="accent">Aksen</string>
<string name="launcher_icon">Ikon peluncur</string>
<string name="theme_red">Merah</string>
<string name="theme_pink">Merah muda</string>
<string name="theme_purple">Ungu</string>
<string name="theme_deep_purple">Ungu gelap</string>
<string name="theme_indigo">Nila</string>
<string name="theme_blue">Biru</string>
<string name="theme_light_blue">Biru cerah</string>
<string name="theme_green">Hijau</string>
<string name="theme_light_green">Hujau cerah</string>
<string name="theme_lime">Kapur</string>
<string name="theme_yellow">Kuning</string>
<string name="theme_orange">Oranye</string>
<string name="theme_deep_orange">Oranye gelap</string>
<string name="theme_brown">Cokelat</string>
<string name="theme_grey">Abu-bau</string>
<string name="theme_blue_grey">Biru abu-bau</string>
<string name="theme_black">Hitam</string>
<string name="theme_dark_grey">Abu-abu gelap</string>
<string name="theme_white">Putih</string>
<string name="theme_light">Cerah</string>
<string name="theme_black">Hitam</string>
<string name="theme_light">Cerah</string>
<string name="theme_dark">Gelap</string>
<string name="theme_day_night">Siang/Malam</string>
<string name="language">Bahasa</string>

@ -368,28 +368,7 @@
<string name="color">Colore</string>
<string name="accent">Evidenzia</string>
<string name="launcher_icon">Icona lanciatore</string>
<string name="theme_red">Rosso</string>
<string name="theme_pink">Rosa</string>
<string name="theme_purple">Porpora</string>
<string name="theme_deep_purple">Viola intenso</string>
<string name="theme_indigo">Indaco</string>
<string name="theme_blue">Blu</string>
<string name="theme_light_blue">Celeste</string>
<string name="theme_cyan">Ciano</string>
<string name="theme_teal">Turchese</string>
<string name="theme_green">Verde</string>
<string name="theme_light_green">Verde chiaro</string>
<string name="theme_lime">Verdolino</string>
<string name="theme_yellow">Giallo</string>
<string name="theme_amber">Ambra</string>
<string name="theme_orange">Arancio</string>
<string name="theme_deep_orange">Arancio intenso</string>
<string name="theme_brown">Marrone</string>
<string name="theme_grey">Grigio</string>
<string name="theme_blue_grey">Grigio-Blu</string>
<string name="theme_black">Nero</string>
<string name="theme_dark_grey">Grigio scuro</string>
<string name="theme_white">Bianco</string>
<string name="theme_light">Chiaro</string>
<string name="theme_dark">Scuro</string>
<string name="theme_wallpaper">Sfondo</string>

@ -407,28 +407,7 @@
<string name="color">צבע</string>
<string name="accent">צבע משני</string>
<string name="launcher_icon">צלמית משגר</string>
<string name="theme_red">אדום</string>
<string name="theme_pink">ורוד</string>
<string name="theme_purple">סגול</string>
<string name="theme_deep_purple">סגול עמוק</string>
<string name="theme_indigo">אינדיגו</string>
<string name="theme_blue">כחול</string>
<string name="theme_light_blue">תכלת</string>
<string name="theme_cyan">תורכיז</string>
<string name="theme_teal">ירוק כחלחל</string>
<string name="theme_green">ירוק</string>
<string name="theme_light_green">ירקרק</string>
<string name="theme_lime">ליים</string>
<string name="theme_yellow">צהוב</string>
<string name="theme_amber">ענבר</string>
<string name="theme_orange">כתום</string>
<string name="theme_deep_orange">כתום עמוק</string>
<string name="theme_brown">חום</string>
<string name="theme_grey">אפור</string>
<string name="theme_blue_grey">כחול אפור</string>
<string name="theme_black">שחור</string>
<string name="theme_dark_grey">אפור כהה</string>
<string name="theme_white">לבן</string>
<string name="theme_light">בהיר</string>
<string name="theme_dark">כהה</string>
<string name="theme_wallpaper">תמונת רקע</string>

@ -369,28 +369,7 @@
<string name="color"></string>
<string name="accent">アクセント</string>
<string name="launcher_icon">ランチャーアイコン</string>
<string name="theme_red"></string>
<string name="theme_pink">ピンク</string>
<string name="theme_purple"></string>
<string name="theme_deep_purple">深紫</string>
<string name="theme_indigo"></string>
<string name="theme_blue"></string>
<string name="theme_light_blue">水色</string>
<string name="theme_cyan">シアン</string>
<string name="theme_teal">青緑</string>
<string name="theme_green"></string>
<string name="theme_light_green">薄緑</string>
<string name="theme_lime">ライム</string>
<string name="theme_yellow"></string>
<string name="theme_amber">琥珀</string>
<string name="theme_orange">オレンジ</string>
<string name="theme_deep_orange">ディープオレンジ</string>
<string name="theme_brown"></string>
<string name="theme_grey"></string>
<string name="theme_blue_grey">灰青</string>
<string name="theme_black"></string>
<string name="theme_dark_grey">ダークグレー</string>
<string name="theme_white"></string>
<string name="theme_light">ライト</string>
<string name="theme_dark">ダーク</string>
<string name="theme_wallpaper">壁紙</string>

@ -372,28 +372,7 @@
<string name="color">색상</string>
<string name="accent">강조</string>
<string name="launcher_icon">런처 아이콘</string>
<string name="theme_red">빨강</string>
<string name="theme_pink">분홍</string>
<string name="theme_purple">보라</string>
<string name="theme_deep_purple">진한 보라</string>
<string name="theme_indigo">군청</string>
<string name="theme_blue">파랑</string>
<string name="theme_light_blue">밝은 파랑</string>
<string name="theme_cyan">하늘색</string>
<string name="theme_teal">청록색</string>
<string name="theme_green">초록</string>
<string name="theme_light_green">밝은 초록</string>
<string name="theme_lime">라임색</string>
<string name="theme_yellow">노랑</string>
<string name="theme_amber">호박색</string>
<string name="theme_orange">주황</string>
<string name="theme_deep_orange">진한 주황</string>
<string name="theme_brown">갈색</string>
<string name="theme_grey">회색</string>
<string name="theme_blue_grey">회청색</string>
<string name="theme_black">검정</string>
<string name="theme_dark_grey">어두운 회색</string>
<string name="theme_white">흰색</string>
<string name="theme_light">밝게</string>
<string name="theme_dark">어둡게</string>
<string name="theme_wallpaper">바탕화면</string>

@ -368,27 +368,7 @@
<string name="color">Spalva</string>
<string name="accent">Akcentas</string>
<string name="launcher_icon">Paleidimo ikona</string>
<string name="theme_red">Raudona</string>
<string name="theme_pink">Rožinė</string>
<string name="theme_purple">Violetinė</string>
<string name="theme_deep_purple">Ryškiai violetinė</string>
<string name="theme_blue">Mėlyna</string>
<string name="theme_light_blue">Šviesiai mėlyna</string>
<string name="theme_cyan">Žydra</string>
<string name="theme_teal">Melsva</string>
<string name="theme_green">Žalia</string>
<string name="theme_light_green">Šviesiai žalia</string>
<string name="theme_lime">Gelsvai žalsva</string>
<string name="theme_yellow">Geltona</string>
<string name="theme_amber">Gintarinė</string>
<string name="theme_orange">Oranžinė</string>
<string name="theme_deep_orange">Ryškiai oranžinė</string>
<string name="theme_brown">Ruda</string>
<string name="theme_grey">Pilka</string>
<string name="theme_blue_grey">Mėlynai pilka</string>
<string name="theme_black">Juoda</string>
<string name="theme_dark_grey">Tamsiai pilka</string>
<string name="theme_white">Balta</string>
<string name="theme_light">Šviesi</string>
<string name="theme_dark">Tamsi</string>
<string name="theme_wallpaper">Fono vaizdas</string>

@ -401,28 +401,7 @@
<string name="color">Farge</string>
<string name="accent">Aksentfarge</string>
<string name="launcher_icon">Oppstarterfarge</string>
<string name="theme_red">Rød</string>
<string name="theme_pink">Rosa</string>
<string name="theme_purple">Lilla</string>
<string name="theme_deep_purple">Mørkelilla</string>
<string name="theme_indigo">Indigoblå</string>
<string name="theme_blue">Blå</string>
<string name="theme_light_blue">Lyseblå</string>
<string name="theme_cyan">Cyan</string>
<string name="theme_teal">Turkis</string>
<string name="theme_green">Grønn</string>
<string name="theme_light_green">Lysegrønn</string>
<string name="theme_lime">Lime</string>
<string name="theme_yellow">Gul</string>
<string name="theme_amber">Rav</string>
<string name="theme_orange">Oransje</string>
<string name="theme_deep_orange">Mørkeoransje</string>
<string name="theme_brown">Brun</string>
<string name="theme_grey">Grå</string>
<string name="theme_blue_grey">Blågrå</string>
<string name="theme_black">Svart</string>
<string name="theme_dark_grey">Mørkegrå</string>
<string name="theme_white">Hvit</string>
<string name="theme_light">Lys</string>
<string name="theme_dark">Mørk</string>
<string name="theme_wallpaper">Bakgrunnsbilde</string>

@ -363,28 +363,8 @@
<string name="theme">Thema</string>
<string name="color">Kleur</string>
<string name="launcher_icon">Start icon</string>
<string name="theme_red">Rood</string>
<string name="theme_pink">Roze</string>
<string name="theme_purple">Paars</string>
<string name="theme_deep_purple">Diep Paars</string>
<string name="theme_blue">Blauw</string>
<string name="theme_light_blue">Licht Blauw</string>
<string name="theme_cyan">Blauwgroen</string>
<string name="theme_teal">Zeegroen</string>
<string name="theme_green">Groen</string>
<string name="theme_light_green">Licht groen</string>
<string name="theme_lime">Limoen</string>
<string name="theme_yellow">Geel</string>
<string name="theme_amber">Oranjegeel</string>
<string name="theme_orange">Oranje</string>
<string name="theme_deep_orange">Diep Oranje</string>
<string name="theme_brown">Bruin</string>
<string name="theme_grey">Grijs</string>
<string name="theme_blue_grey">Blauwgrijs</string>
<string name="theme_black">Zwart</string>
<string name="theme_dark_grey">Donker Groen</string>
<string name="theme_white">Wit</string>
<string name="theme_light">Licht</string>
<string name="theme_black">Zwart</string>
<string name="theme_light">Licht</string>
<string name="theme_dark">Donker</string>
<string name="theme_wallpaper">Achtergrond</string>
<string name="theme_day_night">Dag/Nacht</string>
@ -518,8 +498,7 @@
<string name="name_your_price">Bepaal je prijs</string>
<string name="monthly">Maandelijks</string>
<string name="annually">Jaarlijks</string>
<string name="theme_indigo">Paars</string>
<string name="restart_later">Later</string>
<string name="restart_later">Later</string>
<string name="url">Link</string>
<string name="list_separator_with_space">", "</string>
<string name="help">Help</string>

@ -383,29 +383,8 @@
<string name="color">Kolor</string>
<string name="accent">Akcent</string>
<string name="launcher_icon">Ikona programu startowego</string>
<string name="theme_red">Czerwony</string>
<string name="theme_pink">Różowy</string>
<string name="theme_purple">Fioletowy</string>
<string name="theme_deep_purple">Ciemnofioletowy</string>
<string name="theme_indigo">Indygo</string>
<string name="theme_blue">Niebieski</string>
<string name="theme_light_blue">Jasnoniebieski</string>
<string name="theme_cyan">Cyjan</string>
<string name="theme_teal">Morski</string>
<string name="theme_green">Zielony</string>
<string name="theme_light_green">Jasnozielony</string>
<string name="theme_lime">Cytrynowy</string>
<string name="theme_yellow">Żółty</string>
<string name="theme_amber">Bursztynowy</string>
<string name="theme_orange">Pomarańczowy</string>
<string name="theme_deep_orange">Ciemno pomarańczowy</string>
<string name="theme_brown">Brązowy</string>
<string name="theme_grey">Szary</string>
<string name="theme_blue_grey">Niebieskoszary</string>
<string name="theme_black">Czarny</string>
<string name="theme_dark_grey">Ciemnoszary</string>
<string name="theme_white">Biały</string>
<string name="theme_light">Jasny</string>
<string name="theme_black">Czarny</string>
<string name="theme_light">Jasny</string>
<string name="theme_dark">Ciemny</string>
<string name="theme_wallpaper">Tapeta</string>
<string name="theme_day_night">Dzień/noc</string>

@ -369,28 +369,7 @@
<string name="color">Cor</string>
<string name="accent">Cor de realce</string>
<string name="launcher_icon">Ícone do launcher</string>
<string name="theme_red">Vermelho</string>
<string name="theme_pink">Rosa</string>
<string name="theme_purple">Roxo</string>
<string name="theme_deep_purple">Roxo Profundo</string>
<string name="theme_indigo">Azul-escuro</string>
<string name="theme_blue">Azul</string>
<string name="theme_light_blue">Azul Claro</string>
<string name="theme_cyan">Ciano</string>
<string name="theme_teal">Verde-azulado</string>
<string name="theme_green">Verde</string>
<string name="theme_light_green">Verde Claro</string>
<string name="theme_lime">Limão</string>
<string name="theme_yellow">Amarelo</string>
<string name="theme_amber">Âmbar</string>
<string name="theme_orange">Laranja</string>
<string name="theme_deep_orange">Laranja Profundo</string>
<string name="theme_brown">Marrom</string>
<string name="theme_grey">Cinza</string>
<string name="theme_blue_grey">Azul Acinzentado</string>
<string name="theme_black">Preto</string>
<string name="theme_dark_grey">Cinza escuro</string>
<string name="theme_white">Branco</string>
<string name="theme_light">Claro</string>
<string name="theme_dark">Escuro</string>
<string name="theme_wallpaper">Plano de fundo</string>

@ -343,17 +343,6 @@
<string name="theme">Tema</string>
<string name="color">Cor</string>
<string name="accent">Realçe</string>
<string name="theme_red">Vermelho</string>
<string name="theme_pink">Rosa</string>
<string name="theme_purple">Púrpura</string>
<string name="theme_blue">Azul</string>
<string name="theme_light_blue">Azul claro</string>
<string name="theme_green">Verde</string>
<string name="theme_light_green">Verde claro</string>
<string name="theme_yellow">Amarelo</string>
<string name="theme_orange">Laranja</string>
<string name="theme_brown">Castanho</string>
<string name="theme_grey">Cinzento</string>
<string name="theme_black">Preto</string>
<string name="theme_light">Claro</string>
<string name="theme_dark">Escuro</string>

@ -8,5 +8,4 @@
<string name="CFA_context_delete">Sterge linia</string>
<string name="tag_FEx_untagged">Fara categorie</string>
<string name="filters">Filtre</string>
<string name="theme_white">Alb</string>
</resources>

@ -390,29 +390,8 @@
<string name="color">Цвет</string>
<string name="accent">Акцент</string>
<string name="launcher_icon">Иконка запуска</string>
<string name="theme_red">Красный</string>
<string name="theme_pink">Розовый</string>
<string name="theme_purple">Пурпурный</string>
<string name="theme_deep_purple">Тёмно-пурпурный</string>
<string name="theme_indigo">Индиго</string>
<string name="theme_blue">Синий</string>
<string name="theme_light_blue">Светло-синий</string>
<string name="theme_cyan">Ярко-бирюзовый</string>
<string name="theme_teal">Тёмно-бирюзовый</string>
<string name="theme_green">Зелёный</string>
<string name="theme_light_green">Светло-зелёный</string>
<string name="theme_lime">Лайм</string>
<string name="theme_yellow">Жёлтый</string>
<string name="theme_amber">Янтарный</string>
<string name="theme_orange">Оранжевый</string>
<string name="theme_deep_orange">Тёмно-оранжевый</string>
<string name="theme_brown">Коричневый</string>
<string name="theme_grey">Серый</string>
<string name="theme_blue_grey">Серо-голубой</string>
<string name="theme_black">Чёрная</string>
<string name="theme_dark_grey">Тёмно-серый</string>
<string name="theme_white">Белый</string>
<string name="theme_light">Светлая</string>
<string name="theme_black">Чёрная</string>
<string name="theme_light">Светлая</string>
<string name="theme_dark">Тёмная</string>
<string name="theme_wallpaper">Как обои</string>
<string name="theme_day_night">День / ночь</string>

@ -368,28 +368,7 @@
<string name="color">Farba</string>
<string name="accent">Zvýraznenie </string>
<string name="launcher_icon">Ikona</string>
<string name="theme_red">Červená</string>
<string name="theme_pink">Ružová</string>
<string name="theme_purple">Fialová</string>
<string name="theme_deep_purple">Tmavočervená </string>
<string name="theme_indigo">Atramentová</string>
<string name="theme_blue">Modrá</string>
<string name="theme_light_blue">Svetlo modrá</string>
<string name="theme_cyan">Modrozeleň</string>
<string name="theme_teal">Tmavo MZ</string>
<string name="theme_green">Zelená</string>
<string name="theme_light_green">Svetlo zelená</string>
<string name="theme_lime">Citrónová</string>
<string name="theme_yellow">Žltá</string>
<string name="theme_amber">Jantárová</string>
<string name="theme_orange">Oranžová</string>
<string name="theme_deep_orange">Tmavo oranžová</string>
<string name="theme_brown">Hnedá</string>
<string name="theme_grey">Šedá</string>
<string name="theme_blue_grey">Modro šedá</string>
<string name="theme_black">Čierna</string>
<string name="theme_dark_grey">Tmavo šedá</string>
<string name="theme_white">Biela</string>
<string name="theme_light">Svetlá</string>
<string name="theme_dark">Tmavá</string>
<string name="theme_wallpaper">Tapeta</string>

@ -264,25 +264,7 @@
<string name="opacity">Opacitet</string>
<string name="theme">Tema</string>
<string name="color">Färg</string>
<string name="theme_red">Röd</string>
<string name="theme_pink">Rosa</string>
<string name="theme_purple">Lila</string>
<string name="theme_deep_purple">Mörklila</string>
<string name="theme_indigo">Indigoblå</string>
<string name="theme_blue">Blå</string>
<string name="theme_light_blue">Ljusblå</string>
<string name="theme_teal">Grönblå</string>
<string name="theme_green">Grön</string>
<string name="theme_light_green">Ljusgrön</string>
<string name="theme_yellow">Gul</string>
<string name="theme_amber">Bärnsten</string>
<string name="theme_deep_orange">Mörkorange</string>
<string name="theme_brown">Brun</string>
<string name="theme_grey">Grå</string>
<string name="theme_blue_grey">Blågrå</string>
<string name="theme_black">Svart</string>
<string name="theme_dark_grey">Mörkgrå</string>
<string name="theme_white">Vit</string>
<string name="theme_light">Ljust</string>
<string name="theme_dark">Mörkt</string>
<string name="theme_wallpaper">Bakgrundsbild</string>
@ -404,9 +386,6 @@
<string name="filter">Filter</string>
<string name="accent">Accent</string>
<string name="launcher_icon">Hemskärmsikon</string>
<string name="theme_cyan">Cyan</string>
<string name="theme_lime">Lime</string>
<string name="theme_orange">Orange</string>
<string name="widget_header_settings">Överskriftsinställningar</string>
<string name="widget_row_settings">Radinställmingar</string>
<string name="sync_error_permissions">Tasks kräver tillstånd</string>

@ -374,28 +374,7 @@
<string name="color">Renk</string>
<string name="accent">Ara renk</string>
<string name="launcher_icon">Başlatıcı simgesi</string>
<string name="theme_red">Kırmızı</string>
<string name="theme_pink">Pembe</string>
<string name="theme_purple">Mor</string>
<string name="theme_deep_purple">Koyu mor</string>
<string name="theme_indigo">Çivit</string>
<string name="theme_blue">Mavi</string>
<string name="theme_light_blue">ık mavi</string>
<string name="theme_cyan">Camgöbeği</string>
<string name="theme_teal">Teal mavisi</string>
<string name="theme_green">Yeşil</string>
<string name="theme_light_green">ık yeşil</string>
<string name="theme_lime">Çim rengi</string>
<string name="theme_yellow">Sarı</string>
<string name="theme_amber">Kehribar</string>
<string name="theme_orange">Turuncu</string>
<string name="theme_deep_orange">Koyu turuncu</string>
<string name="theme_brown">Kahverengi</string>
<string name="theme_grey">Gri</string>
<string name="theme_blue_grey">Mavi gri</string>
<string name="theme_black">Siyah</string>
<string name="theme_dark_grey">Koyu gri</string>
<string name="theme_white">Beyaz</string>
<string name="theme_light">ık</string>
<string name="theme_dark">Koyu</string>
<string name="theme_wallpaper">Duvar kağıdı</string>

@ -372,28 +372,7 @@
<string name="color">Колір</string>
<string name="accent">Акцент</string>
<string name="launcher_icon">Іконка запуску</string>
<string name="theme_red">Червоний</string>
<string name="theme_pink">Рожевий</string>
<string name="theme_purple">Пурпуровий</string>
<string name="theme_deep_purple">Фіолетовий</string>
<string name="theme_indigo">Індиго</string>
<string name="theme_blue">Синій</string>
<string name="theme_light_blue">Блакитний</string>
<string name="theme_cyan">Ціановий</string>
<string name="theme_teal">Синьо-зелений</string>
<string name="theme_green">Зелений</string>
<string name="theme_light_green">Світло-зелений</string>
<string name="theme_lime">Лайм</string>
<string name="theme_yellow">Жовтий</string>
<string name="theme_amber">Янтарний</string>
<string name="theme_orange">Помаранчевий</string>
<string name="theme_deep_orange">Темно-помаранчевий</string>
<string name="theme_brown">Коричневий</string>
<string name="theme_grey">Сірий</string>
<string name="theme_blue_grey">Сіро-синій</string>
<string name="theme_black">Чорний</string>
<string name="theme_dark_grey">Темно-сірий</string>
<string name="theme_white">Біла</string>
<string name="theme_light">Світлий</string>
<string name="theme_dark">Темний</string>
<string name="theme_wallpaper">Шпалери</string>

@ -354,28 +354,8 @@
<string name="color">颜色</string>
<string name="accent">强调色</string>
<string name="launcher_icon">启动器图标</string>
<string name="theme_red">红色</string>
<string name="theme_pink">粉色</string>
<string name="theme_purple">紫色</string>
<string name="theme_deep_purple">深紫色</string>
<string name="theme_indigo">靛青色</string>
<string name="theme_blue">蓝色</string>
<string name="theme_light_blue">浅蓝色</string>
<string name="theme_cyan">青色</string>
<string name="theme_teal">蓝绿色</string>
<string name="theme_green">绿色</string>
<string name="theme_light_green">浅绿色</string>
<string name="theme_lime">青柠色</string>
<string name="theme_yellow">黄色</string>
<string name="theme_amber">琥珀色</string>
<string name="theme_orange">橙色</string>
<string name="theme_deep_orange">深橙色</string>
<string name="theme_brown">棕色</string>
<string name="theme_grey">灰色</string>
<string name="theme_blue_grey">蓝灰色</string>
<string name="theme_black">黑色</string>
<string name="theme_dark_grey">深灰色</string>
<string name="theme_light">亮色</string>
<string name="theme_black">黑色</string>
<string name="theme_light">亮色</string>
<string name="theme_dark">暗色</string>
<string name="theme_wallpaper">壁纸</string>
<string name="theme_day_night">日/夜</string>
@ -482,8 +462,7 @@
<string name="add_location">添加位置</string>
<string name="geofence_radius">半径</string>
<string name="location_radius_meters">%s 米</string>
<string name="theme_white">白色</string>
<string name="manage_subscription">管理订阅</string>
<string name="manage_subscription">管理订阅</string>
<string name="pro_google_places_search">Google Place搜索</string>
<string name="location_remind_arrival">抵达时提醒</string>
<string name="location_remind_departure">离开时提醒</string>

@ -36,50 +36,6 @@
<item>@string/ring_nonstop</item>
</string-array>
<string-array name="colors">
<item>@string/theme_blue_grey</item>
<item>@string/theme_dark_grey</item>
<item>@string/theme_red</item>
<item>@string/theme_pink</item>
<item>@string/theme_purple</item>
<item>@string/theme_deep_purple</item>
<item>@string/theme_indigo</item>
<item>@string/theme_blue</item>
<item>@string/theme_light_blue</item>
<item>@string/theme_cyan</item>
<item>@string/theme_teal</item>
<item>@string/theme_green</item>
<item>@string/theme_light_green</item>
<item>@string/theme_lime</item>
<item>@string/theme_yellow</item>
<item>@string/theme_amber</item>
<item>@string/theme_orange</item>
<item>@string/theme_deep_orange</item>
<item>@string/theme_brown</item>
<item>@string/theme_grey</item>
<item>@string/theme_white</item>
</string-array>
<string-array name="accents">
<item>@string/theme_blue_grey</item>
<item>@string/theme_red</item>
<item>@string/theme_pink</item>
<item>@string/theme_purple</item>
<item>@string/theme_deep_purple</item>
<item>@string/theme_indigo</item>
<item>@string/theme_blue</item>
<item>@string/theme_light_blue</item>
<item>@string/theme_cyan</item>
<item>@string/theme_teal</item>
<item>@string/theme_green</item>
<item>@string/theme_light_green</item>
<item>@string/theme_lime</item>
<item>@string/theme_yellow</item>
<item>@string/theme_amber</item>
<item>@string/theme_orange</item>
<item>@string/theme_deep_orange</item>
</string-array>
<string-array name="widget_background">
<item>@string/theme_light</item>
<item>@string/theme_black</item>

@ -247,6 +247,7 @@
<string name="p_widget_filter">widget-id-</string>
<string name="p_widget_theme">widget-theme-v2-</string>
<string name="p_widget_color">widget-color-</string>
<string name="p_widget_color_v2">widget-color-v2</string>
<string name="p_widget_opacity">widget-opacity-v3-</string>
<string name="p_widget_font_size">widget-font-size-</string>
<string name="p_widget_show_due_date">widget-show-due-date-</string>

@ -392,28 +392,7 @@ File %1$s contained %2$s.\n\n
<string name="icon">Icon</string>
<string name="accent">Accent</string>
<string name="launcher_icon">Launcher icon</string>
<string name="theme_red">Red</string>
<string name="theme_pink">Pink</string>
<string name="theme_purple">Purple</string>
<string name="theme_deep_purple">Deep purple</string>
<string name="theme_indigo">Indigo</string>
<string name="theme_blue">Blue</string>
<string name="theme_light_blue">Light blue</string>
<string name="theme_cyan">Cyan</string>
<string name="theme_teal">Teal</string>
<string name="theme_green">Green</string>
<string name="theme_light_green">Light green</string>
<string name="theme_lime">Lime</string>
<string name="theme_yellow">Yellow</string>
<string name="theme_amber">Amber</string>
<string name="theme_orange">Orange</string>
<string name="theme_deep_orange">Deep orange</string>
<string name="theme_brown">Brown</string>
<string name="theme_grey">Grey</string>
<string name="theme_blue_grey">Blue grey</string>
<string name="theme_black">Black</string>
<string name="theme_dark_grey">Dark grey</string>
<string name="theme_white">White</string>
<string name="theme_light">Light</string>
<string name="theme_dark">Dark</string>
<string name="theme_wallpaper">Wallpaper</string>
@ -581,5 +560,7 @@ File %1$s contained %2$s.\n\n
<string name="disable_battery_optimizations">Disable battery optimizations</string>
<string name="more_settings">More settings</string>
<string name="more_notification_settings_summary">Ringtone, vibrations, and more</string>
<string name="free_colors">Free colors</string>
<string name="material_palette">Material palette</string>
<string name="invalid_username_or_password">Invalid username or password</string>
</resources>

@ -26,7 +26,8 @@
android:title="@string/widget_show_header" />
<Preference
android:key="@string/p_widget_color"
android:key="@string/p_widget_color_v2"
android:icon="@drawable/color_picker"
android:title="@string/color" />
<SwitchPreferenceCompat

Loading…
Cancel
Save