From 8f668cb5fba3a09bb6c100bbda2c856f81a536f2 Mon Sep 17 00:00:00 2001 From: greenart7c3 <115044884+greenart7c3@users.noreply.github.com> Date: Mon, 12 Jun 2023 07:38:32 -0300 Subject: [PATCH] separated spam and report filter options --- .../amethyst/LocalPreferences.kt | 12 ++++++---- .../amethyst/OptOutFromFilters.kt | 8 ++++--- .../vitorpamplona/amethyst/ServiceManager.kt | 2 +- .../vitorpamplona/amethyst/model/Account.kt | 17 ++++++++----- .../amethyst/model/AntiSpamFilter.kt | 2 +- .../ui/screen/loggedIn/HiddenUsersScreen.kt | 24 +++++++++++++++---- app/src/main/res/values/strings.xml | 3 ++- 7 files changed, 47 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt index 8c539ab7f..5e85af2d2 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt @@ -61,7 +61,8 @@ private object PrefKeys { const val USE_PROXY = "use_proxy" const val PROXY_PORT = "proxy_port" const val SHOW_SENSITIVE_CONTENT = "show_sensitive_content" - const val OPT_OUT_FILTERS = "opt_out_filters" + const val WARN_ABOUT_REPORTS = "warn_about_reports" + const val FILTER_SPAM_FROM_STRANGERS = "filter_spam_from_strangers" val LAST_READ: (String) -> String = { route -> "last_read_route_$route" } } @@ -218,7 +219,8 @@ object LocalPreferences { putBoolean(PrefKeys.HIDE_BLOCK_ALERT_DIALOG, account.hideBlockAlertDialog) putBoolean(PrefKeys.USE_PROXY, account.proxy != null) putInt(PrefKeys.PROXY_PORT, account.proxyPort) - putBoolean(PrefKeys.OPT_OUT_FILTERS, account.optOutFromFilters) + putBoolean(PrefKeys.WARN_ABOUT_REPORTS, account.warnAboutPostsWithReports) + putBoolean(PrefKeys.FILTER_SPAM_FROM_STRANGERS, account.filterSpamFromStrangers) if (account.showSensitiveContent == null) { remove(PrefKeys.SHOW_SENSITIVE_CONTENT) @@ -308,7 +310,8 @@ object LocalPreferences { } else { null } - val optOutFromFilters = getBoolean(PrefKeys.OPT_OUT_FILTERS, false) + val filterSpam = getBoolean(PrefKeys.FILTER_SPAM_FROM_STRANGERS, true) + val warnAboutReports = getBoolean(PrefKeys.WARN_ABOUT_REPORTS, true) val a = Account( Persona(privKey = privKey?.hexToByteArray(), pubKey = pubKey.hexToByteArray()), @@ -331,7 +334,8 @@ object LocalPreferences { proxy, proxyPort, showSensitiveContent, - optOutFromFilters + warnAboutReports, + filterSpam ) return a diff --git a/app/src/main/java/com/vitorpamplona/amethyst/OptOutFromFilters.kt b/app/src/main/java/com/vitorpamplona/amethyst/OptOutFromFilters.kt index 736be2916..1a2ffcb3f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/OptOutFromFilters.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/OptOutFromFilters.kt @@ -1,9 +1,11 @@ package com.vitorpamplona.amethyst object OptOutFromFilters { - var optOutFromFilters: Boolean = false + var warnAboutPostsWithReports: Boolean = true + var filterSpamFromStrangers: Boolean = true - fun start(optOut: Boolean) { - optOutFromFilters = optOut + fun start(warnAboutReports: Boolean, filterSpam: Boolean) { + warnAboutPostsWithReports = warnAboutReports + filterSpamFromStrangers = filterSpam } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt b/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt index a85741a2e..ecccd9ca9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt @@ -36,7 +36,7 @@ object ServiceManager { // Resets Proxy Use HttpClient.start(account) - OptOutFromFilters.start(account?.optOutFromFilters ?: false) + OptOutFromFilters.start(account?.warnAboutPostsWithReports ?: true, account?.filterSpamFromStrangers ?: true) Coil.setImageLoader { ImageLoader.Builder(context).components { if (Build.VERSION.SDK_INT >= 28) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 3205b8009..87a98cbb4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -68,7 +68,8 @@ class Account( var proxy: Proxy?, var proxyPort: Int, var showSensitiveContent: Boolean? = null, - var optOutFromFilters: Boolean = false + var warnAboutPostsWithReports: Boolean = true, + var filterSpamFromStrangers: Boolean = true ) { var transientHiddenUsers: Set = setOf() @@ -79,9 +80,13 @@ class Account( var userProfileCache: User? = null - fun updateOptOutFromFilters(value: Boolean) { - optOutFromFilters = value - OptOutFromFilters.start(optOutFromFilters) + fun updateOptOutOptions(warnReports: Boolean, filterSpam: Boolean) { + warnAboutPostsWithReports = warnReports + filterSpamFromStrangers = filterSpam + OptOutFromFilters.start(warnAboutPostsWithReports, filterSpamFromStrangers) + if (!filterSpamFromStrangers) { + transientHiddenUsers = setOf() + } live.invalidateData() saveable.invalidateData() } @@ -1066,7 +1071,7 @@ class Account( } fun isAcceptable(user: User): Boolean { - if (optOutFromFilters) { + if (!warnAboutPostsWithReports) { return !isHidden(user) && // if user hasn't hided this author user.reportsBy(userProfile()).isEmpty() // if user has not reported this post } @@ -1076,7 +1081,7 @@ class Account( } fun isAcceptableDirect(note: Note): Boolean { - if (optOutFromFilters) { + if (!warnAboutPostsWithReports) { return note.reportsBy(userProfile()).isEmpty() } return note.reportsBy(userProfile()).isEmpty() && // if user has not reported this post diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt index 4686bcfb5..cce464c9f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt @@ -21,7 +21,7 @@ class AntiSpamFilter { fun isSpam(event: Event, relay: Relay?): Boolean { checkNotInMainThread() - if (OptOutFromFilters.optOutFromFilters) return false + if (!OptOutFromFilters.filterSpamFromStrangers) return false val idHex = event.id diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt index 9a2d84954..bacd226d5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt @@ -74,19 +74,33 @@ fun HiddenUsersScreen( Column(modifier = Modifier.padding(start = 10.dp, end = 10.dp)) { val pagerState = rememberPagerState() val coroutineScope = rememberCoroutineScope() - var checked by remember { mutableStateOf(accountViewModel.account.optOutFromFilters) } + var warnAboutReports by remember { mutableStateOf(accountViewModel.account.warnAboutPostsWithReports) } + var filterSpam by remember { mutableStateOf(accountViewModel.account.filterSpamFromStrangers) } Row(verticalAlignment = Alignment.CenterVertically) { Checkbox( - checked = checked, + checked = warnAboutReports, onCheckedChange = { - checked = it - accountViewModel.account.updateOptOutFromFilters(checked) + warnAboutReports = it + accountViewModel.account.updateOptOutOptions(warnAboutReports, filterSpam) LocalPreferences.saveToEncryptedStorage(accountViewModel.account) } ) - Text(stringResource(R.string.opt_out_from_filters)) + Text(stringResource(R.string.warn_when_posts_have_reports_from_your_follows)) + } + + Row(verticalAlignment = Alignment.CenterVertically) { + Checkbox( + checked = filterSpam, + onCheckedChange = { + filterSpam = it + accountViewModel.account.updateOptOutOptions(warnAboutReports, filterSpam) + LocalPreferences.saveToEncryptedStorage(accountViewModel.account) + } + ) + + Text(stringResource(R.string.filter_spam_from_strangers)) } TabRow( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9aa32df18..c2deff8ad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -412,5 +412,6 @@ Always show content warnings Recommends: - Opt-out from automatic filters + Filter spam from strangers + Warn when posts have reports from your follows