Option to block screenshots in reader #114
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package org.koitharu.kotatsu.core.prefs
|
||||
|
||||
enum class ScreenshotsPolicy {
|
||||
|
||||
// Do not rename this
|
||||
ALLOW, BLOCK_NSFW, BLOCK_ALL;
|
||||
}
|
||||
@@ -94,6 +94,7 @@ class ReaderActivity : BaseFullscreenActivity<ActivityReaderBinding>(),
|
||||
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<ActivityReaderBinding>(),
|
||||
}.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) {
|
||||
|
||||
@@ -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<Unit>()
|
||||
|
||||
init {
|
||||
|
||||
@@ -249,4 +249,8 @@
|
||||
<string name="available_sources">Доступные источники</string>
|
||||
<string name="dynamic_theme">Динамическая тема</string>
|
||||
<string name="dynamic_theme_summary">Применяет тему приложения, основанную на цветовой палитре обоев на устройстве</string>
|
||||
<string name="screenshots_policy">Разрешить скриншоты</string>
|
||||
<string name="screenshots_allow">Разрешить</string>
|
||||
<string name="screenshots_block_nsfw">Запретить для NSFW</string>
|
||||
<string name="screenshots_block_all">Запретить всегда</string>
|
||||
</resources>
|
||||
@@ -24,4 +24,9 @@
|
||||
<item>@string/detailed_list</item>
|
||||
<item>@string/grid</item>
|
||||
</string-array>
|
||||
<string-array name="screenshots_policy">
|
||||
<item>@string/screenshots_allow</item>
|
||||
<item>@string/screenshots_block_nsfw</item>
|
||||
<item>@string/screenshots_block_all</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -20,4 +20,9 @@
|
||||
<string-array name="values_track_sources_default" translatable="false">
|
||||
<item>favourites</item>
|
||||
</string-array>
|
||||
<string-array name="values_screenshots_policy" translatable="false">
|
||||
<item>allow</item>
|
||||
<item>block_nsfw</item>
|
||||
<item>block_all</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
@@ -251,4 +251,8 @@
|
||||
<string name="dynamic_theme">Dynamic theme</string>
|
||||
<string name="dynamic_theme_summary">Applies a theme created on the color scheme of your wallpaper</string>
|
||||
<string name="importing_progress">Importing manga: %1$d of %2$d</string>
|
||||
<string name="screenshots_policy">Screenshots policy</string>
|
||||
<string name="screenshots_allow">Allow</string>
|
||||
<string name="screenshots_block_nsfw">Block on NSFW</string>
|
||||
<string name="screenshots_block_all">Block always</string>
|
||||
</resources>
|
||||
@@ -38,4 +38,13 @@
|
||||
android:title="@string/show_pages_numbers"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<ListPreference
|
||||
android:entries="@array/screenshots_policy"
|
||||
android:entryValues="@array/values_screenshots_policy"
|
||||
android:key="screenshots_policy"
|
||||
android:title="@string/screenshots_policy"
|
||||
app:defaultValue="allow"
|
||||
app:iconSpaceReserved="false"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
</PreferenceScreen>
|
||||
Reference in New Issue
Block a user