diff --git a/app/src/main/java/com/anthonyla/paperize/core/SettingsConstants.kt b/app/src/main/java/com/anthonyla/paperize/core/SettingsConstants.kt index b430f337..4704e45a 100644 --- a/app/src/main/java/com/anthonyla/paperize/core/SettingsConstants.kt +++ b/app/src/main/java/com/anthonyla/paperize/core/SettingsConstants.kt @@ -47,4 +47,5 @@ object SettingsConstants { const val START_HOUR = "start_hour" const val START_MINUTE = "start_minute" const val SHUFFLE = "shuffle" + const val SKIP_LANDSCAPE = "skip_landscape" } \ No newline at end of file diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/PaperizeApp.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/PaperizeApp.kt index 335b35ee..f35701ab 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/PaperizeApp.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/PaperizeApp.kt @@ -510,6 +510,9 @@ fun PaperizeApp( if (settingsState.value.wallpaperSettings.enableChanger) { scheduler.scheduleRefresh(refresh) } + }, + onSkipLandscapeChange = { skipLandscape -> + settingsViewModel.onEvent(SettingsEvent.SetSkipLandscape(skipLandscape)) } ) } diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/home_screen/HomeScreen.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/home_screen/HomeScreen.kt index 86ed9ee2..f66a939b 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/home_screen/HomeScreen.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/home_screen/HomeScreen.kt @@ -64,7 +64,8 @@ fun HomeScreen( onChangeStartTimeToggle: (Boolean) -> Unit, onStartTimeChange: (TimePickerState) -> Unit, onShuffleCheck: (Boolean) -> Unit, - onRefreshChange: (Boolean) -> Unit + onRefreshChange: (Boolean) -> Unit, + onSkipLandscapeChange: (Boolean) -> Unit ) { val tabItems = getTabItems() val pagerState = rememberPagerState(0) { tabItems.size } @@ -142,7 +143,8 @@ fun HomeScreen( onChangeStartTimeToggle = onChangeStartTimeToggle, onStartTimeChange = onStartTimeChange, onShuffleCheck = onShuffleCheck, - onRefreshChange = onRefreshChange + onRefreshChange = onRefreshChange, + onSkipLandscapeChange = onSkipLandscapeChange ) else -> LibraryScreen( albums = albums, diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsEvent.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsEvent.kt index fb3754dd..d1e7f44a 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsEvent.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsEvent.kt @@ -34,4 +34,5 @@ sealed class SettingsEvent { data class SetStartTime(val hour: Int, val minute: Int): SettingsEvent() data class SetShuffle(val shuffle: Boolean): SettingsEvent() data class SetRefresh(val refresh: Boolean): SettingsEvent() + data class SetSkipLandscape(val skipLandscape: Boolean): SettingsEvent() } \ No newline at end of file diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsState.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsState.kt index 6b47f106..b61c7d4b 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsState.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsState.kt @@ -40,7 +40,8 @@ data class SettingsState( val nextSetTime: String? = null, val changeStartTime: Boolean = false, val startTime: Pair = Pair(0, 0), - val refresh: Boolean = true + val refresh: Boolean = true, + val skipLandscape: Boolean = false ) data class EffectSettings( @@ -77,6 +78,7 @@ data class SettingsState( val lockGrayscalePercentage: Int, val lockAlbumName: String, val homeAlbumName: String, - val shuffle: Boolean + val shuffle: Boolean, + val skipLandscape: Boolean ) } \ No newline at end of file diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsViewModel.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsViewModel.kt index 31384a8a..1b154a36 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsViewModel.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/settings_screen/SettingsViewModel.kt @@ -108,7 +108,8 @@ class SettingsViewModel @Inject constructor( settingsDataStoreImpl.getIntFlow(SettingsConstants.START_HOUR), settingsDataStoreImpl.getIntFlow(SettingsConstants.START_MINUTE), settingsDataStoreImpl.getBooleanFlow(SettingsConstants.SHUFFLE), - settingsDataStoreImpl.getBooleanFlow(SettingsConstants.REFRESH) + settingsDataStoreImpl.getBooleanFlow(SettingsConstants.REFRESH), + settingsDataStoreImpl.getBooleanFlow(SettingsConstants.SKIP_LANDSCAPE) ) { flows -> ScheduleSettings( scheduleSeparately = flows[0] as Boolean? ?: false, @@ -119,7 +120,8 @@ class SettingsViewModel @Inject constructor( changeStartTime = flows[5] as Boolean? ?: false, startTime = Pair(flows[6] as Int? ?: 0, flows[7] as Int? ?: 0), shuffle = flows[8] as Boolean? ?: true, - refresh = flows[9] as Boolean? ?: true + refresh = flows[9] as Boolean? ?: true, + skipLandscape = flows[10] as Boolean? ?: false ) } @@ -547,6 +549,12 @@ class SettingsViewModel @Inject constructor( } } + is SettingsEvent.SetSkipLandscape -> { + viewModelScope.launch { + settingsDataStoreImpl.putBoolean(SettingsConstants.SKIP_LANDSCAPE, event.skipLandscape) + } + } + is SettingsEvent.Reset -> { viewModelScope.launch { val keysToDelete = listOf( @@ -589,7 +597,8 @@ class SettingsViewModel @Inject constructor( SettingsConstants.START_HOUR, SettingsConstants.START_MINUTE, SettingsConstants.SHUFFLE, - SettingsConstants.REFRESH + SettingsConstants.REFRESH, + SettingsConstants.SKIP_LANDSCAPE ) settingsDataStoreImpl.clear(keysToDelete) } diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/wallpaper_screen/WallpaperScreen.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/wallpaper_screen/WallpaperScreen.kt index 0b82b8a6..50cabd07 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/wallpaper_screen/WallpaperScreen.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/wallpaper_screen/WallpaperScreen.kt @@ -46,6 +46,7 @@ import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.co import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components.IndividualSchedulingAndToggleRow import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components.RefreshSwitch import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components.ShuffleSwitch +import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components.SkipLandscapeSwitch import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components.TimeSliders import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components.VignetteSwitchAndSlider import com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components.WallpaperPreviewAndScale @@ -81,7 +82,8 @@ fun WallpaperScreen( onChangeStartTimeToggle: (Boolean) -> Unit, onStartTimeChange: (TimePickerState) -> Unit, onShuffleCheck: (Boolean) -> Unit, - onRefreshChange: (Boolean) -> Unit + onRefreshChange: (Boolean) -> Unit, + onSkipLandscapeChange: (Boolean) -> Unit ) { val shouldShowScreen = wallpaperSettings.setHomeWallpaper || wallpaperSettings.setLockWallpaper val shouldShowSettings = shouldShowScreen && homeSelectedAlbum != null && lockSelectedAlbum != null @@ -274,6 +276,10 @@ fun WallpaperScreen( refresh = scheduleSettings.refresh, onRefreshChange = onRefreshChange ) + SkipLandscapeSwitch( + skipLandscape = scheduleSettings.skipLandscape, + onSkipLandscapeChange = onSkipLandscapeChange + ) } } diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/wallpaper_screen/components/SkipLandscapeSwitch.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/wallpaper_screen/components/SkipLandscapeSwitch.kt new file mode 100644 index 00000000..83bc2eb5 --- /dev/null +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/presentation/wallpaper_screen/components/SkipLandscapeSwitch.kt @@ -0,0 +1,61 @@ +package com.anthonyla.paperize.feature.wallpaper.presentation.wallpaper_screen.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.anthonyla.paperize.R + +@Composable +fun SkipLandscapeSwitch( + skipLandscape: Boolean, + onSkipLandscapeChange: (Boolean) -> Unit +) { + Surface( + tonalElevation = 10.dp, + shape = RoundedCornerShape(16.dp), + modifier = Modifier + .fillMaxWidth() + .padding(PaddingValues(horizontal = 16.dp, vertical = 8.dp)) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Column( + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Text( + text = stringResource(R.string.skip_landscape_mode), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.W500 + ) + Text( + text = stringResource(R.string.prevent_changing_during_landscape_mode), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + Switch( + checked = skipLandscape, + onCheckedChange = onSkipLandscapeChange + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/HomeWallpaperService.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/HomeWallpaperService.kt index 70c42f8e..645956f2 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/HomeWallpaperService.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/HomeWallpaperService.kt @@ -204,7 +204,8 @@ class HomeWallpaperService: Service() { lockGrayscalePercentage = settingsDataStoreImpl.getInt(SettingsConstants.LOCK_GRAYSCALE_PERCENTAGE) ?: 0, lockAlbumName = settingsDataStoreImpl.getString(SettingsConstants.LOCK_ALBUM_NAME) ?: "", homeAlbumName = settingsDataStoreImpl.getString(SettingsConstants.HOME_ALBUM_NAME) ?: "", - shuffle = settingsDataStoreImpl.getBoolean(SettingsConstants.SHUFFLE) ?: true + shuffle = settingsDataStoreImpl.getBoolean(SettingsConstants.SHUFFLE) ?: true, + skipLandscape = settingsDataStoreImpl.getBoolean(SettingsConstants.SKIP_LANDSCAPE) ?: false ) } @@ -224,6 +225,14 @@ class HomeWallpaperService: Service() { onDestroy() return } + + // Check if we should skip wallpaper change due to landscape orientation + if (settings.skipLandscape && context.resources.configuration.orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) { + Log.d("PaperizeWallpaperChanger", "Skipping wallpaper change - device is in landscape mode") + onDestroy() + return + } + var homeAlbum = selectedAlbum.find { it.album.initialAlbumName == settings.homeAlbumName } if (homeAlbum == null) { onDestroy() @@ -561,7 +570,7 @@ class HomeWallpaperService: Service() { if (bothEnabled) { setWallpaper( context = context, - wallpaper = currentHomeWallpaper.decompress("content://com.android.externalstorage.documents/").toUri(), + wallpaper = currentHomeWallpaper.decompress("content://com.android/externalstorage/documents/").toUri(), darken = settings.darken, darkenPercent = settings.homeDarkenPercentage, scaling = settings.scaling, @@ -578,7 +587,7 @@ class HomeWallpaperService: Service() { if (settings.setHome) { setWallpaper( context = context, - wallpaper = currentHomeWallpaper.decompress("content://com.android.externalstorage.documents/").toUri(), + wallpaper = currentHomeWallpaper.decompress("content://com.android/externalstorage/documents/").toUri(), darken = settings.darken, darkenPercent = settings.homeDarkenPercentage, scaling = settings.scaling, diff --git a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/LockWallpaperService.kt b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/LockWallpaperService.kt index 5fff58f5..229cff63 100644 --- a/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/LockWallpaperService.kt +++ b/app/src/main/java/com/anthonyla/paperize/feature/wallpaper/wallpaper_service/LockWallpaperService.kt @@ -186,7 +186,8 @@ class LockWallpaperService: Service() { lockGrayscalePercentage = settingsDataStoreImpl.getInt(SettingsConstants.LOCK_GRAYSCALE_PERCENTAGE) ?: 0, lockAlbumName = settingsDataStoreImpl.getString(SettingsConstants.LOCK_ALBUM_NAME) ?: "", homeAlbumName = settingsDataStoreImpl.getString(SettingsConstants.HOME_ALBUM_NAME) ?: "", - shuffle = settingsDataStoreImpl.getBoolean(SettingsConstants.SHUFFLE) ?: true + shuffle = settingsDataStoreImpl.getBoolean(SettingsConstants.SHUFFLE) ?: true, + skipLandscape = settingsDataStoreImpl.getBoolean(SettingsConstants.SKIP_LANDSCAPE) ?: false ) } @@ -206,6 +207,14 @@ class LockWallpaperService: Service() { onDestroy() return } + + // Check if we should skip wallpaper change due to landscape orientation + if (settings.skipLandscape && context.resources.configuration.orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) { + Log.d("PaperizeWallpaperChanger", "Skipping wallpaper change - device is in landscape mode") + onDestroy() + return + } + val lockAlbum = selectedAlbum.find { it.album.initialAlbumName == settings.lockAlbumName } val homeAlbum = selectedAlbum.find { it.album.initialAlbumName == settings.homeAlbumName } if (lockAlbum == null || homeAlbum == null) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f3df7e20..9f6fb30f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -148,6 +148,7 @@ Show interval sliders Time Interval Blur Effect + Skip in landscape mode Paperize is running Next wallpaper change: %1$s Delay Notice @@ -190,4 +191,5 @@ Darken the edges of the image Make the colors grayscale Shuffle the wallpapers + Prevent changing during landscape mode