Additional theme support

pull/384/head
Alex Baker 9 years ago
parent df64627b8a
commit ef9030bfe1

@ -5,6 +5,7 @@ import android.content.Context;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.StandardExceptionParser;
import com.google.common.base.Strings;
import org.tasks.BuildConfig;
import org.tasks.R;
@ -50,11 +51,15 @@ public class Tracker {
}
public void reportEvent(Tracking.Events event) {
reportEvent(event, null);
}
public void reportEvent(Tracking.Events event, String label) {
HitBuilders.EventBuilder eventBuilder = new HitBuilders.EventBuilder()
.setCategory(context.getString(event.category))
.setAction(context.getString(event.action));
if (event.label > 0) {
eventBuilder.setLabel(context.getString(event.label));
if (!Strings.isNullOrEmpty(label)) {
eventBuilder.setLabel(label);
}
tracker.send(eventBuilder.build());
}

@ -18,4 +18,9 @@ public class BasicPreferences extends BaseBasicPreferences {
public void inject(ActivityComponent component) {
component.inject(this);
}
@Override
public void initiateThemePurchase() {
}
}

@ -21,7 +21,11 @@ public class Tracker {
}
public void reportEvent(Tracking.Events setDefaultList) {
public void reportEvent(Tracking.Events event) {
}
public void reportEvent(Tracking.Events event, String string) {
}
}

@ -31,4 +31,10 @@ public class BasicPreferences extends BaseBasicPreferences {
public void inject(ActivityComponent component) {
component.inject(this);
}
@Override
public void initiateThemePurchase() {
activityPreferences.setBoolean(R.string.p_purchased_themes, true);
recreate();
}
}

@ -50,7 +50,7 @@
<activity
android:name="com.todoroo.astrid.gtasks.GtasksPreferences"
android:label="@string/synchronization"
android:theme="@style/Tasks" />
android:theme="@style/BlueGrey" />
<activity
android:name=".activities.ClearGtaskDataActivity"
@ -91,7 +91,7 @@
android:name=".locale.ui.activity.TaskerSettingsActivity"
android:exported="false"
android:label="@string/app_name"
android:theme="@style/Tasks"
android:theme="@style/BlueGrey"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustResize"/>

@ -6,6 +6,7 @@ import com.android.vending.billing.IabResult;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.StandardExceptionParser;
import com.google.common.base.Strings;
import org.tasks.BuildConfig;
import org.tasks.R;
@ -51,11 +52,15 @@ public class Tracker {
}
public void reportEvent(Tracking.Events event) {
reportEvent(event, null);
}
public void reportEvent(Tracking.Events event, String label) {
HitBuilders.EventBuilder eventBuilder = new HitBuilders.EventBuilder()
.setCategory(context.getString(event.category))
.setAction(context.getString(event.action));
if (event.label > 0) {
eventBuilder.setLabel(context.getString(event.label));
if (!Strings.isNullOrEmpty(label)) {
eventBuilder.setLabel(label);
}
tracker.send(eventBuilder.build());
}

@ -88,6 +88,7 @@ public class PurchaseHelper implements IabHelper.OnIabSetupFinishedListener {
final Purchase tasker = inventory.getPurchase(context.getString(R.string.sku_tasker));
final Purchase dashclock = inventory.getPurchase(context.getString(R.string.sku_dashclock));
final Purchase teslaUnread = inventory.getPurchase(context.getString(R.string.sku_tesla_unread));
final Purchase themes = inventory.getPurchase(context.getString(R.string.sku_themes));
if (tasker != null) {
purchases.add(tasker);
}
@ -97,6 +98,9 @@ public class PurchaseHelper implements IabHelper.OnIabSetupFinishedListener {
if (teslaUnread != null) {
purchases.add(teslaUnread);
}
if (themes != null) {
purchases.add(themes);
}
final IabHelper iabHelper = new IabHelper(context, context.getString(R.string.gp_key));
iabHelper.enableDebugLogging(true);
iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
@ -117,6 +121,8 @@ public class PurchaseHelper implements IabHelper.OnIabSetupFinishedListener {
} else if (purchase.equals(teslaUnread)) {
preferences.setBoolean(R.string.p_purchased_tesla_unread, false);
preferences.setBoolean(R.string.p_tesla_unread_enabled, false);
} else if (purchase.equals(themes)) {
preferences.setBoolean(R.string.p_purchased_themes, false);
} else {
Timber.e("Unhandled consumption for purchase: %s", purchase);
}

@ -6,7 +6,6 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
@ -41,6 +40,7 @@ public final class TaskerSettingsActivity extends AbstractFragmentPluginAppCompa
private static final String EXTRA_PURCHASE_INITIATED = "extra_purchase_initiated";
@Bind(R.id.toolbar) Toolbar toolbar;
@Bind(R.id.text_view) TextView filterTitle;
@Inject ActivityPreferences preferences;
@Inject DefaultFilterProvider defaultFilterProvider;
@ -128,8 +128,7 @@ public final class TaskerSettingsActivity extends AbstractFragmentPluginAppCompa
if (equalBundles(getResultBundle(), previousBundle)) {
cancel();
} else {
new AlertDialog.Builder(this, R.style.TasksDialog)
.setMessage(R.string.discard_changes)
dialogBuilder.newMessageDialog(R.string.discard_changes)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
@ -221,8 +220,7 @@ public final class TaskerSettingsActivity extends AbstractFragmentPluginAppCompa
}
private void updateView() {
((TextView) findViewById(R.id.text_view))
.setText(filter.listingTitle);
filterTitle.setText(filter.listingTitle);
}
@Override

@ -62,6 +62,16 @@ public class BasicPreferences extends BaseBasicPreferences implements PurchaseHe
}
});
getPref(R.string.p_purchased_themes).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null && (boolean) newValue && !preferences.hasPurchase(R.string.p_purchased_themes)) {
initiateThemePurchase();
}
return false;
}
});
getPref(R.string.p_tesla_unread_enabled).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
@ -106,6 +116,8 @@ public class BasicPreferences extends BaseBasicPreferences implements PurchaseHe
preferences.setBoolean(R.string.p_purchased_dashclock, true);
preferences.setBoolean(R.string.p_purchased_tasker, true);
preferences.setBoolean(R.string.p_purchased_tesla_unread, true);
preferences.setBoolean(R.string.p_purchased_themes, true);
recreate();
return true;
}
});
@ -114,6 +126,7 @@ public class BasicPreferences extends BaseBasicPreferences implements PurchaseHe
@Override
public boolean onPreferenceClick(Preference preference) {
purchaseHelper.consumePurchases();
recreate();
return true;
}
});
@ -147,6 +160,8 @@ public class BasicPreferences extends BaseBasicPreferences implements PurchaseHe
((TwoStatePreference) getPref(R.string.p_tesla_unread_enabled)).setChecked(success);
} else if (getString(R.string.sku_dashclock).equals(sku)) {
((TwoStatePreference) getPref(R.string.p_purchased_dashclock)).setChecked(success);
} else if (getString(R.string.sku_themes).equals(sku)) {
((TwoStatePreference) getPref(R.string.p_purchased_themes)).setChecked(success);
} else {
Timber.d("Unhandled sku: %s", sku);
}
@ -170,4 +185,9 @@ public class BasicPreferences extends BaseBasicPreferences implements PurchaseHe
}
return values.toArray(new String[values.size()]);
}
@Override
public void initiateThemePurchase() {
purchaseHelper.purchase(dialogBuilder, this, getString(R.string.sku_themes), getString(R.string.p_purchased_themes), REQUEST_PURCHASE, this);
}
}

