diff --git a/app/src/main/java/eu/kanade/tachiyomi/annotations/Nsfw.kt b/app/src/main/java/eu/kanade/tachiyomi/annotations/Nsfw.kt index 964a42702..bc22dde13 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/annotations/Nsfw.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/annotations/Nsfw.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.annotations +// TODO: remove this when no longer used in extensions @Retention(AnnotationRetention.RUNTIME) @Target(AnnotationTarget.CLASS) annotation class Nsfw diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index 917d03449..78d5c069e 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -160,8 +160,6 @@ object PreferenceKeys { const val automaticExtUpdates = "automatic_ext_updates" const val showNsfwSource = "show_nsfw_source" - const val showNsfwExtension = "show_nsfw_extension" - const val labelNsfwExtension = "label_nsfw_extension" const val startScreen = "start_screen" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index ef5d9836d..e33b05897 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -279,8 +279,6 @@ class PreferencesHelper(val context: Context) { fun automaticExtUpdates() = flowPrefs.getBoolean(Keys.automaticExtUpdates, true) fun showNsfwSource() = flowPrefs.getBoolean(Keys.showNsfwSource, true) - fun showNsfwExtension() = flowPrefs.getBoolean(Keys.showNsfwExtension, true) - fun labelNsfwExtension() = prefs.getBoolean(Keys.labelNsfwExtension, true) fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt index c2ec94041..cea226994 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt @@ -6,7 +6,6 @@ import android.content.pm.PackageInfo import android.content.pm.PackageManager import androidx.core.content.pm.PackageInfoCompat import dalvik.system.PathClassLoader -import eu.kanade.tachiyomi.annotations.Nsfw import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.LoadResult @@ -154,13 +153,7 @@ internal object ExtensionLoader { try { when (val obj = Class.forName(it, false, classLoader).newInstance()) { is Source -> listOf(obj) - is SourceFactory -> { - if (isSourceNsfw(obj)) { - emptyList() - } else { - obj.createSources() - } - } + is SourceFactory -> obj.createSources() else -> throw Exception("Unknown source class type! ${obj.javaClass}") } } catch (e: Throwable) { @@ -168,7 +161,6 @@ internal object ExtensionLoader { return LoadResult.Error(e) } } - .filter { !isSourceNsfw(it) } val langs = sources.filterIsInstance() .map { it.lang } @@ -215,22 +207,4 @@ internal object ExtensionLoader { null } } - - /** - * Checks whether a Source or SourceFactory is annotated with @Nsfw. - */ - private fun isSourceNsfw(clazz: Any): Boolean { - if (loadNsfwSource) { - return false - } - - if (clazz !is Source && clazz !is SourceFactory) { - return false - } - - // Annotations are proxied, hence this janky way of checking for them - return clazz.javaClass.annotations - .flatMap { it.javaClass.interfaces.map { it.simpleName } } - .firstOrNull { it == Nsfw::class.java.simpleName } != null - } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt index cd280aa1a..1e11a46c9 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt @@ -43,7 +43,6 @@ import kotlin.reflect.KClass open class SourceManager(private val context: Context) { private val sourcesMap = mutableMapOf() - private val stubSourcesMap = mutableMapOf() // SY --> diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt index 1a3099fbf..d719ea2e9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt @@ -6,14 +6,12 @@ import coil.clear import coil.load import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.databinding.ExtensionCardItemBinding import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.util.system.LocaleHelper -import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : @@ -21,10 +19,6 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : private val binding = ExtensionCardItemBinding.bind(view) - private val shouldLabelNsfw by lazy { - Injekt.get().labelNsfwExtension() - } - init { binding.extButton.setOnClickListener { adapter.buttonClickListener.onButtonClick(bindingAdapterPosition) @@ -42,8 +36,7 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : extension is Extension.Installed && extension.isUnofficial -> itemView.context.getString(R.string.ext_unofficial) extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.ext_obsolete) // SY --> - extension is Extension.Installed && extension.isRedundant -> itemView.context.getString(R.string.ext_redundant) - extension.isNsfw && shouldLabelNsfw -> itemView.context.getString(R.string.ext_nsfw_short).plusRepo(extension) + extension.isNsfw -> itemView.context.getString(R.string.ext_nsfw_short).plusRepo(extension) else -> "".plusRepo(extension) // SY <-- }.uppercase() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionPresenter.kt index 368521b01..79d105048 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionPresenter.kt @@ -55,14 +55,14 @@ open class ExtensionPresenter( private fun toItems(tuple: ExtensionTuple): List { val context = Injekt.get() val activeLangs = preferences.enabledLanguages().get() - val showNsfwExtensions = preferences.showNsfwExtension().get() + val showNsfwSources = preferences.showNsfwSource().get() val (installed, untrusted, available) = tuple val items = mutableListOf() - val updatesSorted = installed.filter { it.hasUpdate && (showNsfwExtensions || !it.isNsfw) }.sortedBy { it.name } - val installedSorted = installed.filter { !it.hasUpdate && (showNsfwExtensions || !it.isNsfw) }.sortedWith(compareBy({ !it.isObsolete /* SY --> */ && !it.isRedundant /* SY <-- */ }, { it.name })) + val updatesSorted = installed.filter { it.hasUpdate && (showNsfwSources || !it.isNsfw) }.sortedBy { it.name } + val installedSorted = installed.filter { !it.hasUpdate && (showNsfwSources || !it.isNsfw) }.sortedWith(compareBy({ !it.isObsolete /* SY --> */ && !it.isRedundant /* SY <-- */ }, { it.name })) val untrustedSorted = untrusted.sortedBy { it.name } val availableSorted = available // Filter out already installed extensions and disabled languages @@ -70,7 +70,7 @@ open class ExtensionPresenter( installed.none { it.pkgName == avail.pkgName } && untrusted.none { it.pkgName == avail.pkgName } && (avail.lang in activeLangs || avail.lang == "all") && - (showNsfwExtensions || !avail.isNsfw) + (showNsfwSources || !avail.isNsfw) } .sortedBy { it.name } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt index 9c6f76ca3..2ba155763 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt @@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.ui.setting import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.preference.asImmediateFlow import eu.kanade.tachiyomi.extension.ExtensionUpdateJob import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.ui.category.repos.RepoController @@ -16,7 +15,6 @@ import eu.kanade.tachiyomi.util.preference.preferenceCategory import eu.kanade.tachiyomi.util.preference.summaryRes import eu.kanade.tachiyomi.util.preference.switchPreference import eu.kanade.tachiyomi.util.preference.titleRes -import kotlinx.coroutines.flow.launchIn import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys class SettingsBrowseController : SettingsController() { @@ -119,18 +117,6 @@ class SettingsBrowseController : SettingsController() { summaryRes = R.string.requires_app_restart defaultValue = true } - switchPreference { - key = Keys.showNsfwExtension - titleRes = R.string.pref_show_nsfw_extension - defaultValue = true - } - switchPreference { - key = Keys.labelNsfwExtension - titleRes = R.string.pref_label_nsfw_extension - defaultValue = true - - preferences.showNsfwExtension().asImmediateFlow { isVisible = it }.launchIn(viewScope) - } infoPreference(R.string.parental_controls_info) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6c47f3b31..aba974421 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -189,9 +189,7 @@ Hide notification content NSFW (18+) sources - Show in sources list - Show in extensions list - Label in extensions list + Show in sources and extensions lists This does not prevent unofficial or potentially incorrectly flagged extensions from surfacing NSFW (18+) content within the app. Recently