From 670657b48440e8bf9b4935e2576a995b6268f36e Mon Sep 17 00:00:00 2001 From: Matt Tighe Date: Tue, 25 Jan 2022 10:06:47 -0800 Subject: [PATCH] fixes #23404: add switch to wallpaper settings to disable tap-to-change --- .../org/mozilla/fenix/home/HomeFragment.kt | 2 +- .../settings/wallpaper/WallpaperSettings.kt | 79 ++++++++++++++++--- .../wallpaper/WallpaperSettingsFragment.kt | 10 +++ .../java/org/mozilla/fenix/utils/Settings.kt | 5 ++ app/src/main/res/values/preference_keys.xml | 1 + app/src/main/res/values/strings.xml | 4 + 6 files changed, 87 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 6b436cb8b3..a032cd1255 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -763,7 +763,7 @@ class HomeFragment : Fragment() { requireComponents.reviewPromptController.promptReview(requireActivity()) } - if (shouldEnableWallpaper()) { + if (shouldEnableWallpaper() && context.settings().wallpapersSwitchedByLogoTap) { binding.wordmark.setOnClickListener { val manager = requireComponents.wallpaperManager manager.updateWallpaper( diff --git a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt index a543646754..48b94fea8c 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt @@ -10,6 +10,9 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image import androidx.compose.foundation.border import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -24,6 +27,8 @@ import androidx.compose.material.Snackbar import androidx.compose.material.SnackbarDuration import androidx.compose.material.SnackbarHost import androidx.compose.material.Surface +import androidx.compose.material.Switch +import androidx.compose.material.SwitchDefaults import androidx.compose.material.Text import androidx.compose.material.TextButton import androidx.compose.material.rememberScaffoldState @@ -57,6 +62,8 @@ import java.util.Locale * @param selectedWallpaper The currently selected wallpaper. * @param onSelectWallpaper Callback for when a new wallpaper is selected. * @param onViewWallpaper Callback for when the view action is clicked from snackbar. + * @param tapLogoSwitchChecked Enabled state for switch controlling taps to change wallpaper. + * @param onTapLogoSwitchCheckedChange Callback for when state of above switch is updated. */ @Composable @Suppress("LongParameterList") @@ -67,6 +74,8 @@ fun WallpaperSettings( selectedWallpaper: Wallpaper, onSelectWallpaper: (Wallpaper) -> Unit, onViewWallpaper: () -> Unit, + tapLogoSwitchChecked: Boolean, + onTapLogoSwitchCheckedChange: (Boolean) -> Unit ) { val coroutineScope = rememberCoroutineScope() val scaffoldState = rememberScaffoldState() @@ -80,7 +89,7 @@ fun WallpaperSettings( } } ) { - Surface(color = FirefoxTheme.colors.layer2) { + Column { WallpaperThumbnails( wallpapers = wallpapers, defaultWallpaper = defaultWallpaper, @@ -96,6 +105,7 @@ fun WallpaperSettings( onSelectWallpaper(updatedWallpaper) }, ) + WallpaperLogoSwitch(tapLogoSwitchChecked, onCheckedChange = onTapLogoSwitchCheckedChange) } } } @@ -158,18 +168,20 @@ private fun WallpaperThumbnails( numColumns: Int = 3, onSelectWallpaper: (Wallpaper) -> Unit, ) { - LazyVerticalGrid( - cells = GridCells.Fixed(numColumns), - modifier = Modifier.padding(vertical = 30.dp, horizontal = 20.dp) - ) { - items(wallpapers) { wallpaper -> - WallpaperThumbnailItem( - wallpaper = wallpaper, - defaultWallpaper = defaultWallpaper, - loadWallpaperResource = loadWallpaperResource, - isSelected = selectedWallpaper == wallpaper, - onSelect = onSelectWallpaper - ) + Surface(color = FirefoxTheme.colors.layer2) { + LazyVerticalGrid( + cells = GridCells.Fixed(numColumns), + modifier = Modifier.padding(vertical = 30.dp, horizontal = 20.dp) + ) { + items(wallpapers) { wallpaper -> + WallpaperThumbnailItem( + wallpaper = wallpaper, + defaultWallpaper = defaultWallpaper, + loadWallpaperResource = loadWallpaperResource, + isSelected = selectedWallpaper == wallpaper, + onSelect = onSelectWallpaper + ) + } } } } @@ -227,6 +239,45 @@ private fun WallpaperThumbnailItem( } } +@Composable +private fun WallpaperLogoSwitch( + checked: Boolean, + onCheckedChange: (Boolean) -> Unit +) { + Column( + modifier = Modifier.padding(horizontal = 12.dp, vertical = 16.dp), + ) { + Row( + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + Text( + text = stringResource(R.string.wallpaper_tap_to_change_switch_label), + color = FirefoxTheme.colors.textPrimary, + fontSize = 18.sp, + modifier = Modifier.padding(start = 4.dp) + ) + Switch( + checked = checked, + onCheckedChange = onCheckedChange, + colors = SwitchDefaults.colors( + checkedThumbColor = FirefoxTheme.colors.formSelected, + checkedTrackColor = FirefoxTheme.colors.formSurface, + uncheckedTrackColor = FirefoxTheme.colors.formSurface + ) + ) + } + + Text( + text = stringResource(R.string.wallpaper_tap_to_change_switch_description), + color = FirefoxTheme.colors.textDisabled, + fontSize = 12.sp, + fontFamily = FontFamily(Font(R.font.metropolis_semibold)), + modifier = Modifier.padding(start = 8.dp, top = 16.dp) + ) + } +} + @Preview @Composable private fun WallpaperThumbnailsPreview() { @@ -243,6 +294,8 @@ private fun WallpaperThumbnailsPreview() { selectedWallpaper = wallpaperManager.currentWallpaper, onSelectWallpaper = {}, onViewWallpaper = {}, + tapLogoSwitchChecked = false, + onTapLogoSwitchCheckedChange = {} ) } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt index 16bbb32e9e..28277b5671 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt @@ -27,6 +27,10 @@ class WallpaperSettingsFragment : Fragment() { requireComponents.wallpaperManager } + private val settings by lazy { + requireComponents.settings + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -37,6 +41,7 @@ class WallpaperSettingsFragment : Fragment() { setContent { FirefoxTheme { var currentWallpaper by remember { mutableStateOf(wallpaperManager.currentWallpaper) } + var wallpapersSwitchedByLogo by remember { mutableStateOf(settings.wallpapersSwitchedByLogoTap) } WallpaperSettings( wallpapers = wallpaperManager.availableWallpapers, defaultWallpaper = WallpaperManager.defaultWallpaper, @@ -49,6 +54,11 @@ class WallpaperSettingsFragment : Fragment() { wallpaperManager.currentWallpaper = selectedWallpaper }, onViewWallpaper = { findNavController().navigate(R.id.homeFragment) }, + tapLogoSwitchChecked = wallpapersSwitchedByLogo, + onTapLogoSwitchCheckedChange = { + settings.wallpapersSwitchedByLogoTap = it + wallpapersSwitchedByLogo = it + } ) } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 9a0d06b321..bd9ce45271 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -171,6 +171,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = WallpaperManager.defaultWallpaper.name ) + var wallpapersSwitchedByLogoTap by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_wallpapers_switched_by_logo_tap), + default = true + ) + var openLinksInAPrivateTab by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_open_links_in_a_private_tab), default = false diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index bb49582f1d..6b294879c3 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -190,6 +190,7 @@ pref_key_wallpapers pref_key_current_wallpaper + pref_key_wallpapers_switched_by_logo_tap pref_key_encryption_key_generated diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3a68d541a8..1050e2f132 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -464,6 +464,10 @@ Wallpaper updated! View + + Tap logo to change wallpaper + + Cycle through and update image without leaving the homepage.