@ -4,6 +4,7 @@
<string name="sku_tasker">tasker</string>
<string name="sku_tesla_unread">tesla_unread</string>
<string name="sku_dashclock">dashclock</string>
<string name="sku_themes">themes</string>
<string name="p_dashclock_filter">dashclock_filter</string>
<string name="tasker_message">If you purchased the stand-alone Tasker plugin please send your Google Play Store transaction ID to support@tasks.org and you will receive a promo code for this in-app purchase. You can find the transaction ID in your Google Play Store order confirmation e-mail or by visiting wallet.google.com</string>
</resources>

@ -91,7 +91,7 @@
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Tasks"
android:theme="@style/BlueGrey"
android:allowBackup="true"
android:name=".Tasks"
android:manageSpaceActivity="com.todoroo.astrid.core.OldTaskPreferences">
@ -179,22 +179,22 @@
<activity
android:name=".preferences.HelpAndFeedbackActivity"
android:label="@string/help_and_feedback"
android:theme="@style/Tasks" />
android:theme="@style/BlueGrey" />
<activity
android:name=".preferences.BasicPreferences"
android:label="@string/TLA_menu_settings"
android:theme="@style/Tasks" />
android:theme="@style/BlueGrey" />
<activity
android:name=".preferences.MiscellaneousPreferences"
android:label="@string/miscellaneous"
android:theme="@style/Tasks" />
android:theme="@style/BlueGrey" />
<activity
android:name=".preferences.BackupPreferences"
android:label="@string/backup_BPr_header"
android:theme="@style/Tasks" />
android:theme="@style/BlueGrey" />
<!-- Activity that configures widget -->
<activity
@ -280,21 +280,21 @@
<activity
android:name=".preferences.AppearancePreferences"
android:label="@string/EPr_appearance_header"
android:theme="@style/Tasks" />
android:theme="@style/BlueGrey" />
<activity
android:name=".preferences.DateShortcutPreferences"
android:label="@string/date_shortcuts"
android:theme="@style/Tasks" />
android:theme="@style/BlueGrey" />
<activity
android:name="com.todoroo.astrid.core.DefaultsPreferences"
android:label="@string/task_defaults"
android:theme="@style/Tasks"/>
android:theme="@style/BlueGrey"/>
<activity
android:name="com.todoroo.astrid.activity.BeastModePreferences"
android:theme="@style/Tasks"/>
android:theme="@style/BlueGrey"/>
<activity
android:name=".reminders.MissedCallActivity"
@ -322,7 +322,7 @@
<!-- custom filters -->
<activity
android:name="com.todoroo.astrid.core.CustomFilterActivity"
android:theme="@style/Tasks"/>
android:theme="@style/BlueGrey"/>
<!-- alarms -->
<receiver android:name="com.todoroo.astrid.alarms.AlarmTaskRepeatListener">
@ -365,7 +365,7 @@
<activity
android:name="com.todoroo.astrid.gcal.CalendarReminderActivity"
android:theme="@style/DialogBase"/>
android:theme="@style/BlueGreyDialog"/>
<receiver android:name="com.todoroo.astrid.gcal.CalendarAlarmReceiver" />
@ -373,7 +373,7 @@
<activity
android:name="com.todoroo.astrid.core.OldTaskPreferences"
android:label="@string/EPr_manage_header"
android:theme="@style/Tasks"/>
android:theme="@style/BlueGrey"/>
<activity
android:name=".activities.ClearAllDataActivity"
@ -408,7 +408,7 @@
android:name="com.todoroo.astrid.files.AACRecordingActivity"
android:configChanges="orientation|screenSize"
android:screenOrientation="portrait"
android:theme="@style/DialogBase" />
android:theme="@style/BlueGreyDialog" />
<activity
android:name=".files.MyFilePickerActivity"
@ -435,7 +435,7 @@
<activity
android:name="com.todoroo.astrid.reminders.ReminderPreferences"
android:label="@string/notifications"
android:theme="@style/Tasks"/>
android:theme="@style/BlueGrey"/>
<activity
android:name=".voice.VoiceCommandActivity"

@ -7,7 +7,6 @@ import android.os.Bundle;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
import org.tasks.R;
import org.tasks.dialogs.MyDatePickerDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
@ -48,7 +47,7 @@ public class DateAndTimePickerActivity extends InjectingAppCompatActivity implem
if (datePickerDialog == null) {
datePickerDialog = new MyDatePickerDialog();
datePickerDialog.initialize(null, initial.getYear(), initial.getMonthOfYear() - 1, initial.getDayOfMonth());
datePickerDialog.setAccentColor(getResources().getColor(preferences.isDarkTheme() ? R.color.black_text_hint : R.color.primary));
datePickerDialog.setAccentColor(preferences.getDateTimePickerAccent());
datePickerDialog.show(fragmentManager, FRAG_TAG_DATE_PICKER);
}
datePickerDialog.setOnCancelListener(this);

