From 54a914097db8c803e5f993867c539472d3328c67 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sun, 27 Feb 2022 20:28:55 +0200 Subject: [PATCH] Option to block screenshots in reader #114 --- .../org/koitharu/kotatsu/core/prefs/AppSettings.kt | 7 +++++++ .../koitharu/kotatsu/core/prefs/ScreenshotsPolicy.kt | 7 +++++++ .../org/koitharu/kotatsu/reader/ui/ReaderActivity.kt | 9 +++++++++ .../koitharu/kotatsu/reader/ui/ReaderViewModel.kt | 12 ++++++++++++ app/src/main/res/values-ru/strings.xml | 4 ++++ app/src/main/res/values/arrays.xml | 5 +++++ app/src/main/res/values/constants.xml | 5 +++++ app/src/main/res/values/strings.xml | 4 ++++ app/src/main/res/xml/pref_reader.xml | 9 +++++++++ 9 files changed, 62 insertions(+) create mode 100644 app/src/main/java/org/koitharu/kotatsu/core/prefs/ScreenshotsPolicy.kt diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt index 64a407dbc..29f565fc3 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -123,6 +123,12 @@ class AppSettings(context: Context) { val isPagesNumbersEnabled: Boolean get() = prefs.getBoolean(KEY_PAGES_NUMBERS, false) + val screenshotsPolicy: ScreenshotsPolicy + get() = runCatching { + val key = prefs.getString(KEY_SCREENSHOTS_POLICY, null)?.uppercase(Locale.ROOT) + if (key == null) ScreenshotsPolicy.ALLOW else ScreenshotsPolicy.valueOf(key) + }.getOrDefault(ScreenshotsPolicy.ALLOW) + var mangaStorageDir: File? get() = prefs.getString(KEY_LOCAL_STORAGE, null)?.let { File(it) @@ -224,6 +230,7 @@ class AppSettings(context: Context) { const val KEY_REVERSE_CHAPTERS = "reverse_chapters" const val KEY_HISTORY_EXCLUDE_NSFW = "history_exclude_nsfw" const val KEY_PAGES_NUMBERS = "pages_numbers" + const val KEY_SCREENSHOTS_POLICY = "screenshots_policy" // About const val KEY_APP_UPDATE = "app_update" diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/ScreenshotsPolicy.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/ScreenshotsPolicy.kt new file mode 100644 index 000000000..b92d71ec6 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/ScreenshotsPolicy.kt @@ -0,0 +1,7 @@ +package org.koitharu.kotatsu.core.prefs + +enum class ScreenshotsPolicy { + + // Do not rename this + ALLOW, BLOCK_NSFW, BLOCK_ALL; +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt index b96a46284..e4ee21e84 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt @@ -94,6 +94,7 @@ class ReaderActivity : BaseFullscreenActivity(), viewModel.content.observe(this) { onLoadingStateChanged(viewModel.isLoading.value == true) } + viewModel.isScreenshotsBlockEnabled.observe(this, this::setWindowSecure) } private fun onInitReader(mode: ReaderMode) { @@ -299,6 +300,14 @@ class ReaderActivity : BaseFullscreenActivity(), }.show() } + private fun setWindowSecure(isSecure: Boolean) { + if (isSecure) { + window.addFlags(WindowManager.LayoutParams.FLAG_SECURE) + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + } + } + private fun setUiIsVisible(isUiVisible: Boolean) { if (binding.appbarTop.isVisible != isUiVisible) { if (isUiVisible) { diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt index 201e10262..2e360594c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt @@ -20,6 +20,7 @@ import org.koitharu.kotatsu.core.os.ShortcutsRepository import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.ReaderMode +import org.koitharu.kotatsu.core.prefs.ScreenshotsPolicy import org.koitharu.kotatsu.history.domain.HistoryRepository import org.koitharu.kotatsu.reader.ui.pager.ReaderPage import org.koitharu.kotatsu.reader.ui.pager.ReaderUiState @@ -69,6 +70,17 @@ class ReaderViewModel( .onStart { emit(settings.readerAnimation) } .asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.IO) + val isScreenshotsBlockEnabled = combine( + mangaData, + settings.observe() + .filter { it == AppSettings.KEY_SCREENSHOTS_POLICY } + .onStart { emit("") } + .map { settings.screenshotsPolicy }, + ) { manga, policy -> + policy == ScreenshotsPolicy.BLOCK_ALL || + (policy == ScreenshotsPolicy.BLOCK_NSFW && manga != null && manga.isNsfw) + }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.IO) + val onZoomChanged = SingleLiveEvent() init { diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c15cb6480..095767dfa 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -249,4 +249,8 @@ Доступные источники Динамическая тема Применяет тему приложения, основанную на цветовой палитре обоев на устройстве + Разрешить скриншоты + Разрешить + Запретить для NSFW + Запретить всегда \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 9119e2901..bcfb4dddb 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -24,4 +24,9 @@ @string/detailed_list @string/grid + + @string/screenshots_allow + @string/screenshots_block_nsfw + @string/screenshots_block_all + \ No newline at end of file diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml index 42c7b0d1d..7e400c72e 100644 --- a/app/src/main/res/values/constants.xml +++ b/app/src/main/res/values/constants.xml @@ -20,4 +20,9 @@ favourites + + allow + block_nsfw + block_all + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d053d90d6..9cea043a2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -251,4 +251,8 @@ Dynamic theme Applies a theme created on the color scheme of your wallpaper Importing manga: %1$d of %2$d + Screenshots policy + Allow + Block on NSFW + Block always \ No newline at end of file diff --git a/app/src/main/res/xml/pref_reader.xml b/app/src/main/res/xml/pref_reader.xml index 18e6aae70..1d3db4527 100644 --- a/app/src/main/res/xml/pref_reader.xml +++ b/app/src/main/res/xml/pref_reader.xml @@ -38,4 +38,13 @@ android:title="@string/show_pages_numbers" app:iconSpaceReserved="false" /> + + \ No newline at end of file