diff --git a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt
index 9b6b68f20..c6cfd28e1 100644
--- a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt
+++ b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt
@@ -2,6 +2,7 @@ package org.tasks.widget
import android.content.Context
import android.content.Intent
+import android.content.res.Configuration
import android.graphics.Bitmap
import android.graphics.Paint
import android.view.View
@@ -15,6 +16,7 @@ import com.todoroo.astrid.data.Task
import com.todoroo.astrid.subtasks.SubtasksHelper
import kotlinx.coroutines.runBlocking
import org.tasks.BuildConfig
+import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.data.SubtaskInfo
import org.tasks.data.TaskContainer
@@ -40,10 +42,10 @@ internal class ScrollableViewsFactory(
private val defaultFilterProvider: DefaultFilterProvider,
private val checkBoxProvider: CheckBoxProvider,
private val locale: Locale,
- private val chipProvider: ChipProvider
+ private val chipProvider: ChipProvider,
+ private val localBroadcastManager: LocalBroadcastManager
) : RemoteViewsFactory {
private val indentPadding: Int
- private var isDark = false
private var showDueDates = false
private var endDueDate = false
private var showCheckboxes = false
@@ -69,6 +71,14 @@ internal class ScrollableViewsFactory(
private var sortMode = -1
private var tasks = SectionedDataSource(emptyList(), false, 0, collapsed)
private val widgetPreferences = WidgetPreferences(context, preferences, widgetId)
+ private var isDark = checkIfDark
+
+ private val checkIfDark: Boolean
+ get() = when (widgetPreferences.themeIndex) {
+ 0 -> false
+ 3 -> context.isDark
+ else -> true
+ }
override fun onCreate() {}
@@ -108,6 +118,10 @@ internal class ScrollableViewsFactory(
override fun getItemId(position: Int) = getTask(position)?.id ?: 0
override fun hasStableIds(): Boolean {
+ if (isDark != checkIfDark) {
+ isDark = !isDark
+ localBroadcastManager.reconfigureWidget(widgetId)
+ }
return true
}
@@ -337,7 +351,6 @@ internal class ScrollableViewsFactory(
showFullTaskTitle = widgetPreferences.showFullTaskTitle()
showDescription = widgetPreferences.showDescription()
showFullDescription = widgetPreferences.showFullDescription()
- isDark = widgetPreferences.themeIndex > 0
chipProvider.isDark = isDark
textColorPrimary = context.getColor(if (isDark) R.color.white_87 else R.color.black_87)
textColorSecondary = context.getColor(if (isDark) R.color.white_60 else R.color.black_60)
@@ -369,4 +382,10 @@ internal class ScrollableViewsFactory(
val metrics = context.resources.displayMetrics
indentPadding = (20 * metrics.density).toInt()
}
+
+ companion object {
+ val Context.isDark: Boolean
+ get() = (Configuration.UI_MODE_NIGHT_YES ==
+ (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK))
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java
index bf006b22a..9b9297cd5 100644
--- a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java
+++ b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java
@@ -8,6 +8,7 @@ import android.widget.RemoteViewsService;
import com.todoroo.astrid.subtasks.SubtasksHelper;
import dagger.hilt.android.AndroidEntryPoint;
import javax.inject.Inject;
+import org.tasks.LocalBroadcastManager;
import org.tasks.data.TaskDao;
import org.tasks.locale.Locale;
import org.tasks.preferences.DefaultFilterProvider;
@@ -24,6 +25,7 @@ public class ScrollableWidgetUpdateService extends RemoteViewsService {
@Inject DefaultFilterProvider defaultFilterProvider;
@Inject Locale locale;
@Inject ChipProvider chipProvider;
+ @Inject LocalBroadcastManager localBroadcastManager;
@Override
public void onStart(Intent intent, int startId) {
@@ -54,6 +56,7 @@ public class ScrollableWidgetUpdateService extends RemoteViewsService {
defaultFilterProvider,
new CheckBoxProvider(context, new ColorProvider(context, preferences)),
locale,
- chipProvider);
+ chipProvider,
+ localBroadcastManager);
}
}
diff --git a/app/src/main/java/org/tasks/widget/TasksWidget.kt b/app/src/main/java/org/tasks/widget/TasksWidget.kt
index 36c924564..b86545bdc 100644
--- a/app/src/main/java/org/tasks/widget/TasksWidget.kt
+++ b/app/src/main/java/org/tasks/widget/TasksWidget.kt
@@ -21,6 +21,7 @@ import org.tasks.locale.Locale
import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences
import org.tasks.themes.ThemeColor
+import org.tasks.widget.ScrollableViewsFactory.Companion.isDark
import timber.log.Timber
import javax.inject.Inject
@@ -111,6 +112,7 @@ class TasksWidget : AppWidgetProvider() {
val background: Int = when (themeIndex) {
1 -> android.R.color.black
2 -> R.color.md_background_dark
+ 3 -> if (context.isDark) R.color.md_background_dark else android.R.color.white
else -> android.R.color.white
}
return context.getColor(background)
diff --git a/app/src/main/java/org/tasks/widget/WidgetPreferences.java b/app/src/main/java/org/tasks/widget/WidgetPreferences.java
index e9b72a4c4..35a0a05b4 100644
--- a/app/src/main/java/org/tasks/widget/WidgetPreferences.java
+++ b/app/src/main/java/org/tasks/widget/WidgetPreferences.java
@@ -115,7 +115,7 @@ public class WidgetPreferences {
}
public int getThemeIndex() {
- return getInt(R.string.p_widget_theme, 0);
+ return getInt(R.string.p_widget_theme, 3);
}
public int getColor() {
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 8c0f143dc..1dbc1f20d 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -40,6 +40,7 @@
- @string/theme_light
- @string/theme_black
- @string/theme_dark
+ - @string/theme_system_default