@ -7,7 +7,6 @@ import android.os.Bundle;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
import org.tasks.R;
import org.tasks.dialogs.MyDatePickerDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
@ -39,7 +38,7 @@ public class DatePickerActivity extends InjectingAppCompatActivity
if (dialog == null) {
dialog = new MyDatePickerDialog();
dialog.initialize(null, initial.getYear(), initial.getMonthOfYear() - 1, initial.getDayOfMonth());
dialog.setAccentColor(getResources().getColor(preferences.isDarkTheme() ? R.color.black_text_hint : R.color.primary));
dialog.setAccentColor(preferences.getDateTimePickerAccent());
dialog.show(fragmentManager, FRAG_TAG_DATE_PICKER);
}
dialog.setOnDismissListener(this);

@ -9,7 +9,6 @@ import android.text.format.DateFormat;
import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout;
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
import org.tasks.R;
import org.tasks.dialogs.MyTimePickerDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
@ -43,7 +42,7 @@ public class TimePickerActivity extends InjectingAppCompatActivity implements Ti
if (dialog == null) {
dialog = new MyTimePickerDialog();
dialog.initialize(null, initial.getHourOfDay(), initial.getMinuteOfHour(), 0, DateFormat.is24HourFormat(this));
dialog.setAccentColor(getResources().getColor(preferences.isDarkTheme() ? R.color.black_text_hint : R.color.primary));
dialog.setAccentColor(preferences.getDateTimePickerAccent());
dialog.show(fragmentManager, FRAG_TAG_TIME_PICKER);
}
dialog.setOnDismissListener(this);

@ -5,23 +5,17 @@ import org.tasks.R;
public class Tracking {
public enum Events {
SET_DEFAULT_LIST(R.string.tracking_category_preferences, R.string.tracking_action_set, R.string.p_default_list),
WIDGET_ADD_SCROLLABLE(R.string.tracking_category_widget, R.string.tracking_action_add, R.string.app_name),
WIDGET_ADD_SHORTCUT(R.string.tracking_category_widget, R.string.tracking_action_add, R.string.FSA_label),
SET_DEFAULT_LIST(R.string.tracking_category_preferences, R.string.p_default_list),
SET_THEME(R.string.tracking_category_preferences, R.string.p_theme),
WIDGET_ADD(R.string.tracking_category_widget, R.string.tracking_action_add),
TIMER_START(R.string.tracking_category_timer, R.string.tracking_action_start);
public final int category;
public final int action;
public final int label;
Events(int category, int action) {
this(category, action, 0);
}
Events(int category, int action, int label) {
this.category = category;
this.action = action;
this.label = label;
}
}
}

@ -0,0 +1,101 @@
package org.tasks.dialogs;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;
import org.tasks.R;
import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingDialogFragment;
import org.tasks.preferences.ActivityPreferences;
import javax.inject.Inject;
public class ColorPickerDialog extends InjectingDialogFragment {
public interface ColorPickerCallback {
void colorPicked(int index);
void initiateThemePurchase();
}
@Inject DialogBuilder dialogBuilder;
@Inject @ForApplication Context context;
@Inject ActivityPreferences activityPreferences;
private ColorPickerCallback callback;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final String[] themes = context.getResources().getStringArray(R.array.themes);
final boolean purchasedThemes = activityPreferences.hasPurchase(R.string.p_purchased_themes);
ListAdapter adapter = new ArrayAdapter<String>(context, R.layout.color_selection_row, themes) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = getActivity().getLayoutInflater();
row = inflater.inflate(R.layout.color_selection_row, parent, false);
}
Resources resources = context.getResources();
ImageView primary = (ImageView) row.findViewById(R.id.color_primary);
Drawable original = resources.getDrawable(purchasedThemes || position < 2
? R.drawable.ic_lens_black_24dp
: R.drawable.ic_vpn_key_black_24dp);
Drawable wrapped = DrawableCompat.wrap(original.mutate());
DrawableCompat.setTint(wrapped, activityPreferences.getPrimaryColor(position));
primary.setImageDrawable(wrapped);
TextView text = (TextView) row.findViewById(android.R.id.text1);
text.setText(themes[position]);
return row;
}
};
return dialogBuilder.newDialog()
.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (purchasedThemes || which < 2) {
callback.colorPicked(which);
} else {
callback.initiateThemePurchase();
}
}
})
.show();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callback = (ColorPickerCallback) activity;
}
@Override
protected void inject(DialogFragmentComponent component) {
component.inject(this);
}
}

@ -1,5 +1,6 @@
package org.tasks.injection;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.widget.WidgetConfigDialog;
import org.tasks.activities.CalendarSelectionDialog;
@ -26,4 +27,6 @@ public interface DialogFragmentComponent {
void inject(SnoozeDialog snoozeDialog);
void inject(WidgetConfigDialog widgetConfigDialog);
void inject(ColorPickerDialog colorPickerDialog);
}

