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.