From ff39f9b3c24a870b05d7da101a3b52f16b146f5e Mon Sep 17 00:00:00 2001 From: sanao Date: Mon, 13 Nov 2023 18:04:39 +0900 Subject: [PATCH] feat: Hide self-boosts (#3534) (#4101) # Overview Some Mastodon posters have a annoying habit of boosting their own posts some time after they've posted them. No need to see the same toot over and over again. # Changes made - Add an additional option to the "Filters > Tabs" preference to show these self-boosts (default: on) - If "Show boosts" is turned off, self-boosts are automatically hidden. # Screenshot ***screen of "Filters > Tabs" preference*** before | after :--: | :--: | | ***screen of Home Timeline*** ***switch-on(self-boosts are displayed)*** | ***swith-off(self-boosts are not displayed)*** :--: | :--: | | # Related issue Fixes #3534 --- .../preference/TabFilterPreferencesFragment.kt | 8 ++++++++ .../timeline/viewmodel/TimelineViewModel.kt | 14 +++++++++++++- .../tusky/settings/SettingsConstants.kt | 1 + app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt index 375922b3c..15697f644 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt @@ -42,6 +42,14 @@ class TabFilterPreferencesFragment : PreferenceFragmentCompat() { setDefaultValue(true) isIconSpaceReserved = false } + + switchPreference { + setTitle(R.string.pref_title_show_self_boosts) + setSummary(R.string.pref_title_show_self_boosts_description) + key = PrefKeys.TAB_SHOW_HOME_SELF_BOOSTS + setDefaultValue(true) + isIconSpaceReserved = false + }.apply { dependency = PrefKeys.TAB_FILTER_HOME_BOOSTS } } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/TimelineViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/TimelineViewModel.kt index 88c5f1df7..953c3cfd5 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/TimelineViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/TimelineViewModel.kt @@ -73,6 +73,7 @@ abstract class TimelineViewModel( private var alwaysOpenSpoilers = false private var filterRemoveReplies = false private var filterRemoveReblogs = false + private var filterRemoveSelfReblogs = false protected var readingOrder: ReadingOrder = ReadingOrder.OLDEST_FIRST fun init( @@ -91,6 +92,8 @@ abstract class TimelineViewModel( !sharedPreferences.getBoolean(PrefKeys.TAB_FILTER_HOME_REPLIES, true) filterRemoveReblogs = !sharedPreferences.getBoolean(PrefKeys.TAB_FILTER_HOME_BOOSTS, true) + filterRemoveSelfReblogs = + !sharedPreferences.getBoolean(PrefKeys.TAB_SHOW_HOME_SELF_BOOSTS, true) } readingOrder = ReadingOrder.from(sharedPreferences.getString(PrefKeys.READING_ORDER, null)) @@ -185,7 +188,8 @@ abstract class TimelineViewModel( val status = statusViewData.asStatusOrNull()?.status ?: return Filter.Action.NONE return if ( (status.inReplyToId != null && filterRemoveReplies) || - (status.reblog != null && filterRemoveReblogs) + (status.reblog != null && filterRemoveReblogs) || + ((status.account.id == status.reblog?.account?.id) && filterRemoveSelfReblogs) ) { return Filter.Action.HIDE } else { @@ -212,6 +216,14 @@ abstract class TimelineViewModel( fullReload() } } + PrefKeys.TAB_SHOW_HOME_SELF_BOOSTS -> { + val filter = sharedPreferences.getBoolean(PrefKeys.TAB_SHOW_HOME_SELF_BOOSTS, true) + val oldRemoveSelfReblogs = filterRemoveSelfReblogs + filterRemoveSelfReblogs = kind == Kind.HOME && !filter + if (oldRemoveSelfReblogs != filterRemoveSelfReblogs) { + fullReload() + } + } FilterV1.HOME, FilterV1.NOTIFICATIONS, FilterV1.THREAD, FilterV1.PUBLIC, FilterV1.ACCOUNT -> { if (filterContextMatchesKind(kind, listOf(key))) { reloadFilters() diff --git a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt index 8530fde26..64a5461da 100644 --- a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt +++ b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt @@ -106,6 +106,7 @@ object PrefKeys { const val TAB_FILTER_HOME_REPLIES = "tabFilterHomeReplies_v2" // This was changed once to reset an unintentionally set default. const val TAB_FILTER_HOME_BOOSTS = "tabFilterHomeBoosts" + const val TAB_SHOW_HOME_SELF_BOOSTS = "tabShowHomeSelfBoosts" /** UI text scaling factor, stored as float, 100 = 100% = no scaling */ const val UI_TEXT_SCALE_RATIO = "uiTextScaleRatio" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a6d2541f6..d206e7b3f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -138,6 +138,8 @@ Share username of account Hide boosts Show boosts + Show self-boosts + Someone boosting their own post Report Edit Delete