From 928ec9f6477ef587dc3950bf13c5308ef01b2d65 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 24 Sep 2023 11:22:14 -0500 Subject: [PATCH] Add night mode context extensions --- .../java/com/todoroo/astrid/activity/MainActivity.kt | 5 +---- app/src/main/java/org/tasks/extensions/Context.kt | 7 +++++++ .../org/tasks/preferences/fragments/LookAndFeel.kt | 6 +++--- app/src/main/java/org/tasks/themes/ThemeBase.java | 11 +++++------ .../java/org/tasks/widget/ScrollableViewsFactory.kt | 10 ++-------- app/src/main/java/org/tasks/widget/TasksWidget.kt | 4 ++-- 6 files changed, 20 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt index ac35d091f..c76ee2f7d 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -7,7 +7,6 @@ package com.todoroo.astrid.activity import android.content.Context import android.content.Intent -import android.content.res.Configuration import android.os.Bundle import android.view.View import android.view.inputmethod.InputMethodManager @@ -43,6 +42,7 @@ import org.tasks.data.TagDataDao import org.tasks.databinding.TaskListActivityBinding import org.tasks.dialogs.SortSettingsActivity import org.tasks.dialogs.WhatsNewDialog +import org.tasks.extensions.Context.nightMode import org.tasks.filters.PlaceFilter import org.tasks.intents.TaskIntents.getTaskListIntent import org.tasks.location.LocationPickerActivity @@ -355,9 +355,6 @@ class MainActivity : AppCompatActivity(), TaskListFragmentCallbackHandler, Timer } } - private val nightMode: Int - get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK - override suspend fun onTaskListItemClicked(task: Task?) { AndroidUtilities.assertMainThread() if (task == null) { diff --git a/app/src/main/java/org/tasks/extensions/Context.kt b/app/src/main/java/org/tasks/extensions/Context.kt index 837cfa0f7..800f46058 100644 --- a/app/src/main/java/org/tasks/extensions/Context.kt +++ b/app/src/main/java/org/tasks/extensions/Context.kt @@ -6,6 +6,7 @@ import android.content.Context import android.content.Context.MODE_PRIVATE import android.content.Intent import android.content.Intent.ACTION_VIEW +import android.content.res.Configuration import android.net.Uri import android.widget.Toast import androidx.annotation.AnyRes @@ -25,6 +26,12 @@ object Context { } } + val Context.nightMode: Int + get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK + + val Context.isNightMode: Boolean + get() = nightMode == Configuration.UI_MODE_NIGHT_YES + fun Context.openUri(resId: Int, vararg formatArgs: Any) = openUri(getString(resId, formatArgs)) fun Context.openUri(url: String?) = diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt index 3bf83fa2f..64f17622d 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -4,7 +4,6 @@ import android.app.Activity.RESULT_OK import android.content.ComponentName import android.content.Intent import android.content.pm.PackageManager -import android.content.res.Configuration import android.os.Bundle import android.os.Handler import androidx.annotation.StringRes @@ -26,6 +25,7 @@ import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener import org.tasks.dialogs.ThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog +import org.tasks.extensions.Context.isNightMode import org.tasks.injection.InjectingPreferenceFragment import org.tasks.locale.LocalePickerDialog import org.tasks.preferences.DefaultFilterProvider @@ -37,7 +37,7 @@ import org.tasks.themes.ThemeBase.EXTRA_THEME_OVERRIDE import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor.getLauncherColor import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE -import java.util.* +import java.util.Locale import javax.inject.Inject @AndroidEntryPoint @@ -74,7 +74,7 @@ class LookAndFeel : InjectingPreferenceFragment() { } findPreference(R.string.p_desaturate_colors).setOnPreferenceChangeListener { _, _ -> - if (context?.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES) { + if (context?.isNightMode == true) { activity?.recreate() } true diff --git a/app/src/main/java/org/tasks/themes/ThemeBase.java b/app/src/main/java/org/tasks/themes/ThemeBase.java index 8ed4d7b97..5b0235c43 100644 --- a/app/src/main/java/org/tasks/themes/ThemeBase.java +++ b/app/src/main/java/org/tasks/themes/ThemeBase.java @@ -1,14 +1,17 @@ package org.tasks.themes; +import static org.tasks.extensions.Context.INSTANCE; + import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.content.res.Configuration; import android.os.Parcel; import android.os.Parcelable; import android.view.ContextThemeWrapper; + import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatDelegate; + import org.tasks.R; import org.tasks.billing.Inventory; import org.tasks.preferences.Preferences; @@ -77,11 +80,7 @@ public class ThemeBase implements Parcelable { } public boolean isDarkTheme(Activity activity) { - return index == 4 || index == 5 - ? Configuration.UI_MODE_NIGHT_YES - == (activity.getResources().getConfiguration().uiMode - & Configuration.UI_MODE_NIGHT_MASK) - : index > 0; + return index == 4 || index == 5 ? INSTANCE.isNightMode(activity) : index > 0; } public ContextThemeWrapper wrap(Context context) { diff --git a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt index 12db7f00c..ab7aa3933 100644 --- a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt +++ b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.kt @@ -2,7 +2,6 @@ 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 @@ -22,6 +21,7 @@ import org.tasks.data.TaskContainer import org.tasks.data.TaskDao import org.tasks.data.TaskListQuery.getQuery import org.tasks.date.DateTimeUtils +import org.tasks.extensions.Context.isNightMode import org.tasks.markdown.Markdown import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences @@ -90,7 +90,7 @@ internal class ScrollableViewsFactory( private val checkIfDark: Boolean get() = when (widgetPreferences.themeIndex) { 0 -> false - 3 -> context.isDark + 3 -> context.isNightMode else -> true } @@ -391,10 +391,4 @@ 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/TasksWidget.kt b/app/src/main/java/org/tasks/widget/TasksWidget.kt index 8a0e02d64..c3f664bea 100644 --- a/app/src/main/java/org/tasks/widget/TasksWidget.kt +++ b/app/src/main/java/org/tasks/widget/TasksWidget.kt @@ -18,11 +18,11 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.runBlocking import org.tasks.R import org.tasks.dialogs.FilterPicker +import org.tasks.extensions.Context.isNightMode import org.tasks.intents.TaskIntents 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 @@ -146,7 +146,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 + 3 -> if (context.isNightMode) R.color.md_background_dark else android.R.color.white else -> android.R.color.white } return context.getColor(background)