diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java
index 49368f3d8..1cdf61dba 100644
--- a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java
+++ b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java
@@ -11,6 +11,7 @@ import android.app.FragmentTransaction;
import android.content.ContentValues;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.res.Configuration;
import android.os.Bundle;
import android.provider.Settings;
import android.support.design.widget.Snackbar;
@@ -111,6 +112,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
public static final String OPEN_FILTER = "open_filter"; //$NON-NLS-1$
public static final String LOAD_FILTER = "load_filter";
public static final String OPEN_TASK = "open_task"; //$NON-NLS-1$
+ private int currentNightMode;
private Filter filter;
@@ -121,7 +123,9 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- theme.applyTheme(this);
+ theme.applyTheme(this, getDelegate());
+
+ currentNightMode = getNightMode();
startupService.onStartupApplication(this);
@@ -234,6 +238,12 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
protected void onResume() {
super.onResume();
+ getDelegate().applyDayNight();
+ if (currentNightMode != getNightMode()) {
+ recreate();
+ return;
+ }
+
registerReceiver(
repeatConfirmationReceiver,
new IntentFilter(AstridApiConstants.BROADCAST_EVENT_TASK_REPEATED));
@@ -261,6 +271,10 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
}
}
+ private int getNightMode() {
+ return getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+ }
+
@Override
public void inject(ActivityComponent component) {
component.inject(this);
diff --git a/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java b/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java
index 1e4766f7c..2b2cdb859 100644
--- a/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java
+++ b/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.java
@@ -102,14 +102,14 @@ public class HideUntilControlSet extends TaskEditControlFragment implements OnIt
if (value.setting == Task.HIDE_UNTIL_NONE) {
clearButton.setVisibility(View.GONE);
tv.setText(value.label);
- tv.setTextColor(getContext().getColor(R.color.text_tertiary));
+ tv.setTextColor(getContext().getResources().getColor(R.color.text_tertiary));
} else {
String display = value.label;
if (value.setting != Task.HIDE_UNTIL_SPECIFIC_DAY && value.setting != Task.HIDE_UNTIL_SPECIFIC_DAY_TIME) {
display = display.toLowerCase();
}
tv.setText(getString(R.string.TEA_hideUntil_display, display));
- tv.setTextColor(getContext().getColor(R.color.text_primary));
+ tv.setTextColor(getContext().getResources().getColor(R.color.text_primary));
}
return tv;
}
diff --git a/src/main/java/org/tasks/Tasks.java b/src/main/java/org/tasks/Tasks.java
index eaec5b4cb..70c64a051 100644
--- a/src/main/java/org/tasks/Tasks.java
+++ b/src/main/java/org/tasks/Tasks.java
@@ -48,7 +48,7 @@ public class Tasks extends InjectingApplication {
tracker.setTrackingEnabled(preferences.isTrackingEnabled());
- themeCache.getThemeBase(preferences.getInt(R.string.p_theme, 0)).applyDayNightMode();
+ themeCache.getThemeBase(preferences.getInt(R.string.p_theme, 0)).setDefaultNightMode();
}
@Override
diff --git a/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java b/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java
index a12b666ba..9671d039e 100644
--- a/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java
+++ b/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java
@@ -49,7 +49,7 @@ public class DateAndTimePickerActivity extends InjectingAppCompatActivity implem
if (datePickerDialog == null) {
datePickerDialog = new MyDatePickerDialog();
datePickerDialog.initialize(null, initial.getYear(), initial.getMonthOfYear() - 1, initial.getDayOfMonth());
- datePickerDialog.setThemeDark(themeBase.isDarkTheme());
+ datePickerDialog.setThemeDark(themeBase.isDarkTheme(this));
datePickerDialog.setAccentColor(themeAccent.getAccentColor());
datePickerDialog.show(fragmentManager, FRAG_TAG_DATE_PICKER);
}
diff --git a/src/main/java/org/tasks/activities/DatePickerActivity.java b/src/main/java/org/tasks/activities/DatePickerActivity.java
index b2db9ce62..4d458f1b7 100644
--- a/src/main/java/org/tasks/activities/DatePickerActivity.java
+++ b/src/main/java/org/tasks/activities/DatePickerActivity.java
@@ -40,7 +40,7 @@ public class DatePickerActivity extends InjectingAppCompatActivity
if (dialog == null) {
dialog = new MyDatePickerDialog();
dialog.initialize(null, initial.getYear(), initial.getMonthOfYear() - 1, initial.getDayOfMonth());
- dialog.setThemeDark(themeBase.isDarkTheme());
+ dialog.setThemeDark(themeBase.isDarkTheme(this));
dialog.setAccentColor(themeAccent.getAccentColor());
dialog.show(fragmentManager, FRAG_TAG_DATE_PICKER);
}
diff --git a/src/main/java/org/tasks/activities/TimePickerActivity.java b/src/main/java/org/tasks/activities/TimePickerActivity.java
index eee5020ac..71fe36bef 100644
--- a/src/main/java/org/tasks/activities/TimePickerActivity.java
+++ b/src/main/java/org/tasks/activities/TimePickerActivity.java
@@ -44,7 +44,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.setThemeDark(themeBase.isDarkTheme());
+ dialog.setThemeDark(themeBase.isDarkTheme(this));
dialog.setAccentColor(themeAccent.getAccentColor());
dialog.show(fragmentManager, FRAG_TAG_TIME_PICKER);
}
diff --git a/src/main/java/org/tasks/dialogs/DialogBuilder.java b/src/main/java/org/tasks/dialogs/DialogBuilder.java
index d5fa5eb5d..ab53e49cb 100644
--- a/src/main/java/org/tasks/dialogs/DialogBuilder.java
+++ b/src/main/java/org/tasks/dialogs/DialogBuilder.java
@@ -37,7 +37,7 @@ public class DialogBuilder {
}
public ProgressDialog newProgressDialog() {
- ProgressDialog progressDialog = new ProgressDialog(activity, theme.getDialogStyle());
+ ProgressDialog progressDialog = new ProgressDialog(activity, theme.getThemeBase().getDialogStyle());
theme.applyToContext(progressDialog.getContext());
if (AndroidUtilities.preLollipop()) {
progressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
diff --git a/src/main/java/org/tasks/files/MyFilePickerActivity.java b/src/main/java/org/tasks/files/MyFilePickerActivity.java
index 427472339..db6d93042 100644
--- a/src/main/java/org/tasks/files/MyFilePickerActivity.java
+++ b/src/main/java/org/tasks/files/MyFilePickerActivity.java
@@ -22,7 +22,7 @@ public class MyFilePickerActivity extends FilePickerActivity {
.getComponent()
.plus(new ActivityModule(this))
.inject(this);
- theme.applyThemeAndStatusBarColor(this);
+ theme.applyThemeAndStatusBarColor(this, getDelegate());
setTitle(null);
super.onCreate(savedInstanceState);
}
diff --git a/src/main/java/org/tasks/injection/InjectingPreferenceActivity.java b/src/main/java/org/tasks/injection/InjectingPreferenceActivity.java
index db6f64b78..99cce9bd2 100644
--- a/src/main/java/org/tasks/injection/InjectingPreferenceActivity.java
+++ b/src/main/java/org/tasks/injection/InjectingPreferenceActivity.java
@@ -42,7 +42,7 @@ public abstract class InjectingPreferenceActivity extends AppCompatPreferenceAct
.plus(new ActivityModule(this));
inject(activityComponent);
- theme.applyThemeAndStatusBarColor(this);
+ theme.applyThemeAndStatusBarColor(this, getDelegate());
super.onCreate(savedInstanceState);
diff --git a/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.java b/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.java
index 0f88ffbdd..1d23ea7f9 100644
--- a/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.java
+++ b/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.java
@@ -14,6 +14,6 @@ public abstract class ThemedInjectingAppCompatActivity extends InjectingAppCompa
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- theme.applyThemeAndStatusBarColor(this);
+ theme.applyThemeAndStatusBarColor(this, getDelegate());
}
}
diff --git a/src/main/java/org/tasks/preferences/AppCompatPreferenceActivity.java b/src/main/java/org/tasks/preferences/AppCompatPreferenceActivity.java
index 20864c968..a223430e8 100644
--- a/src/main/java/org/tasks/preferences/AppCompatPreferenceActivity.java
+++ b/src/main/java/org/tasks/preferences/AppCompatPreferenceActivity.java
@@ -42,7 +42,6 @@ public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
protected void onCreate(Bundle savedInstanceState) {
getDelegate().installViewFactory();
getDelegate().onCreate(savedInstanceState);
- getDelegate().applyDayNight();
super.onCreate(savedInstanceState);
}
diff --git a/src/main/java/org/tasks/preferences/BaseBasicPreferences.java b/src/main/java/org/tasks/preferences/BaseBasicPreferences.java
index e3a1e3d9e..c4d37fabd 100644
--- a/src/main/java/org/tasks/preferences/BaseBasicPreferences.java
+++ b/src/main/java/org/tasks/preferences/BaseBasicPreferences.java
@@ -4,7 +4,6 @@ import android.app.Activity;
import android.app.FragmentManager;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.Preference;
@@ -176,8 +175,7 @@ public abstract class BaseBasicPreferences extends InjectingPreferenceActivity i
switch (palette) {
case THEMES:
preferences.setInt(R.string.p_theme, index);
- themeBase = themeCache.getThemeBase(index);
- themeBase.applyDayNightMode(getDelegate());
+ themeCache.getThemeBase(index).setDefaultNightMode();
tracker.reportEvent(Tracking.Events.SET_THEME, Integer.toString(index));
break;
case COLORS:
diff --git a/src/main/java/org/tasks/themes/Theme.java b/src/main/java/org/tasks/themes/Theme.java
index 3ad1d5f63..182adf657 100644
--- a/src/main/java/org/tasks/themes/Theme.java
+++ b/src/main/java/org/tasks/themes/Theme.java
@@ -4,6 +4,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.PixelFormat;
+import android.support.v7.app.AppCompatDelegate;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
@@ -35,25 +36,22 @@ public class Theme {
return themeColor;
}
- public int getDialogStyle() {
- return R.style.TasksDialog;
- }
-
public LayoutInflater getLayoutInflater(Context context) {
return (LayoutInflater) wrap(context).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public ContextThemeWrapper getThemedDialog(Context context) {
- return new ContextThemeWrapper(context, getDialogStyle());
+ return new ContextThemeWrapper(context, themeBase.getDialogStyle());
}
- public void applyThemeAndStatusBarColor(Activity activity) {
- applyTheme(activity);
+ public void applyThemeAndStatusBarColor(Activity activity, AppCompatDelegate delegate) {
+ applyTheme(activity, delegate);
themeColor.applyStatusBarColor(activity);
themeColor.applyTaskDescription(activity, activity.getString(R.string.app_name));
}
- public void applyTheme(Activity activity) {
+ public void applyTheme(Activity activity, AppCompatDelegate delegate) {
+ delegate.applyDayNight();
themeBase.set(activity);
applyToContext(activity);
activity.getWindow().setFormat(PixelFormat.RGBA_8888);
diff --git a/src/main/java/org/tasks/themes/ThemeBase.java b/src/main/java/org/tasks/themes/ThemeBase.java
index 4fceffabb..fbd432996 100644
--- a/src/main/java/org/tasks/themes/ThemeBase.java
+++ b/src/main/java/org/tasks/themes/ThemeBase.java
@@ -2,6 +2,7 @@ package org.tasks.themes;
import android.app.Activity;
import android.content.Context;
+import android.content.res.Configuration;
import android.support.v7.app.AppCompatDelegate;
import android.view.ContextThemeWrapper;
@@ -23,12 +24,16 @@ public class ThemeBase {
private final int contentBackground;
private final int dayNightMode;
- public ThemeBase(String name, int index, int dayNightMode) {
+ public ThemeBase(String name, int index, int contentBackground, int dayNightMode) {
this.name = name;
this.index = index;
this.dayNightMode = dayNightMode;
this.style = THEMES[index];
- this.contentBackground = 0;
+ this.contentBackground = contentBackground;
+ }
+
+ public int getDialogStyle() {
+ return R.style.TasksDialog;
}
public String getName() {
@@ -43,8 +48,10 @@ public class ThemeBase {
return contentBackground;
}
- public boolean isDarkTheme() {
- return index > 0;
+ public boolean isDarkTheme(Activity activity) {
+ return index == 4
+ ? Configuration.UI_MODE_NIGHT_YES == (activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK)
+ : index > 0;
}
public ContextThemeWrapper wrap(Context context) {
@@ -55,12 +62,7 @@ public class ThemeBase {
activity.setTheme(style);
}
- public void applyDayNightMode() {
+ public void setDefaultNightMode() {
AppCompatDelegate.setDefaultNightMode(dayNightMode);
}
-
- public void applyDayNightMode(AppCompatDelegate delegate) {
- applyDayNightMode();
- delegate.setLocalNightMode(dayNightMode);
- }
}
diff --git a/src/main/java/org/tasks/themes/ThemeCache.java b/src/main/java/org/tasks/themes/ThemeCache.java
index 0f9bbae98..61f194bcd 100644
--- a/src/main/java/org/tasks/themes/ThemeCache.java
+++ b/src/main/java/org/tasks/themes/ThemeCache.java
@@ -22,11 +22,11 @@ public class ThemeCache {
public ThemeCache(Context context) {
Resources resources = context.getResources();
- themes.add(new ThemeBase(context.getString(R.string.theme_light), 0, AppCompatDelegate.MODE_NIGHT_NO));
- themes.add(new ThemeBase(context.getString(R.string.theme_black), 1, AppCompatDelegate.MODE_NIGHT_YES));
- themes.add(new ThemeBase(context.getString(R.string.theme_dark), 2, AppCompatDelegate.MODE_NIGHT_YES));
- themes.add(new ThemeBase(context.getString(R.string.theme_wallpaper), 3, AppCompatDelegate.MODE_NIGHT_YES));
- themes.add(new ThemeBase(context.getString(R.string.theme_day_night), 4, AppCompatDelegate.MODE_NIGHT_AUTO));
+ themes.add(new ThemeBase(context.getString(R.string.theme_light), 0, resources.getColor(R.color.md_background_light), AppCompatDelegate.MODE_NIGHT_NO));
+ themes.add(new ThemeBase(context.getString(R.string.theme_black), 1, resources.getColor(R.color.widget_background_black), AppCompatDelegate.MODE_NIGHT_YES));
+ themes.add(new ThemeBase(context.getString(R.string.theme_dark), 2, resources.getColor(R.color.md_background_dark), AppCompatDelegate.MODE_NIGHT_YES));
+ themes.add(new ThemeBase(context.getString(R.string.theme_wallpaper), 3, resources.getColor(R.color.black_38), AppCompatDelegate.MODE_NIGHT_YES));
+ themes.add(new ThemeBase(context.getString(R.string.theme_day_night), 4, resources.getColor(R.color.md_background_light), AppCompatDelegate.MODE_NIGHT_AUTO));
String[] colorNames = resources.getStringArray(R.array.colors);
for (int i = 0 ; i < ThemeColor.COLORS.length ; i++) {
diff --git a/src/main/java/org/tasks/themes/WidgetTheme.java b/src/main/java/org/tasks/themes/WidgetTheme.java
index ee6b99d58..71d2fea83 100644
--- a/src/main/java/org/tasks/themes/WidgetTheme.java
+++ b/src/main/java/org/tasks/themes/WidgetTheme.java
@@ -4,9 +4,9 @@ import org.tasks.R;
public class WidgetTheme {
public static final int[] BACKGROUNDS = new int[] {
- R.color.widget_background_light,
+ R.color.md_background_light,
R.color.widget_background_black,
- R.color.widget_background_dark
+ R.color.md_background_dark
};
private final String name;
private final int index;
diff --git a/src/main/res/values-night/colors.xml b/src/main/res/values-night/colors.xml
index 1c93690a1..6aaf111bc 100644
--- a/src/main/res/values-night/colors.xml
+++ b/src/main/res/values-night/colors.xml
@@ -1,12 +1,12 @@
- #303030
- #424242
- #ffffff
- #303030
- #202020
- #ffffffff
- #b3ffffff
- #80ffffff
- #1fffffff
+ @color/md_background_dark
+ @color/md_background_dark_dialog
+ @color/icon_tint_dark
+ @color/drawer_background_dark
+ @color/drawer_background_dark_selected
+ @color/white_100
+ @color/white_70
+ @color/white_50
+ @color/white_12
\ No newline at end of file
diff --git a/src/main/res/values-notnight/colors.xml b/src/main/res/values-notnight/colors.xml
new file mode 100644
index 000000000..5836559e7
--- /dev/null
+++ b/src/main/res/values-notnight/colors.xml
@@ -0,0 +1,12 @@
+
+
+ @color/md_background_light
+ @color/md_background_light_dialog
+ @color/icon_tint_light
+ @color/drawer_background_light
+ @color/drawer_background_light_selected
+ @color/black_87
+ @color/black_54
+ @color/black_38
+ @color/black_12
+
\ No newline at end of file
diff --git a/src/main/res/values/colors.xml b/src/main/res/values/colors.xml
index 494bee9d1..5abf3534e 100644
--- a/src/main/res/values/colors.xml
+++ b/src/main/res/values/colors.xml
@@ -90,28 +90,28 @@
#ff777777
#888888
- #fafafa
- #ffffff
- #000000
- #de000000
- #8a000000
- #61000000
- #1f000000
-
- #de000000
- #8a000000
- #61000000
-
- #ffffffff
- #b3ffffff
- #80ffffff
-
- #fafafa
+ #de000000
+ #8a000000
+ #61000000
+ #1f000000
+
+ #ffffffff
+ #b3ffffff
+ #80ffffff
+ #1fffffff
+
+ #fafafa
+ #ffffff
+ #303030
+ #424242
#000000
- #303030
+ @android:color/black
+ @android:color/white
- #f9f9f9
- #e8e8e8
+ #f9f9f9
+ #e8e8e8
+ #303030
+ #202020
@color/red_500
@color/amber_500