@ -1,16 +1,17 @@
package org.tasks.preferences;
import android.app.Activity;
import android.content.res.Resources;
import android.content.Context;
import android.graphics.PixelFormat;
import android.view.Window;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import org.tasks.R;
import javax.inject.Inject;
import javax.inject.Singleton;
import static com.todoroo.andlib.utility.AndroidUtilities.preLollipop;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
@Singleton
public class ActivityPreferences extends Preferences {
@ -28,6 +29,12 @@ public class ActivityPreferences extends Preferences {
applyStatusBarColor();
}
public String getThemeName() {
int themeIndex = getInt(R.string.p_theme, 0);
String[] themeNames = activity.getResources().getStringArray(R.array.themes);
return themeNames[themeIndex];
}
public void applyTheme() {
applyTheme(getTheme());
}
@ -36,37 +43,95 @@ public class ActivityPreferences extends Preferences {
applyTheme(getDialogTheme());
}
public void applyStatusBarColor() {
applyStatusBarColor(isDarkTheme() ? android.R.color.black : R.color.primary_dark);
private void applyTheme(int theme) {
activity.setTheme(theme);
activity.getWindow().setFormat(PixelFormat.RGBA_8888);
}
public void applyLightStatusBarColor() {
applyStatusBarColor(R.color.primary_dark);
private void applyStatusBarColor() {
if (atLeastLollipop()) {
activity.getWindow().setStatusBarColor(getPrimaryDarkColor());
}
}
private void applyStatusBarColor(int color) {
if (preLollipop()) {
return;
public int getTheme() {
return getTheme(getInt(R.string.p_theme, -1));
}
Window window = activity.getWindow();
Resources resources = activity.getResources();
window.setStatusBarColor(resources.getColor(color));
public int getDialogTheme() {
Context contextThemeWrapper = new ContextThemeWrapper(activity, getTheme());
TypedValue typedValue = new TypedValue();
contextThemeWrapper.getTheme().resolveAttribute(R.attr.alertDialogTheme, typedValue, true);
return typedValue.data;
}
private void applyTheme(int theme) {
activity.setTheme(theme);
activity.getWindow().setFormat(PixelFormat.RGBA_8888);
public int getDateTimePickerAccent() {
Context contextThemeWrapper = new ContextThemeWrapper(activity, getTheme());
TypedValue typedValue = new TypedValue();
contextThemeWrapper.getTheme().resolveAttribute(R.attr.asDateTimePickerAccent, typedValue, true);
return typedValue.data;
}
public int getTheme() {
return isDarkTheme() ? R.style.TasksDark : R.style.Tasks;
public int getPrimaryDarkColor() {
return getColorAttribute(R.attr.colorPrimaryDark);
}
public int getDialogTheme() {
return isDarkTheme() ? R.style.TasksDialogDark : R.style.TasksDialog;
private int getColorAttribute(int attribute) {
TypedValue typedValue = new TypedValue();
activity.getTheme().resolveAttribute(attribute, typedValue, true);
return typedValue.data;
}
public int getPrimaryColor(int themeIndex) {
Context contextThemeWrapper = new ContextThemeWrapper(activity, getTheme(themeIndex));
TypedValue typedValue = new TypedValue();
contextThemeWrapper.getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
return typedValue.data;
}
public boolean isDarkTheme() {
return getBoolean(R.string.p_use_dark_theme, false);
public int getTheme(int index) {
switch (index) {
case 1:
return R.style.Black;
case 2:
return R.style.Red;
case 3:
return R.style.Pink;
case 4:
return R.style.Purple;
case 5:
return R.style.DeepPurple;
case 6:
return R.style.Indigo;
case 7:
return R.style.Blue;
case 8:
return R.style.LightBlue;
case 9:
return R.style.Cyan;
case 10:
return R.style.Teal;
case 11:
return R.style.Green;
case 12:
return R.style.LightGreen;
case 13:
return R.style.Lime;
case 14:
return R.style.Yellow;
case 15:
return R.style.Amber;
case 16:
return R.style.Orange;
case 17:
return R.style.DeepOrange;
case 18:
return R.style.Brown;
case 19:
return R.style.Grey;
case 0:
default:
return R.style.BlueGrey;
}
}
}

@ -38,7 +38,6 @@ public class AppearancePreferences extends InjectingPreferenceActivity {
addPreferencesFromResource(R.xml.preferences_appearance);
setExtraOnChange(R.string.p_use_dark_theme, EXTRA_RESTART);
setExtraOnChange(R.string.p_fontSize, EXTRA_RESTART);
setExtraOnChange(R.string.p_fullTaskTitle, EXTRA_RESTART);
setExtraOnChange(R.string.p_show_today_filter, EXTRA_FILTERS_CHANGED);

@ -1,6 +1,7 @@
package org.tasks.preferences;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
@ -10,16 +11,20 @@ import com.todoroo.astrid.reminders.ReminderPreferences;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.injection.InjectingPreferenceActivity;
import javax.inject.Inject;
public abstract class BaseBasicPreferences extends InjectingPreferenceActivity {
public abstract class BaseBasicPreferences extends InjectingPreferenceActivity implements ColorPickerDialog.ColorPickerCallback {
private static final String EXTRA_RESULT = "extra_result";
private static final String FRAG_TAG_THEME_PICKER = "frag_tag_theme_picker";
private static final int RC_PREFS = 10001;
@Inject Tracker tracker;
@Inject ActivityPreferences activityPreferences;
private Bundle result;
@Override
@ -32,6 +37,20 @@ public abstract class BaseBasicPreferences extends InjectingPreferenceActivity {
addPreferencesFromResource(R.xml.preferences_addons);
addPreferencesFromResource(R.xml.preferences_privacy);
Preference themePreference = findPreference(getString(R.string.p_theme));
themePreference.setSummary(activityPreferences.getThemeName());
themePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager.findFragmentByTag(FRAG_TAG_THEME_PICKER) == null) {
new ColorPickerDialog()
.show(fragmentManager, FRAG_TAG_THEME_PICKER);
}
return false;
}
});
findPreference(getString(R.string.p_collect_statistics)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
@ -69,12 +88,26 @@ public abstract class BaseBasicPreferences extends InjectingPreferenceActivity {
if (requestCode == RC_PREFS) {
if (resultCode == Activity.RESULT_OK && data != null) {
result.putAll(data.getExtras());
setResult(Activity.RESULT_OK, new Intent() {{
putExtras(result);
}});
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void colorPicked(int index) {
activityPreferences.setInt(R.string.p_theme, index);
tracker.reportEvent(Tracking.Events.SET_THEME, Integer.toString(index));
result.putBoolean(AppearancePreferences.EXTRA_RESTART, true);
recreate();
}
@Override
public void finish() {
setResult(Activity.RESULT_OK, new Intent() {{
putExtras(result);
}});
super.finish();
}
}

@ -81,8 +81,7 @@ public class Preferences {
}
public boolean useDarkWidgetTheme(int widgetId) {
boolean legacySetting = getBoolean(R.string.p_use_dark_theme_widget, false);
return getBoolean(WidgetConfigActivity.PREF_DARK_THEME + widgetId, legacySetting);
return getBoolean(WidgetConfigActivity.PREF_DARK_THEME + widgetId, false);
}
public boolean isDefaultCalendarSet() {

@ -39,7 +39,7 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_FILTER) {
if (resultCode == Activity.RESULT_OK) {
tracker.reportEvent(Tracking.Events.WIDGET_ADD_SHORTCUT);
tracker.reportEvent(Tracking.Events.WIDGET_ADD, getString(R.string.FSA_label));
Filter filter = data.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER);
String filterId = defaultFilterProvider.getFilterPreferenceValue(filter);
Intent shortcutIntent = TaskIntents.getTaskListByIdIntent(this, filterId);

@ -102,7 +102,7 @@ public class TasksWidget extends InjectingAppWidgetProvider {
remoteViews.setImageViewBitmap(R.id.widget_background,
getSolidBackground(context.getResources().getColor(darkTheme ? R.color.widget_body_dark : R.color.widget_body_light)));
remoteViews.setImageViewBitmap(R.id.widget_header_background,
getSolidBackground(context.getResources().getColor(darkTheme ? R.color.widget_header_dark : R.color.primary)));
getSolidBackground(context.getResources().getColor(darkTheme ? R.color.widget_header_dark : R.color.blue_grey_500)));
if (opacity < 100) {
remoteViews.setInt(R.id.widget_background, "setAlpha", opacity);
remoteViews.setInt(R.id.widget_header_background, "setAlpha", opacity);

@ -6,6 +6,7 @@ import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Bundle;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.injection.ActivityComponent;
@ -66,7 +67,7 @@ public class WidgetConfigActivity extends InjectingAppCompatActivity implements
@Override
public void ok() {
tracker.reportEvent(Tracking.Events.WIDGET_ADD_SCROLLABLE);
tracker.reportEvent(Tracking.Events.WIDGET_ADD, getString(R.string.app_name));
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
setResult(RESULT_OK, resultValue);

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2z"/>
</vector>

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12.65,10C11.83,7.67 9.61,6 7,6c-3.31,0 -6,2.69 -6,6s2.69,6 6,6c2.61,0 4.83,-1.67 5.65,-4H17v4h4v-4h2v-4H12.65zM7,14c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
</vector>

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="@dimen/keyline_first">
<ImageView
android:id="@+id/color_primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingLeft="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
android:textAppearance="?android:attr/textAppearanceListItemSmall" />
</LinearLayout>

@ -4,7 +4,7 @@
android:id="@+id/updatesFooter"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="?attr/asAbBackgroundColor"
android:background="?attr/colorPrimary"
android:gravity="center_vertical"
android:minHeight="50dp"
android:orientation="horizontal"

@ -3,7 +3,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/asAbBackgroundColor"
android:background="?attr/colorPrimary"
android:elevation="@dimen/elevation_toolbar"
app:toolbarStyle="@style/Toolbar"
app:popupTheme="?attr/popup_theme"

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DarkBase" parent="Theme.AppCompat.NoActionBar">
<style name="DarkOverride" parent="DarkBase">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LightBase" parent="Theme.AppCompat.Light.NoActionBar">
<style name="LightOverride" parent="LightBase">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>

@ -68,4 +68,27 @@
<item>@string/ring_nonstop</item>
</string-array>
<string-array name="themes">
<item>@string/theme_blue_grey</item>
<item>@string/theme_black</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>
</string-array>
</resources>

@ -22,16 +22,12 @@
<attr name="asListDividerColor" format="color" />
<attr name="asThemeTextColor" format="color" />
<attr name="asEditTextBackground" format="reference" />
<attr name="asAbBackgroundColor" format="color" />
<attr name="fab_tint" format="color"/>
<attr name="icon_tint" format="color"/>
<attr name="toolbarSeparatorHeight" format="dimension" />
<attr name="separatorHeight" format="dimension" />
<attr name="popup_theme" format="reference" />
<declare-styleable name="DateAndTimePicker">
<attr name="shortcutLabels" format="reference" />
</declare-styleable>
<attr name="asDateTimePickerAccent" format="color" />
<declare-styleable name="TimePreference">
<attr name="summary" format="string" />

@ -5,10 +5,85 @@
** See the file "LICENSE" for the full license governing this code.
-->
<resources>
<color name="primary">#607d8b</color>
<color name="primary_dark">#4d646f</color>
<color name="overdue">#ffff5555</color>
<color name="red_500">#f44336</color>
<color name="red_700">#d32f2f</color>
<color name="red_a400">#ff1744</color>
<color name="pink_500">#e91e63</color>
<color name="pink_700">#c2185b</color>
<color name="pink_a400">#f50057</color>
<color name="purple_500">#9c27b0</color>
<color name="purple_700">#7b1fa2</color>
<color name="purple_a400">#d500f9</color>
<color name="deep_purple_500">#673ab7</color>
<color name="deep_purple_700">#512da8</color>
<color name="deep_purple_a400">#651fff</color>
<color name="indigo_500">#3f51b5</color>
<color name="indigo_700">#303f9f</color>
<color name="indigo_a400">#3d5afe</color>
<color name="blue_500">#2196f3</color>
<color name="blue_700">#1976d2</color>
<color name="blue_a400">#2979ff</color>
<color name="light_blue_500">#03a9f4</color>
<color name="light_blue_700">#0288d1</color>
<color name="light_blue_a400">#00b0ff</color>
<color name="cyan_500">#00bcd4</color>
<color name="cyan_700">#0097a7</color>
<color name="cyan_a400">#00e5ff</color>
<color name="teal_500">#009688</color>
<color name="teal_700">#00796b</color>
<color name="teal_a400">#1de9b6</color>
<color name="green_500">#4caf50</color>
<color name="green_700">#388e3c</color>
<color name="green_a400">#00e676</color>
<color name="light_green_500">#8bc34a</color>
<color name="light_green_700">#689f38</color>
<color name="light_green_a400">#76ff03</color>
<color name="lime_500">#cddc39</color>
<color name="lime_700">#afb42b</color>
<color name="lime_a400">#c6ff00</color>
<color name="yellow_500">#ffeb3b</color>
<color name="yellow_700">#fbc02d</color>
<color name="yellow_a400">#ffea00</color>
<color name="amber_500">#ffc107</color>
<color name="amber_700">#ffa000</color>
<color name="amber_a400">#ffc400</color>
<color name="orange_500">#ff9800</color>
<color name="orange_700">#f57c00</color>
<color name="orange_a400">#ff9100</color>
<color name="deep_orange_500">#ff5722</color>
<color name="deep_orange_700">#e64a19</color>
<color name="deep_orange_a400">#ff3d00</color>
<color name="brown_500">#795548</color>
<color name="brown_700">#5d4037</color>
<color name="grey_500">#9e9e9e</color>
<color name="grey_700">#616161</color>
<color name="blue_grey_500">#607d8b</color>
<color name="blue_grey_700">#455a64</color>
<color name="black_primary">#000000</color>
<color name="black_primary_dark">#000000</color>
<color name="black_accent">#ffffff</color>
<color name="overdue">@color/red_500</color>
<color name="task_list_done">#ff777777</color>
<color name="task_edit_deadline_gray">#888888</color>
@ -26,13 +101,12 @@
<color name="white_text_hint">#eee</color>
<color name="black_text">#000</color>
<color name="black_text_hint">#535353</color>
<color name="task_edit_divider">#343434</color>
<color name="task_edit_divider_dark">#dddddd</color>
<color name="task_edit_divider">#b6b6b6</color>
<color name="importance_1">#ffff5555</color>
<color name="importance_2">#fffea400</color>
<color name="importance_3">#ff33a5e8</color>
<color name="importance_4">#ff808080</color>
<color name="importance_1">@color/red_500</color>
<color name="importance_2">@color/amber_500</color>
<color name="importance_3">@color/blue_500</color>
<color name="importance_4">@color/grey_500</color>
<color name="snackbar_undo">#f4b400</color>

@ -214,9 +214,6 @@
<item>@string/TEA_control_hidden_section</item>
</string-array>
<string name="p_use_dark_theme">use_dark_theme</string>
<string name="p_use_dark_theme_widget">use_dark_theme_widget</string>
<string name="TEA_ctrl_title_pref">TEA_ctrl_title_pref</string> <!-- Deprecated -->
<string name="TEA_ctrl_when_pref">TEA_ctrl_when_pref</string>
<string name="TEA_ctrl_repeat_pref">TEA_ctrl_repeat_pref</string>
@ -286,15 +283,16 @@
<string name="tracking_category_widget">Widget</string>
<string name="tracking_category_timer">Timer</string>
<string name="tracking_category_iab">IAB</string>
<string name="tracking_action_set">Set</string>
<string name="tracking_action_add">Add</string>
<string name="tracking_action_start">Start</string>
<string name="p_tesla_unread_enabled">tesla_unread_enabled</string>
<string name="p_purchased_tesla_unread">purchased_tesla_unread</string>
<string name="p_purchased_tasker">purchased_tasker</string>
<string name="p_purchased_dashclock">purchased_dashclock</string>
<string name="p_purchased_themes">purchased_themes</string>
<string name="tesla_unread">TeslaUnread</string>
<string name="tasker_locale">Tasker/Locale</string>
<string name="dashclock">DashClock extension</string>
<string name="p_theme">selected_theme</string>
</resources>

@ -710,7 +710,6 @@ File %1$s contained %2$s.\n\n
<!-- Preference: Voice reminders description (true) -->
<string name="EPr_voiceRemindersEnabled_desc_enabled">Tasks will speak task names during task reminders</string>
<string name="EPr_use_dark_theme">Dark theme</string>
<string name="delete_task">Delete task</string>
<string name="voice_command_added_task">Added task</string>
@ -853,6 +852,7 @@ File %1$s contained %2$s.\n\n
<string name="default_list">Default list</string>
<string name="plugin_description">Tasks is an open source project maintained by one developer. Some features are offered as in-app purchases in order to support development.</string>
<string name="tesla_unread_description">Display a badge for the number of active tasks in your default list. Requires TeslaUnread for Nova Launcher</string>
<string name="themes_purchase_description">Unlock all themes and add some color to Tasks</string>
<string name="tasker_description">Context-aware list notifications. Requires Tasker or Locale</string>
<string name="donate_summary">Donations are greatly appreciated</string>
<string name="dashclock_description">Display a count of active tasks</string>
@ -864,6 +864,29 @@ File %1$s contained %2$s.\n\n
<string name="filter">Filter</string>
<string name="opacity">Opacity</string>
<string name="theme">Theme</string>
<string name="themes">Additional themes</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-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>disable</item>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Amber" parent="LightOverride">
<item name="colorPrimary">@color/amber_500</item>
<item name="colorPrimaryDark">@color/amber_700</item>
<item name="colorAccent">@color/purple_a400</item>
<item name="alertDialogTheme">@style/AmberDialog</item>
</style>
<style name="AmberDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/amber_500</item>
<item name="colorPrimaryDark">@color/amber_700</item>
<item name="colorAccent">@color/purple_a400</item>
</style>
</resources>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DarkBase" parent="Theme.AppCompat.NoActionBar">
</style>
<style name="DarkOverride" parent="DarkBase">
</style>
<style name="DialogBaseDark" parent="@style/Theme.AppCompat.Dialog">
</style>
</resources>

@ -2,19 +2,10 @@
<resources>
<style name="LightBase" parent="Theme.AppCompat.Light.NoActionBar">
</style>
<style name="Tasks" parent="LightBase">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/primary</item>
<item name="popup_theme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="android:windowBackground">@android:color/white</item>
<item name="asEditTextBackground">@null</item>
<item name="windowActionModeOverlay">true</item>
<item name="drawer_background">@color/drawer_background</item>
<item name="drawer_background_selected">@color/drawer_background_selected</item>
<item name="asDueDateCompletedColor">#ff777777</item>
@ -23,8 +14,6 @@
<item name="toolbarSeparatorHeight">0dp</item>
<item name="separatorHeight">1px</item>
<item name="asSeparatorBackground">#888888</item>
<item name="android:actionModeBackground">@color/primary</item>
<item name="asContentBackground">@android:color/white</item>
<item name="asTextColor">@android:color/black</item>
<item name="asTextColorHint">@android:color/darker_gray</item>
@ -33,21 +22,18 @@
<item name="asDueDateColor">#878787</item>
<item name="asListDividerColor">#dddddd</item>
<item name="asThemeTextColor">@color/dark_blue_theme_color</item>
<item name="asAbBackgroundColor">#607d8b</item>
<item name="icon_tint">@android:color/black</item>
<item name="fab_tint">@android:color/white</item>
<item name="task_edit_divider">@color/task_edit_divider</item>
<item name="android:spinnerItemStyle">@style/SpinnerNoPadding</item>
<item name="alertDialogTheme">@style/TasksDialog</item>
<item name="android:actionModeBackground">?attr/colorPrimary</item>
<item name="asDateTimePickerAccent">?attr/colorAccent</item>
</style>
<style name="DialogBase" parent="Theme.AppCompat.Light.Dialog">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/primary</item>
<style name="LightOverride" parent="LightBase">
</style>
<style name="TasksDialog" parent="DialogBase">
<style name="LightDialogBase" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="asThemeTextColor">@color/dark_blue_theme_color</item>

@ -1,13 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DarkBase" parent="Theme.AppCompat.NoActionBar">
</style>
<style name="TasksDark" parent="DarkBase">
<item name="colorPrimary">@android:color/black</item>
<item name="colorPrimaryDark">@android:color/black</item>
<item name="colorAccent">@android:color/white</item>
<style name="Black" parent="DarkOverride">
<item name="colorPrimary">@color/black_primary</item>
<item name="colorPrimaryDark">@color/black_primary_dark</item>
<item name="colorAccent">@color/red_500</item>
<item name="asDateTimePickerAccent">?attr/colorAccent</item>
<item name="popup_theme">@style/ThemeOverlay.AppCompat</item>
@ -17,14 +14,13 @@
<item name="toolbarSeparatorHeight">1px</item>
<item name="asToolbarSeparator">@android:color/white</item>
<item name="asSeparator">?attr/asToolbarSeparator</item>
<item name="android:actionModeBackground">@android:color/black</item>
<item name="android:actionModeBackground">@color/black_primary</item>
<item name="asContentBackground">@android:color/black</item>
<item name="asTextColor">@android:color/white</item>
<item name="asTextColorHint">@android:color/darker_gray</item>
<item name="asTextColorInverse">@android:color/black</item>
<item name="asAbBackgroundColor">@android:color/black</item>
<item name="icon_tint">@android:color/white</item>
<item name="task_edit_divider">@color/task_edit_divider_dark</item>
<item name="task_edit_divider">@color/task_edit_divider</item>
<item name="asDueDateColor">#c3c3c3</item>
<item name="fab_tint">@android:color/black</item>
@ -39,16 +35,13 @@
<item name="asListDividerColor">#dddddd</item>
<item name="asThemeTextColor">@color/dark_blue_theme_color</item>
<item name="android:spinnerItemStyle">@style/SpinnerNoPadding</item>
<item name="alertDialogTheme">@style/TasksDialogDark</item>
</style>
<style name="DialogBaseDark" parent="@style/Theme.AppCompat.Dialog">
<item name="colorPrimary">@android:color/black</item>
<item name="colorPrimaryDark">@android:color/black</item>
<item name="colorAccent">@android:color/white</item>
<item name="alertDialogTheme">@style/BlackDialog</item>
</style>
<style name="TasksDialogDark" parent="DialogBaseDark">
<style name="BlackDialog" parent="DialogBaseDark">
<item name="colorPrimary">@color/black_primary</item>
<item name="colorPrimaryDark">@color/black_primary_dark</item>
<item name="colorAccent">@color/red_a400</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="asThemeTextColor">@color/dark_blue_theme_color</item>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Blue" parent="LightOverride">
<item name="colorPrimary">@color/blue_500</item>
<item name="colorPrimaryDark">@color/blue_700</item>
<item name="colorAccent">@color/pink_a400</item>
<item name="alertDialogTheme">@style/BlueDialog</item>
</style>
<style name="BlueDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/blue_500</item>
<item name="colorPrimaryDark">@color/blue_700</item>
<item name="colorAccent">@color/pink_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="BlueGrey" parent="LightOverride">
<item name="colorPrimary">@color/blue_grey_500</item>
<item name="colorPrimaryDark">@color/blue_grey_700</item>
<item name="colorAccent">@color/red_500</item>
<item name="alertDialogTheme">@style/BlueGreyDialog</item>
</style>
<style name="BlueGreyDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/blue_grey_500</item>
<item name="colorPrimaryDark">@color/blue_grey_700</item>
<item name="colorAccent">@color/red_500</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Brown" parent="LightOverride">
<item name="colorPrimary">@color/brown_500</item>
<item name="colorPrimaryDark">@color/brown_700</item>
<item name="colorAccent">@color/red_a400</item>
<item name="alertDialogTheme">@style/BrownDialog</item>
</style>
<style name="BrownDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/brown_500</item>
<item name="colorPrimaryDark">@color/brown_700</item>
<item name="colorAccent">@color/red_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Cyan" parent="LightOverride">
<item name="colorPrimary">@color/cyan_500</item>
<item name="colorPrimaryDark">@color/cyan_700</item>
<item name="colorAccent">@color/amber_a400</item>
<item name="alertDialogTheme">@style/CyanDialog</item>
</style>
<style name="CyanDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/cyan_500</item>
<item name="colorPrimaryDark">@color/cyan_700</item>
<item name="colorAccent">@color/amber_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DeepOrange" parent="LightOverride">
<item name="colorPrimary">@color/deep_orange_500</item>
<item name="colorPrimaryDark">@color/deep_orange_700</item>
<item name="colorAccent">@color/indigo_a400</item>
<item name="alertDialogTheme">@style/DeepOrangeDialog</item>
</style>
<style name="DeepOrangeDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/deep_orange_500</item>
<item name="colorPrimaryDark">@color/deep_orange_700</item>
<item name="colorAccent">@color/indigo_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DeepPurple" parent="LightOverride">
<item name="colorPrimary">@color/deep_purple_500</item>
<item name="colorPrimaryDark">@color/deep_purple_700</item>
<item name="colorAccent">@color/pink_a400</item>
<item name="alertDialogTheme">@style/DeepPurpleDialog</item>
</style>
<style name="DeepPurpleDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/deep_purple_500</item>
<item name="colorPrimaryDark">@color/deep_purple_700</item>
<item name="colorAccent">@color/pink_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Green" parent="LightOverride">
<item name="colorPrimary">@color/green_500</item>
<item name="colorPrimaryDark">@color/green_700</item>
<item name="colorAccent">@color/pink_a400</item>
<item name="alertDialogTheme">@style/GreenDialog</item>
</style>
<style name="GreenDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/green_500</item>
<item name="colorPrimaryDark">@color/green_700</item>
<item name="colorAccent">@color/pink_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Grey" parent="LightOverride">
<item name="colorPrimary">@color/grey_500</item>
<item name="colorPrimaryDark">@color/grey_700</item>
<item name="colorAccent">@color/amber_a400</item>
<item name="alertDialogTheme">@style/GreyDialog</item>
</style>
<style name="GreyDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/grey_500</item>
<item name="colorPrimaryDark">@color/grey_700</item>
<item name="colorAccent">@color/amber_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Indigo" parent="LightOverride">
<item name="colorPrimary">@color/indigo_500</item>
<item name="colorPrimaryDark">@color/indigo_700</item>
<item name="colorAccent">@color/red_a400</item>
<item name="alertDialogTheme">@style/IndigoDialog</item>
</style>
<style name="IndigoDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/indigo_500</item>
<item name="colorPrimaryDark">@color/indigo_700</item>
<item name="colorAccent">@color/red_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LightBlue" parent="LightOverride">
<item name="colorPrimary">@color/light_blue_500</item>
<item name="colorPrimaryDark">@color/light_blue_700</item>
<item name="colorAccent">@color/pink_a400</item>
<item name="alertDialogTheme">@style/LightBlueDialog</item>
</style>
<style name="LightBlueDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/light_blue_500</item>
<item name="colorPrimaryDark">@color/light_blue_700</item>
<item name="colorAccent">@color/pink_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LightGreen" parent="LightOverride">
<item name="colorPrimary">@color/light_green_500</item>
<item name="colorPrimaryDark">@color/light_green_700</item>
<item name="colorAccent">@color/purple_a400</item>
<item name="alertDialogTheme">@style/LightGreenDialog</item>
</style>
<style name="LightGreenDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/light_green_500</item>
<item name="colorPrimaryDark">@color/light_green_700</item>
<item name="colorAccent">@color/purple_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Lime" parent="LightOverride">
<item name="colorPrimary">@color/lime_500</item>
<item name="colorPrimaryDark">@color/lime_700</item>
<item name="colorAccent">@color/cyan_a400</item>
<item name="alertDialogTheme">@style/LimeDialog</item>
</style>
<style name="LimeDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/lime_500</item>
<item name="colorPrimaryDark">@color/lime_700</item>
<item name="colorAccent">@color/cyan_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Orange" parent="LightOverride">
<item name="colorPrimary">@color/orange_500</item>
<item name="colorPrimaryDark">@color/orange_700</item>
<item name="colorAccent">@color/deep_purple_a400</item>
<item name="alertDialogTheme">@style/OrangeDialog</item>
</style>
<style name="OrangeDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/orange_500</item>
<item name="colorPrimaryDark">@color/orange_700</item>
<item name="colorAccent">@color/deep_purple_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Pink" parent="LightOverride">
<item name="colorPrimary">@color/pink_500</item>
<item name="colorPrimaryDark">@color/pink_700</item>
<item name="colorAccent">@color/blue_a400</item>
<item name="alertDialogTheme">@style/PinkDialog</item>
</style>
<style name="PinkDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/pink_500</item>
<item name="colorPrimaryDark">@color/pink_700</item>
<item name="colorAccent">@color/blue_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Purple" parent="LightOverride">
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryDark">@color/purple_700</item>
<item name="colorAccent">@color/light_blue_a400</item>
<item name="alertDialogTheme">@style/PurpleDialog</item>
</style>
<style name="PurpleDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryDark">@color/purple_700</item>
<item name="colorAccent">@color/light_blue_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Red" parent="LightOverride">
<item name="colorPrimary">@color/red_500</item>
<item name="colorPrimaryDark">@color/red_700</item>
<item name="colorAccent">@color/blue_a400</item>
<item name="alertDialogTheme">@style/RedDialog</item>
</style>
<style name="RedDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/red_500</item>
<item name="colorPrimaryDark">@color/red_700</item>
<item name="colorAccent">@color/blue_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Teal" parent="LightOverride">
<item name="colorPrimary">@color/teal_500</item>
<item name="colorPrimaryDark">@color/teal_700</item>
<item name="colorAccent">@color/purple_a400</item>
<item name="alertDialogTheme">@style/TealDialog</item>
</style>
<style name="TealDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/teal_500</item>
<item name="colorPrimaryDark">@color/teal_700</item>
<item name="colorAccent">@color/purple_a400</item>
</style>
</resources>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Yellow" parent="LightOverride">
<item name="colorPrimary">@color/yellow_500</item>
<item name="colorPrimaryDark">@color/yellow_700</item>
<item name="colorAccent">@color/red_a400</item>
<item name="alertDialogTheme">@style/YellowDialog</item>
</style>
<style name="YellowDialog" parent="LightDialogBase">
<item name="colorPrimary">@color/yellow_500</item>
<item name="colorPrimaryDark">@color/yellow_700</item>
<item name="colorAccent">@color/red_a400</item>
</style>
</resources>

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="@string/p_theme"
android:title="@string/theme" />
<Preference
android:key="@string/EPr_appearance_header"
android:title="@string/EPr_appearance_header" />

@ -14,6 +14,13 @@
android:summary="@string/donate_summary"
android:title="@string/TLA_menu_donate" />
<CheckBoxPreference
android:dependency="@string/p_purchased_themes"
android:disableDependentsState="true"
android:key="@string/p_purchased_themes"
android:summary="@string/themes_purchase_description"
android:title="@string/themes" />
<CheckBoxPreference
android:dependency="@string/p_purchased_dashclock"
android:disableDependentsState="true"

@ -2,11 +2,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/EPr_appearance_header">
<CheckBoxPreference
android:defaultValue="false"
android:key="@string/p_use_dark_theme"
android:title="@string/EPr_use_dark_theme" />
<PreferenceCategory android:title="@string/task_list_options">
<com.todoroo.astrid.ui.MultilinePreference

Loading…
Cancel
Save