From 424b07f8fc60ab356147fec94ca0cff36492a673 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 29 Sep 2020 16:12:24 -0500 Subject: [PATCH] Add 'System default' widget theme --- .../tasks/widget/ScrollableViewsFactory.kt | 25 ++++++++++++++++--- .../widget/ScrollableWidgetUpdateService.java | 5 +++- .../main/java/org/tasks/widget/TasksWidget.kt | 2 ++ .../org/tasks/widget/WidgetPreferences.java | 2 +- app/src/main/res/values/arrays.xml | 1 + 5 files changed, 30 insertions(+), 5 deletions(-) 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