From 8b8523bb1ba28551e849c7b32801d003dbcb3a1c Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sun, 21 Apr 2024 12:28:08 +0200 Subject: [PATCH] feat: option to not apply image filters at wallpaper changer (closes #188) --- .../bnyro/wallpaper/enums/WallpaperConfig.kt | 3 ++- .../ui/components/WallpaperChangerPref.kt | 14 ++++++++++++++ .../ui/components/prefs/CheckboxPref.kt | 19 ++++++++++--------- .../bnyro/wallpaper/util/BackgroundWorker.kt | 18 +++++++++++++----- .../bnyro/wallpaper/util/WallpaperHelper.kt | 7 +++++++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 47 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/bnyro/wallpaper/enums/WallpaperConfig.kt b/app/src/main/java/com/bnyro/wallpaper/enums/WallpaperConfig.kt index 73c31459..46ba806e 100644 --- a/app/src/main/java/com/bnyro/wallpaper/enums/WallpaperConfig.kt +++ b/app/src/main/java/com/bnyro/wallpaper/enums/WallpaperConfig.kt @@ -5,6 +5,7 @@ import com.bnyro.wallpaper.ui.nav.DrawerScreens data class WallpaperConfig( var target: WallpaperTarget = WallpaperTarget.BOTH, var source: WallpaperSource = WallpaperSource.ONLINE, - var selectedApiRoutes: List = listOf(DrawerScreens.apiScreens.first().route), + var applyImageFilters: Boolean = true, + var selectedApiRoutes: List = listOf(DrawerScreens.apiScreens[0].route), var localFolderUris: List = listOf() ) diff --git a/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperChangerPref.kt b/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperChangerPref.kt index 42085556..4d460d09 100644 --- a/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperChangerPref.kt +++ b/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperChangerPref.kt @@ -35,6 +35,7 @@ import com.bnyro.wallpaper.R import com.bnyro.wallpaper.enums.WallpaperConfig import com.bnyro.wallpaper.enums.WallpaperSource import com.bnyro.wallpaper.enums.WallpaperTarget +import com.bnyro.wallpaper.ui.components.prefs.CheckboxPref import com.bnyro.wallpaper.ui.components.prefs.MultiSelectionBlockPreference import com.bnyro.wallpaper.ui.components.prefs.ListPreference import com.bnyro.wallpaper.ui.components.prefs.SettingsCategory @@ -143,4 +144,17 @@ fun WallpaperChangerPref(config: WallpaperConfig, onChange: (WallpaperConfig) -> else -> Unit } } + + var applyImageFilters by remember { + mutableStateOf(config.applyImageFilters) + } + CheckboxPref( + prefKey = null, + title = stringResource(id = R.string.apply_image_filters), + defaultValue = applyImageFilters + ) { newValue -> + config.applyImageFilters = newValue + applyImageFilters = newValue + onChange(config) + } } diff --git a/app/src/main/java/com/bnyro/wallpaper/ui/components/prefs/CheckboxPref.kt b/app/src/main/java/com/bnyro/wallpaper/ui/components/prefs/CheckboxPref.kt index 17f01797..eabbff74 100644 --- a/app/src/main/java/com/bnyro/wallpaper/ui/components/prefs/CheckboxPref.kt +++ b/app/src/main/java/com/bnyro/wallpaper/ui/components/prefs/CheckboxPref.kt @@ -19,7 +19,7 @@ import com.bnyro.wallpaper.util.Preferences @Composable fun CheckboxPref( - prefKey: String, + prefKey: String? = null, title: String, summary: String? = null, defaultValue: Boolean = false, @@ -27,11 +27,17 @@ fun CheckboxPref( ) { var checked by remember { mutableStateOf( - Preferences.getBoolean(prefKey, defaultValue) + prefKey?.let { Preferences.getBoolean(it, defaultValue) } ?: defaultValue ) } val interactionSource = remember { MutableInteractionSource() } + fun onChange(newValue: Boolean) { + checked = newValue + if (prefKey != null) Preferences.edit { putBoolean(prefKey, checked) } + onCheckedChange.invoke(checked) + } + Row( modifier = Modifier .fillMaxWidth() @@ -40,8 +46,7 @@ fun CheckboxPref( interactionSource = interactionSource, indication = null ) { - checked = !checked - Preferences.edit { putBoolean(prefKey, checked) } + onChange(!checked) }, horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically @@ -53,11 +58,7 @@ fun CheckboxPref( ) Checkbox( checked = checked, - onCheckedChange = { - checked = it - Preferences.edit { putBoolean(prefKey, it) } - onCheckedChange.invoke(it) - } + onCheckedChange = ::onChange ) } } diff --git a/app/src/main/java/com/bnyro/wallpaper/util/BackgroundWorker.kt b/app/src/main/java/com/bnyro/wallpaper/util/BackgroundWorker.kt index bc4aead7..35fa3803 100644 --- a/app/src/main/java/com/bnyro/wallpaper/util/BackgroundWorker.kt +++ b/app/src/main/java/com/bnyro/wallpaper/util/BackgroundWorker.kt @@ -31,11 +31,19 @@ class BackgroundWorker( else -> return } ?: return - WallpaperHelper.setWallpaperWithFilters( - applicationContext, - bitmap, - config.target - ) + if (config.applyImageFilters) { + WallpaperHelper.setWallpaperWithFilters( + applicationContext, + bitmap, + config.target + ) + } else { + WallpaperHelper.setWallpaperWithoutFilters( + applicationContext, + bitmap, + config.target + ) + } } private suspend fun getOnlineWallpaper(config: WallpaperConfig): Bitmap? { diff --git a/app/src/main/java/com/bnyro/wallpaper/util/WallpaperHelper.kt b/app/src/main/java/com/bnyro/wallpaper/util/WallpaperHelper.kt index bebc30d0..3e08cda1 100644 --- a/app/src/main/java/com/bnyro/wallpaper/util/WallpaperHelper.kt +++ b/app/src/main/java/com/bnyro/wallpaper/util/WallpaperHelper.kt @@ -39,6 +39,13 @@ object WallpaperHelper { } } + suspend fun setWallpaperWithoutFilters(context: Context, src: Bitmap, mode: WallpaperTarget) { + withContext(Dispatchers.IO) { + val bitmap = resizeBitmapByPreference(context, src) + setWallpaper(context, bitmap, mode) + } + } + fun setWallpaper(context: Context, bitmap: Bitmap, mode: WallpaperTarget) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (mode in listOf(WallpaperTarget.BOTH, WallpaperTarget.HOME)) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 31a95166..8fb937ba 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,6 +65,7 @@ None Invert wallpaper by theme Invert the wallpaper to be dark on dark themes and light on light themes. + Apply image filters Network type All networks