Add night mode context extensions

pull/2536/head
Alex Baker 9 months ago
parent 84ab8d0517
commit 928ec9f647

@ -7,7 +7,6 @@ package com.todoroo.astrid.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
@ -43,6 +42,7 @@ import org.tasks.data.TagDataDao
import org.tasks.databinding.TaskListActivityBinding import org.tasks.databinding.TaskListActivityBinding
import org.tasks.dialogs.SortSettingsActivity import org.tasks.dialogs.SortSettingsActivity
import org.tasks.dialogs.WhatsNewDialog import org.tasks.dialogs.WhatsNewDialog
import org.tasks.extensions.Context.nightMode
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.intents.TaskIntents.getTaskListIntent import org.tasks.intents.TaskIntents.getTaskListIntent
import org.tasks.location.LocationPickerActivity 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?) { override suspend fun onTaskListItemClicked(task: Task?) {
AndroidUtilities.assertMainThread() AndroidUtilities.assertMainThread()
if (task == null) { if (task == null) {

@ -6,6 +6,7 @@ import android.content.Context
import android.content.Context.MODE_PRIVATE import android.content.Context.MODE_PRIVATE
import android.content.Intent import android.content.Intent
import android.content.Intent.ACTION_VIEW import android.content.Intent.ACTION_VIEW
import android.content.res.Configuration
import android.net.Uri import android.net.Uri
import android.widget.Toast import android.widget.Toast
import androidx.annotation.AnyRes 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(resId: Int, vararg formatArgs: Any) = openUri(getString(resId, formatArgs))
fun Context.openUri(url: String?) = fun Context.openUri(url: String?) =

@ -4,7 +4,6 @@ import android.app.Activity.RESULT_OK
import android.content.ComponentName import android.content.ComponentName
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import androidx.annotation.StringRes 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.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.dialogs.ThemePickerDialog import org.tasks.dialogs.ThemePickerDialog
import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog
import org.tasks.extensions.Context.isNightMode
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.locale.LocalePickerDialog import org.tasks.locale.LocalePickerDialog
import org.tasks.preferences.DefaultFilterProvider 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
import org.tasks.themes.ThemeColor.getLauncherColor import org.tasks.themes.ThemeColor.getLauncherColor
import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE
import java.util.* import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -74,7 +74,7 @@ class LookAndFeel : InjectingPreferenceFragment() {
} }
findPreference(R.string.p_desaturate_colors).setOnPreferenceChangeListener { _, _ -> 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() activity?.recreate()
} }
true true

@ -1,14 +1,17 @@
package org.tasks.themes; package org.tasks.themes;
import static org.tasks.extensions.Context.INSTANCE;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.app.AppCompatDelegate;
import org.tasks.R; import org.tasks.R;
import org.tasks.billing.Inventory; import org.tasks.billing.Inventory;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
@ -77,11 +80,7 @@ public class ThemeBase implements Parcelable {
} }
public boolean isDarkTheme(Activity activity) { public boolean isDarkTheme(Activity activity) {
return index == 4 || index == 5 return index == 4 || index == 5 ? INSTANCE.isNightMode(activity) : index > 0;
? Configuration.UI_MODE_NIGHT_YES
== (activity.getResources().getConfiguration().uiMode
& Configuration.UI_MODE_NIGHT_MASK)
: index > 0;
} }
public ContextThemeWrapper wrap(Context context) { public ContextThemeWrapper wrap(Context context) {

@ -2,7 +2,6 @@ package org.tasks.widget
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.res.Configuration
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.Paint import android.graphics.Paint
import android.view.View import android.view.View
@ -22,6 +21,7 @@ import org.tasks.data.TaskContainer
import org.tasks.data.TaskDao import org.tasks.data.TaskDao
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
import org.tasks.extensions.Context.isNightMode
import org.tasks.markdown.Markdown import org.tasks.markdown.Markdown
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -90,7 +90,7 @@ internal class ScrollableViewsFactory(
private val checkIfDark: Boolean private val checkIfDark: Boolean
get() = when (widgetPreferences.themeIndex) { get() = when (widgetPreferences.themeIndex) {
0 -> false 0 -> false
3 -> context.isDark 3 -> context.isNightMode
else -> true else -> true
} }
@ -391,10 +391,4 @@ internal class ScrollableViewsFactory(
val metrics = context.resources.displayMetrics val metrics = context.resources.displayMetrics
indentPadding = (20 * metrics.density).toInt() 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))
}
} }

@ -18,11 +18,11 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.tasks.R import org.tasks.R
import org.tasks.dialogs.FilterPicker import org.tasks.dialogs.FilterPicker
import org.tasks.extensions.Context.isNightMode
import org.tasks.intents.TaskIntents import org.tasks.intents.TaskIntents
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.themes.ThemeColor import org.tasks.themes.ThemeColor
import org.tasks.widget.ScrollableViewsFactory.Companion.isDark
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -146,7 +146,7 @@ class TasksWidget : AppWidgetProvider() {
val background: Int = when (themeIndex) { val background: Int = when (themeIndex) {
1 -> android.R.color.black 1 -> android.R.color.black
2 -> R.color.md_background_dark 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 else -> android.R.color.white
} }
return context.getColor(background) return context.getColor(background)

Loading…
Cancel
Save