diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java index 4fc22aedd..d01a49bd2 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java @@ -593,5 +593,9 @@ public class ParcelableStatus implements Parcelable, Comparable(KEY_PROFILE_IMAGE_STYLE, ProfileImageView.SHAPE_CIRCLE) { override fun read(preferences: SharedPreferences): Int { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt index 54e56be6c..13bf991c3 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt @@ -61,13 +61,19 @@ object ParcelableStatusUtils { result.extras.retweeted_external_url = retweetedStatus.inferExternalUrl() if (retweetUser.isBlocking) { - result.filter_flags = result.filter_flags or FilterFlags.BLOCKING_USER + result.addFilterFlag(FilterFlags.BLOCKING_USER) } if (retweetUser.isBlockedBy) { - result.filter_flags = result.filter_flags or FilterFlags.BLOCKED_BY_USER + result.addFilterFlag(FilterFlags.BLOCKED_BY_USER) + } + if (retweetedStatus.isPossiblySensitive) { + result.addFilterFlag(FilterFlags.POSSIBILITY_SENSITIVE) } } else { status = orig + if (status.isPossiblySensitive) { + result.addFilterFlag(FilterFlags.POSSIBILITY_SENSITIVE) + } } val quoted = status.quotedStatus @@ -104,8 +110,12 @@ object ParcelableStatusUtils { result.quoted_user_profile_image = TwitterContentUtils.getProfileImageUrl(quotedUser) result.quoted_user_is_protected = quotedUser.isProtected result.quoted_user_is_verified = quotedUser.isVerified + + if (quoted.isPossiblySensitive) { + result.addFilterFlag(FilterFlags.POSSIBILITY_SENSITIVE) + } } else if (status.isQuoteStatus) { - result.filter_flags = result.filter_flags or FilterFlags.QUOTE_NOT_AVAILABLE + result.addFilterFlag(FilterFlags.QUOTE_NOT_AVAILABLE) } result.reply_count = status.replyCount @@ -165,6 +175,10 @@ object ParcelableStatusUtils { return result } + private fun ParcelableStatus.addFilterFlag(@FilterFlags flags: Long) { + filter_flags = filter_flags or flags + } + private fun getSpanItems(html: CharSequence): Array? { if (html !is Spanned) return null val spans = html.getSpans(0, html.length, URLSpan::class.java) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt index 12ba1328e..131e85984 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt @@ -3,6 +3,7 @@ package org.mariotaku.twidere.util import android.content.SharedPreferences import org.mariotaku.kpreferences.get import org.mariotaku.sqliteqb.library.* +import org.mariotaku.twidere.constant.filterPossibilitySensitiveStatusesKey import org.mariotaku.twidere.constant.filterUnavailableQuoteStatusesKey import org.mariotaku.twidere.model.ParcelableStatus.FilterFlags import org.mariotaku.twidere.provider.TwidereDataStore.Filters @@ -59,6 +60,9 @@ fun buildStatusFilterWhereClause(preferences: SharedPreferences, if (preferences[filterUnavailableQuoteStatusesKey]) { filterFlags = filterFlags or FilterFlags.QUOTE_NOT_AVAILABLE } + if (preferences[filterPossibilitySensitiveStatusesKey]) { + filterFlags = filterFlags or FilterFlags.POSSIBILITY_SENSITIVE + } val filterExpression = Expression.or( Expression.and( diff --git a/twidere/src/main/res/values/strings.xml b/twidere/src/main/res/values/strings.xml index bee662ac6..0bf826093 100644 --- a/twidere/src/main/res/values/strings.xml +++ b/twidere/src/main/res/values/strings.xml @@ -868,4 +868,5 @@ Invert selection No user selected Advanced + Filter sensitive tweets \ No newline at end of file diff --git a/twidere/src/main/res/xml/preferences_filters.xml b/twidere/src/main/res/xml/preferences_filters.xml index 43c730376..d985e56ef 100644 --- a/twidere/src/main/res/xml/preferences_filters.xml +++ b/twidere/src/main/res/xml/preferences_filters.xml @@ -4,4 +4,8 @@ android:defaultValue="false" android:key="filter_unavailable_quote_statuses" android:title="@string/preference_filter_unavailable_quote_statuses"/> + \ No newline at end of file