diff --git a/androidApp/src/main/kotlin/org/michaelbel/movies/MainActivity.kt b/androidApp/src/main/kotlin/org/michaelbel/movies/MainActivity.kt index 5473d9446..265d3acf5 100644 --- a/androidApp/src/main/kotlin/org/michaelbel/movies/MainActivity.kt +++ b/androidApp/src/main/kotlin/org/michaelbel/movies/MainActivity.kt @@ -9,6 +9,9 @@ import androidx.fragment.app.FragmentActivity import org.koin.androidx.viewmodel.ext.android.viewModel import org.michaelbel.movies.common.ktx.launchAndCollectIn import org.michaelbel.movies.ui.ktx.resolveNotificationPreferencesIntent +import org.michaelbel.movies.ui.ktx.setScreenshotBlockEnabled +import org.michaelbel.movies.ui.ktx.supportRegisterScreenCaptureCallback +import org.michaelbel.movies.ui.ktx.supportUnregisterScreenCaptureCallback import org.michaelbel.movies.ui.shortcuts.installShortcuts internal class MainActivity: FragmentActivity() { @@ -26,8 +29,21 @@ internal class MainActivity: FragmentActivity() { } resolveNotificationPreferencesIntent() viewModel.run { + isScreenshotBlockEnabled.launchAndCollectIn(this@MainActivity) { enabled -> + window.setScreenshotBlockEnabled(enabled) + } authenticateFlow.launchAndCollectIn(this@MainActivity) { authenticate(this@MainActivity) } cancelFlow.launchAndCollectIn(this@MainActivity) { finish() } } } + + override fun onStart() { + super.onStart() + supportRegisterScreenCaptureCallback() + } + + override fun onStop() { + super.onStop() + supportUnregisterScreenCaptureCallback() + } } \ No newline at end of file diff --git a/androidApp/src/main/kotlin/org/michaelbel/movies/MainViewModel.kt b/androidApp/src/main/kotlin/org/michaelbel/movies/MainViewModel.kt index c73ee660d..38d945ce0 100644 --- a/androidApp/src/main/kotlin/org/michaelbel/movies/MainViewModel.kt +++ b/androidApp/src/main/kotlin/org/michaelbel/movies/MainViewModel.kt @@ -54,6 +54,13 @@ internal class MainViewModel( initialValue = ThemeData.Default ) + val isScreenshotBlockEnabled: StateFlow = interactor.isScreenshotBlockEnabled + .stateIn( + scope = this, + started = SharingStarted.Lazily, + initialValue = false + ) + init { fetchBiometric() fetchRemoteConfig() diff --git a/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/SettingsInteractor.kt b/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/SettingsInteractor.kt index 26fc22aaf..2ac9432b2 100644 --- a/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/SettingsInteractor.kt +++ b/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/SettingsInteractor.kt @@ -18,6 +18,8 @@ interface SettingsInteractor { val isBiometricEnabled: Flow + val isScreenshotBlockEnabled: Flow + suspend fun isBiometricEnabledAsync(): Boolean suspend fun selectTheme( @@ -47,4 +49,8 @@ interface SettingsInteractor { suspend fun setBiometricEnabled( enabled: Boolean ) + + suspend fun setScreenshotBlockEnabled( + enabled: Boolean + ) } \ No newline at end of file diff --git a/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/impl/SettingsInteractorImpl.kt b/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/impl/SettingsInteractorImpl.kt index 0dc32776a..bd12ea2d1 100644 --- a/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/impl/SettingsInteractorImpl.kt +++ b/core/interactor-kmp/src/commonMain/kotlin/org/michaelbel/movies/interactor/impl/SettingsInteractorImpl.kt @@ -31,6 +31,8 @@ internal class SettingsInteractorImpl( override val isBiometricEnabled: Flow = settingsRepository.isBiometricEnabled + override val isScreenshotBlockEnabled: Flow = settingsRepository.isScreenshotBlockEnabled + override suspend fun isBiometricEnabledAsync(): Boolean { return settingsRepository.isBiometricEnabledAsync() } @@ -80,4 +82,10 @@ internal class SettingsInteractorImpl( settingsRepository.setBiometricEnabled(enabled) } } + + override suspend fun setScreenshotBlockEnabled(enabled: Boolean) { + withContext(dispatchers.main) { + settingsRepository.setScreenshotBlockEnabled(enabled) + } + } } \ No newline at end of file diff --git a/core/persistence-kmp/src/commonMain/kotlin/org/michaelbel/movies/persistence/datastore/MoviesPreferences.kt b/core/persistence-kmp/src/commonMain/kotlin/org/michaelbel/movies/persistence/datastore/MoviesPreferences.kt index a716ea215..605ee7e79 100644 --- a/core/persistence-kmp/src/commonMain/kotlin/org/michaelbel/movies/persistence/datastore/MoviesPreferences.kt +++ b/core/persistence-kmp/src/commonMain/kotlin/org/michaelbel/movies/persistence/datastore/MoviesPreferences.kt @@ -30,6 +30,9 @@ class MoviesPreferences( val isBiometricEnabledFlow: Flow get() = dataStore.data.map { preferences -> preferences[PREFERENCE_BIOMETRIC_KEY] } + val isScreenshotBlockEnabledFlow: Flow + get() = dataStore.data.map { preferences -> preferences[PREFERENCE_SCREENSHOT_BLOCK_KEY] } + val paletteKeyFlow: Flow get() = dataStore.data.map { preferences -> preferences[PREFERENCE_PALETTE_KEY] } @@ -125,6 +128,12 @@ class MoviesPreferences( } } + suspend fun setScreenshotBlockEnabled(enabled: Boolean) { + dataStore.edit { preferences -> + preferences[PREFERENCE_SCREENSHOT_BLOCK_KEY] = enabled + } + } + suspend fun setPaletteKey(paletteKey: Int) { dataStore.edit { preferences -> preferences[PREFERENCE_PALETTE_KEY] = paletteKey @@ -149,5 +158,6 @@ class MoviesPreferences( private val PREFERENCE_BIOMETRIC_KEY = booleanPreferencesKey("biometric") private val PREFERENCE_PALETTE_KEY = intPreferencesKey("palette") private val PREFERENCE_SEED_COLOR_KEY = intPreferencesKey("seed_color") + private val PREFERENCE_SCREENSHOT_BLOCK_KEY = booleanPreferencesKey("screenshot_block") } } \ No newline at end of file diff --git a/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/SettingsRepository.kt b/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/SettingsRepository.kt index 218cda752..901a89d4c 100644 --- a/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/SettingsRepository.kt +++ b/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/SettingsRepository.kt @@ -18,6 +18,8 @@ interface SettingsRepository { val isBiometricEnabled: Flow + val isScreenshotBlockEnabled: Flow + suspend fun isBiometricEnabledAsync(): Boolean suspend fun selectTheme( @@ -47,4 +49,8 @@ interface SettingsRepository { suspend fun setBiometricEnabled( enabled: Boolean ) + + suspend fun setScreenshotBlockEnabled( + enabled: Boolean + ) } \ No newline at end of file diff --git a/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/impl/SettingsRepositoryImpl.kt b/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/impl/SettingsRepositoryImpl.kt index 5d32cdc94..421751298 100644 --- a/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/impl/SettingsRepositoryImpl.kt +++ b/core/repository-kmp/src/commonMain/kotlin/org/michaelbel/movies/repository/impl/SettingsRepositoryImpl.kt @@ -48,6 +48,10 @@ internal class SettingsRepositoryImpl( enabled ?: false } + override val isScreenshotBlockEnabled: Flow = preferences.isScreenshotBlockEnabledFlow.map { enabled -> + enabled ?: false + } + override suspend fun isBiometricEnabledAsync(): Boolean { return preferences.isBiometricEnabledAsync() } @@ -79,4 +83,8 @@ internal class SettingsRepositoryImpl( override suspend fun setBiometricEnabled(enabled: Boolean) { preferences.setBiometricEnabled(enabled) } + + override suspend fun setScreenshotBlockEnabled(enabled: Boolean) { + preferences.setScreenshotBlockEnabled(enabled) + } } \ No newline at end of file diff --git a/core/ui-kmp/src/androidMain/AndroidManifest.xml b/core/ui-kmp/src/androidMain/AndroidManifest.xml index ab25f9008..67bfdb8af 100644 --- a/core/ui-kmp/src/androidMain/AndroidManifest.xml +++ b/core/ui-kmp/src/androidMain/AndroidManifest.xml @@ -2,6 +2,8 @@ + + = 34) { + Activity.ScreenCaptureCallback {} + } else { + Unit + } + } + +fun Activity.supportRegisterScreenCaptureCallback() { + if (Build.VERSION.SDK_INT >= 34) { + registerScreenCaptureCallback(mainExecutor, screenCaptureCallback as Activity.ScreenCaptureCallback) + } +} + +fun Activity.supportUnregisterScreenCaptureCallback() { + if (Build.VERSION.SDK_INT >= 34) { + unregisterScreenCaptureCallback(screenCaptureCallback as Activity.ScreenCaptureCallback) + } +} \ No newline at end of file diff --git a/core/ui-kmp/src/androidMain/kotlin/org/michaelbel/movies/ui/ktx/WindowKtx.kt b/core/ui-kmp/src/androidMain/kotlin/org/michaelbel/movies/ui/ktx/WindowKtx.kt new file mode 100644 index 000000000..0bced3734 --- /dev/null +++ b/core/ui-kmp/src/androidMain/kotlin/org/michaelbel/movies/ui/ktx/WindowKtx.kt @@ -0,0 +1,12 @@ +package org.michaelbel.movies.ui.ktx + +import android.view.Window +import android.view.WindowManager + +fun Window.setScreenshotBlockEnabled(enabled: Boolean) { + if (enabled) { + setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE) + } else { + clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + } +} \ No newline at end of file diff --git a/core/ui-kmp/src/commonMain/composeResources/values-ru/strings.xml b/core/ui-kmp/src/commonMain/composeResources/values-ru/strings.xml index 4e95f2c38..f9e5c327f 100644 --- a/core/ui-kmp/src/commonMain/composeResources/values-ru/strings.xml +++ b/core/ui-kmp/src/commonMain/composeResources/values-ru/strings.xml @@ -114,6 +114,8 @@ Обнови приложение Используя In-App Update API Палитра цветов + Скриншоты + Запретить делать скриншоты Отображает предстоящие фильмы Скоро в кино diff --git a/core/ui-kmp/src/commonMain/composeResources/values/strings.xml b/core/ui-kmp/src/commonMain/composeResources/values/strings.xml index 014599d8e..e321af246 100644 --- a/core/ui-kmp/src/commonMain/composeResources/values/strings.xml +++ b/core/ui-kmp/src/commonMain/composeResources/values/strings.xml @@ -114,6 +114,8 @@ Update App Using In-App Update API Palette Colors + Screenshots + Block taking screenshots Display upcoming movies Upcoming Movies diff --git a/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/icons/MoviesIcons.kt b/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/icons/MoviesIcons.kt index 0fff77df1..83c23d805 100644 --- a/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/icons/MoviesIcons.kt +++ b/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/icons/MoviesIcons.kt @@ -20,6 +20,7 @@ import androidx.compose.material.icons.outlined.LocalMovies import androidx.compose.material.icons.outlined.LocationOn import androidx.compose.material.icons.outlined.Notifications import androidx.compose.material.icons.outlined.Palette +import androidx.compose.material.icons.outlined.Screenshot import androidx.compose.material.icons.outlined.Search import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.Share @@ -79,6 +80,7 @@ object MoviesIcons { val LocalMovies = Icons.Outlined.LocalMovies val Notifications = Icons.Outlined.Notifications val Palette = Icons.Outlined.Palette + val Screenshot = Icons.Outlined.Screenshot val Search = Icons.Outlined.Search val Settings = Icons.Outlined.Settings val Share = Icons.Outlined.Share diff --git a/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/strings/MoviesStrings.kt b/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/strings/MoviesStrings.kt index 64dfd1f39..c1563fb09 100644 --- a/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/strings/MoviesStrings.kt +++ b/core/ui-kmp/src/commonMain/kotlin/org/michaelbel/movies/ui/strings/MoviesStrings.kt @@ -97,6 +97,8 @@ import movies.core.ui_kmp.generated.resources.settings_post_notifications_grante import movies.core.ui_kmp.generated.resources.settings_post_notifications_should_request import movies.core.ui_kmp.generated.resources.settings_review import movies.core.ui_kmp.generated.resources.settings_review_description +import movies.core.ui_kmp.generated.resources.settings_screenshots +import movies.core.ui_kmp.generated.resources.settings_screenshots_description import movies.core.ui_kmp.generated.resources.settings_theme import movies.core.ui_kmp.generated.resources.settings_theme_amoled import movies.core.ui_kmp.generated.resources.settings_theme_dark @@ -227,6 +229,8 @@ object MoviesStrings { val settings_update = Res.string.settings_update val settings_update_description = Res.string.settings_update_description val settings_palette_colors = Res.string.settings_palette_colors + val settings_screenshots = Res.string.settings_screenshots + val settings_screenshots_description = Res.string.settings_screenshots_description @Composable fun settings_app_version_name(vararg formatArgs: Any): String { diff --git a/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt b/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt index 83df47e1e..5d24cd275 100644 --- a/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt +++ b/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/SettingsViewModel.kt @@ -75,6 +75,13 @@ class SettingsViewModel( initialValue = false ) + val isScreenshotBlockEnabled: StateFlow = interactor.isScreenshotBlockEnabled + .stateIn( + scope = this, + started = SharingStarted.Lazily, + initialValue = false + ) + val appVersionData: StateFlow = flowOf(AppVersionData(appService.flavor.name)) .stateIn( scope = this, @@ -120,6 +127,10 @@ class SettingsViewModel( interactor.setBiometricEnabled(enabled) } + fun setScreenshotBlockEnabled(enabled: Boolean) = launch { + interactor.setScreenshotBlockEnabled(enabled) + } + fun requestReview(activity: Activity) { reviewService.requestReview(activity) } diff --git a/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/model/Features.kt b/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/model/Features.kt index bf1832d69..d883b8154 100644 --- a/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/model/Features.kt +++ b/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/model/Features.kt @@ -36,6 +36,9 @@ internal actual val isTileFeatureEnabled: Boolean internal actual val isAppIconFeatureEnabled: Boolean get() = true +internal actual val isScreenshotFeatureEnabled: Boolean + get() = true + internal actual val isGithubFeatureEnabled: Boolean get() = true diff --git a/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt b/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt index 08373d817..f28bd64f7 100644 --- a/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt +++ b/feature/settings-impl-kmp/src/androidMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt @@ -54,6 +54,7 @@ import org.michaelbel.movies.settings.model.isLanguageFeatureEnabled import org.michaelbel.movies.settings.model.isMovieListFeatureEnabled import org.michaelbel.movies.settings.model.isNotificationsFeatureEnabled import org.michaelbel.movies.settings.model.isReviewAppFeatureEnabled +import org.michaelbel.movies.settings.model.isScreenshotFeatureEnabled import org.michaelbel.movies.settings.model.isThemeFeatureEnabled import org.michaelbel.movies.settings.model.isTileFeatureEnabled import org.michaelbel.movies.settings.model.isUpdateAppFeatureEnabled @@ -81,6 +82,7 @@ fun SettingsRoute( val currentMovieList by viewModel.currentMovieList.collectAsStateWithLifecycle() val isBiometricFeatureAvailable by viewModel.isBiometricFeatureEnabled.collectAsStateWithLifecycle() val isBiometricEnabled by viewModel.isBiometricEnabled.collectAsStateWithLifecycle() + val isScreenshotBlockEnabled by viewModel.isScreenshotBlockEnabled.collectAsStateWithLifecycle() val appVersionData by viewModel.appVersionData.collectAsStateWithLifecycle() val context = LocalContext.current @@ -248,6 +250,11 @@ fun SettingsRoute( context.setIcon(icon) } ), + screenshotData = SettingsData.ChangedData( + isFeatureEnabled = isScreenshotFeatureEnabled, + isEnabled = isScreenshotBlockEnabled, + onChange = viewModel::setScreenshotBlockEnabled + ), githubData = SettingsData.RequestedData( isFeatureEnabled = isGithubFeatureEnabled, onRequest = { openUrl(resultContract, toolbarColor, MOVIES_GITHUB_URL) } diff --git a/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/Features.kt b/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/Features.kt index 5ec71fb6d..783147f94 100644 --- a/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/Features.kt +++ b/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/Features.kt @@ -11,6 +11,7 @@ internal expect val isBiometricFeatureEnabled: Boolean internal expect val isWidgetFeatureEnabled: Boolean internal expect val isTileFeatureEnabled: Boolean internal expect val isAppIconFeatureEnabled: Boolean +internal expect val isScreenshotFeatureEnabled: Boolean internal expect val isGithubFeatureEnabled: Boolean internal expect val isReviewAppFeatureEnabled: Boolean internal expect val isUpdateAppFeatureEnabled: Boolean diff --git a/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/SettingsData.kt b/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/SettingsData.kt index af2c1f955..bdd6158b2 100644 --- a/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/SettingsData.kt +++ b/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/model/SettingsData.kt @@ -21,6 +21,7 @@ data class SettingsData( val widgetData: RequestedData, val tileData: RequestedData, val appIconData: ListData, + val screenshotData: ChangedData, val githubData: RequestedData, val reviewAppData: RequestedData, val updateAppData: RequestedData, diff --git a/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/ui/SettingsScreenContent.kt b/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/ui/SettingsScreenContent.kt index 2fd18b826..4fc19b352 100644 --- a/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/ui/SettingsScreenContent.kt +++ b/feature/settings-impl-kmp/src/commonMain/kotlin/org/michaelbel/movies/settings/ui/SettingsScreenContent.kt @@ -400,6 +400,24 @@ internal fun SettingsScreenContent( } } } + if (settingsData.screenshotData.isFeatureEnabled) { + item { + HorizontalDivider( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp), + thickness = .1.dp, + color = MaterialTheme.colorScheme.onPrimaryContainer + ) + } + item { + SettingSwitchItem( + title = stringResource(MoviesStrings.settings_screenshots), + description = stringResource(MoviesStrings.settings_screenshots_description), + icon = MoviesIcons.Screenshot, + checked = settingsData.screenshotData.isEnabled, + onClick = { settingsData.screenshotData.onChange(!settingsData.screenshotData.isEnabled) } + ) + } + } if (settingsData.githubData.isFeatureEnabled) { item { HorizontalDivider( diff --git a/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/model/Features.kt b/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/model/Features.kt index bb963b767..fee423bb5 100644 --- a/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/model/Features.kt +++ b/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/model/Features.kt @@ -33,6 +33,9 @@ internal actual val isTileFeatureEnabled: Boolean internal actual val isAppIconFeatureEnabled: Boolean get() = false +internal actual val isScreenshotFeatureEnabled: Boolean + get() = false + internal actual val isGithubFeatureEnabled: Boolean get() = true diff --git a/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt b/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt index ef04eedcb..2e0ff838c 100644 --- a/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt +++ b/feature/settings-impl-kmp/src/desktopMain/kotlin/org/michaelbel/movies/settings/ui/SettingsRoute.kt @@ -25,6 +25,7 @@ import org.michaelbel.movies.settings.model.isLanguageFeatureEnabled import org.michaelbel.movies.settings.model.isMovieListFeatureEnabled import org.michaelbel.movies.settings.model.isNotificationsFeatureEnabled import org.michaelbel.movies.settings.model.isReviewAppFeatureEnabled +import org.michaelbel.movies.settings.model.isScreenshotFeatureEnabled import org.michaelbel.movies.settings.model.isThemeFeatureEnabled import org.michaelbel.movies.settings.model.isTileFeatureEnabled import org.michaelbel.movies.settings.model.isUpdateAppFeatureEnabled @@ -102,6 +103,11 @@ fun SettingsRoute( current = IconAlias.Red, onSelect = {} ), + screenshotData = SettingsData.ChangedData( + isFeatureEnabled = isScreenshotFeatureEnabled, + isEnabled = false, + onChange = {} + ), githubData = SettingsData.RequestedData( isFeatureEnabled = isGithubFeatureEnabled, onRequest = { openUrl(MOVIES_GITHUB_URL) } diff --git a/readme.md b/readme.md index fd448c11a..04128ca72 100644 --- a/readme.md +++ b/readme.md @@ -162,6 +162,7 @@ The app is still usable without an API key. In this case functionality will be l - [x] [ConstraintLayout Multiplatform](https://github.com/Lavmee/constraintlayout-compose-multiplatform) - [x] [PreCompose](https://github.com/Tlaster/PreCompose) - [x] [Koin](https://github.com/InsertKoinIO/koin) +- [x] [Screenshot Detection](https://d.android.com/about/versions/14/features/screenshot-detection) - [x] [ConstraintLayout](https://d.android.com/develop/ui/views/layout/constraint-layout) removed in [44723cb](https://github.com/michaelbel/movies/commit/44723cbbafdad89bef6043f99cbd0fbab1ecf19a) - [x] [Dagger Hilt](https://github.com/google/dagger) removed in [#274](https://github.com/michaelbel/movies/pull/274) - [x] [Retrofit](https://github.com/square/retrofit) removed in [#275](https://github.com/michaelbel/movies/pull/275) diff --git a/readme.ru.md b/readme.ru.md index afdbb05ac..5f392f3a6 100644 --- a/readme.ru.md +++ b/readme.ru.md @@ -162,6 +162,7 @@ TMDB_API_KEY=your_own_tmdb_api_key - [x] [ConstraintLayout Multiplatform](https://github.com/Lavmee/constraintlayout-compose-multiplatform) - [x] [PreCompose](https://github.com/Tlaster/PreCompose) - [x] [Koin](https://github.com/InsertKoinIO/koin) +- [x] [Screenshot Detection](https://d.android.com/about/versions/14/features/screenshot-detection) - [x] [ConstraintLayout](https://d.android.com/develop/ui/views/layout/constraint-layout) removed in [44723cb](https://github.com/michaelbel/movies/commit/44723cbbafdad89bef6043f99cbd0fbab1ecf19a) - [x] [Dagger Hilt](https://github.com/google/dagger) removed in [#274](https://github.com/michaelbel/movies/pull/274) - [x] [Retrofit](https://github.com/square/retrofit) removed in [#275](https://github.com/michaelbel/movies/pull/275)