From 605ba441d35db620df5c149342ab26ff5fa382e3 Mon Sep 17 00:00:00 2001 From: Botiplz Date: Sat, 22 Jul 2023 16:58:15 +0200 Subject: [PATCH 1/5] Option "Show media posts with missing alt text" --- .../utils/StatusFilterPredicateTest.java | 35 ++++++++++-- .../android/GlobalUserPreferences.java | 4 +- .../android/fragments/SettingsFragment.java | 4 ++ .../fragments/settings/TimeLineFragment.java | 5 ++ .../android/model/AltTextFilter.java | 21 ++++++++ .../WarningFilteredStatusDisplayItem.java | 12 ++--- .../android/utils/StatusFilterPredicate.java | 53 ++++++++++++++----- .../ic_fluent_eye_tracking_on_24_regular.xml | 5 ++ .../src/main/res/values-de-rDE/strings_sk.xml | 1 + mastodon/src/main/res/values/strings_sk.xml | 1 + 10 files changed, 116 insertions(+), 25 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java create mode 100644 mastodon/src/main/res/drawable/ic_fluent_eye_tracking_on_24_regular.xml diff --git a/mastodon/src/androidTest/java/org/joinmastodon/android/utils/StatusFilterPredicateTest.java b/mastodon/src/androidTest/java/org/joinmastodon/android/utils/StatusFilterPredicateTest.java index 0a00fc665..4afd2d8cb 100644 --- a/mastodon/src/androidTest/java/org/joinmastodon/android/utils/StatusFilterPredicateTest.java +++ b/mastodon/src/androidTest/java/org/joinmastodon/android/utils/StatusFilterPredicateTest.java @@ -1,9 +1,16 @@ package org.joinmastodon.android.utils; -import static org.joinmastodon.android.model.Filter.FilterAction.*; -import static org.joinmastodon.android.model.Filter.FilterContext.*; -import static org.junit.Assert.*; +import static org.joinmastodon.android.model.Filter.FilterAction.HIDE; +import static org.joinmastodon.android.model.Filter.FilterAction.WARN; +import static org.joinmastodon.android.model.Filter.FilterContext.HOME; +import static org.joinmastodon.android.model.Filter.FilterContext.PUBLIC; +import static org.joinmastodon.android.model.Filter.FilterContext.THREAD; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import android.graphics.drawable.ColorDrawable; + +import org.joinmastodon.android.model.Attachment; import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Status; import org.junit.Test; @@ -19,7 +26,9 @@ public class StatusFilterPredicateTest { private static final Status hideInHomePublic = Status.ofFake(null, "hide me, please", Instant.now()), - warnInHomePublic = Status.ofFake(null, "display me with a warning", Instant.now()); + warnInHomePublic = Status.ofFake(null, "display me with a warning", Instant.now()), + noAltText = Status.ofFake(null, "display me with a warning", Instant.now()), + withAltText = Status.ofFake(null, "display me with a warning", Instant.now()); static { hideMeFilter.phrase = "hide me"; @@ -29,6 +38,12 @@ public class StatusFilterPredicateTest { warnMeFilter.phrase = "warning"; warnMeFilter.filterAction = WARN; warnMeFilter.context = EnumSet.of(PUBLIC, HOME); + + noAltText.mediaAttachments = Attachment.createFakeAttachments("fakeurl", new ColorDrawable()); + withAltText.mediaAttachments = Attachment.createFakeAttachments("fakeurl", new ColorDrawable()); + for (Attachment mediaAttachment : withAltText.mediaAttachments) { + mediaAttachment.description = "Alt Text"; + } } @Test @@ -78,4 +93,16 @@ public class StatusFilterPredicateTest { assertTrue("should pass because matching filter is for hiding", new StatusFilterPredicate(allFilters, HOME, WARN).test(hideInHomePublic)); } + + @Test + public void testAltTextFilterNoPass() { + assertFalse("should not pass because of no alt text", + new StatusFilterPredicate(allFilters, HOME).test(noAltText)); + } + + @Test + public void testAltTextFilterPass() { + assertTrue("should pass because of alt text", + new StatusFilterPredicate(allFilters, HOME).test(withAltText)); + } } \ No newline at end of file diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 129125038..d1d2af47a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -11,7 +11,6 @@ import com.google.gson.reflect.TypeToken; import org.joinmastodon.android.model.ContentType; import org.joinmastodon.android.model.TimelineDefinition; -import org.joinmastodon.android.ui.utils.ColorPalette; import java.lang.reflect.Type; import java.util.HashMap; @@ -43,6 +42,7 @@ public class GlobalUserPreferences{ public static boolean disableAltTextReminder; public static boolean showAltIndicator; public static boolean showNoAltIndicator; + public static boolean showPostsWithoutAlt; public static boolean enablePreReleases; public static PrefixRepliesMode prefixReplies; public static boolean bottomEncoding; @@ -129,6 +129,7 @@ public class GlobalUserPreferences{ disableAltTextReminder=prefs.getBoolean("disableAltTextReminder", false); showAltIndicator=prefs.getBoolean("showAltIndicator", true); showNoAltIndicator=prefs.getBoolean("showNoAltIndicator", true); + showPostsWithoutAlt =prefs.getBoolean("showPostsWithoutAlt", true); enablePreReleases=prefs.getBoolean("enablePreReleases", false); prefixReplies=PrefixRepliesMode.valueOf(prefs.getString("prefixReplies", PrefixRepliesMode.NEVER.name())); bottomEncoding=prefs.getBoolean("bottomEncoding", false); @@ -205,6 +206,7 @@ public class GlobalUserPreferences{ .putBoolean("disableAltTextReminder", disableAltTextReminder) .putBoolean("showAltIndicator", showAltIndicator) .putBoolean("showNoAltIndicator", showNoAltIndicator) + .putBoolean("showPostsWithoutAlt", showPostsWithoutAlt) .putBoolean("enablePreReleases", enablePreReleases) .putString("prefixReplies", prefixReplies.name()) .putBoolean("collapseLongPosts", collapseLongPosts) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java index 0c9a06829..3053f4bc8 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -296,6 +296,10 @@ public class SettingsFragment extends MastodonToolbarFragment implements Provide GlobalUserPreferences.showNoAltIndicator=i.checked; GlobalUserPreferences.save(); })); + items.add(new SwitchItem(R.string.sk_settings_show_posts_without_alt, R.drawable.ic_fluent_eye_tracking_on_24_regular, GlobalUserPreferences.showPostsWithoutAlt, i->{ + GlobalUserPreferences.showPostsWithoutAlt =i.checked; + GlobalUserPreferences.save(); + })); items.add(new SwitchItem(R.string.sk_settings_collapse_long_posts, R.drawable.ic_fluent_chevron_down_24_regular, GlobalUserPreferences.collapseLongPosts, i->{ GlobalUserPreferences.collapseLongPosts=i.checked; GlobalUserPreferences.save(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java index 9766a14e0..195f945dc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java @@ -64,6 +64,11 @@ public class TimeLineFragment extends SettingsBaseFragment{ GlobalUserPreferences.save(); needAppRestart=true; })); + items.add(new SwitchItem(R.string.sk_settings_show_posts_without_alt, R.drawable.ic_fluent_eye_tracking_on_24_regular, GlobalUserPreferences.showPostsWithoutAlt, i->{ + GlobalUserPreferences.showPostsWithoutAlt =i.checked; + GlobalUserPreferences.save(); + needAppRestart=true; + })); items.add(new SwitchItem(R.string.sk_settings_collapse_long_posts, R.drawable.ic_fluent_chevron_down_24_regular, GlobalUserPreferences.collapseLongPosts, i->{ GlobalUserPreferences.collapseLongPosts=i.checked; GlobalUserPreferences.save(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java b/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java new file mode 100644 index 000000000..83c725bf5 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java @@ -0,0 +1,21 @@ +package org.joinmastodon.android.model; + +import org.joinmastodon.android.GlobalUserPreferences; +import org.joinmastodon.android.R; +import org.jsoup.internal.StringUtil; + +import java.util.EnumSet; + +public class AltTextFilter extends Filter { + + public AltTextFilter(FilterAction filterAction, FilterContext firstContext, FilterContext... restContexts) { + this.filterAction = filterAction; + isRemote = false; + context = EnumSet.of(firstContext, restContexts); + } + + @Override + public boolean matches(Status status) { + return !GlobalUserPreferences.showPostsWithoutAlt && status.getContentStatus().mediaAttachments.stream().map(attachment -> attachment.description).anyMatch(StringUtil::isBlank); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java index db89aaf34..c33e8b871 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java @@ -4,18 +4,14 @@ import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import android.widget.ProgressBar; import android.widget.TextView; -import androidx.recyclerview.widget.RecyclerView; - import org.joinmastodon.android.R; import org.joinmastodon.android.fragments.BaseStatusListFragment; +import org.joinmastodon.android.model.AltTextFilter; import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Status; -import org.joinmastodon.android.ui.drawables.SawtoothTearDrawable; -import java.util.ArrayList; import java.util.List; // Mind the gap! @@ -55,7 +51,11 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onBind(WarningFilteredStatusDisplayItem item) { filteredItems = item.filteredItems; - text.setText(item.parentFragment.getString(R.string.sk_filtered, item.applyingFilter.title)); + if(item.applyingFilter instanceof AltTextFilter){ + text.setText(item.parentFragment.getString(R.string.sk_filtered,item.parentFragment.getString(R.string.sk_no_alt_text))); + }else{ + text.setText(item.parentFragment.getString(R.string.sk_filtered, item.applyingFilter.title)); + } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java index 0c96bb9c0..58c1aa5bb 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java @@ -1,6 +1,15 @@ package org.joinmastodon.android.utils; +import static org.joinmastodon.android.model.Filter.FilterAction.HIDE; +import static org.joinmastodon.android.model.Filter.FilterAction.WARN; +import static org.joinmastodon.android.model.Filter.FilterContext.ACCOUNT; +import static org.joinmastodon.android.model.Filter.FilterContext.HOME; +import static org.joinmastodon.android.model.Filter.FilterContext.NOTIFICATIONS; +import static org.joinmastodon.android.model.Filter.FilterContext.PUBLIC; +import static org.joinmastodon.android.model.Filter.FilterContext.THREAD; + import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.model.AltTextFilter; import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Status; @@ -11,7 +20,11 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; -public class StatusFilterPredicate implements Predicate{ +public class StatusFilterPredicate implements Predicate { + + //Hide in timelines and warn in threads + private final List clientFilters = List.of( new AltTextFilter(HIDE, HOME, PUBLIC, ACCOUNT), + new AltTextFilter(WARN, THREAD, NOTIFICATIONS)); private final List filters; private final Filter.FilterContext context; private final Filter.FilterAction action; @@ -19,26 +32,26 @@ public class StatusFilterPredicate implements Predicate{ /** * @param context null makes the predicate pass automatically - * @param action defines what the predicate should check: - * status should not be hidden or should not display with warning + * @param action defines what the predicate should check: + * status should not be hidden or should not display with warning */ - public StatusFilterPredicate(List filters, Filter.FilterContext context, Filter.FilterAction action){ + public StatusFilterPredicate(List filters, Filter.FilterContext context, Filter.FilterAction action) { this.filters = filters; this.context = context; this.action = action; } - public StatusFilterPredicate(List filters, Filter.FilterContext context){ - this(filters, context, Filter.FilterAction.HIDE); + public StatusFilterPredicate(List filters, Filter.FilterContext context) { + this(filters, context, HIDE); } /** * @param context null makes the predicate pass automatically - * @param action defines what the predicate should check: - * status should not be hidden or should not display with warning + * @param action defines what the predicate should check: + * status should not be hidden or should not display with warning */ - public StatusFilterPredicate(String accountID, Filter.FilterContext context, Filter.FilterAction action){ - filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(context)).collect(Collectors.toList()); + public StatusFilterPredicate(String accountID, Filter.FilterContext context, Filter.FilterAction action) { + filters = AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f -> f.context.contains(context)).collect(Collectors.toList()); this.context = context; this.action = action; } @@ -46,8 +59,8 @@ public class StatusFilterPredicate implements Predicate{ /** * @param context null makes the predicate pass automatically */ - public StatusFilterPredicate(String accountID, Filter.FilterContext context){ - this(accountID, context, Filter.FilterAction.HIDE); + public StatusFilterPredicate(String accountID, Filter.FilterContext context) { + this(accountID, context, HIDE); } /** @@ -57,7 +70,7 @@ public class StatusFilterPredicate implements Predicate{ * false = filter this status */ @Override - public boolean test(Status status){ + public boolean test(Status status) { if (context == null) return true; Stream matchingFilters = status.filtered != null @@ -72,9 +85,21 @@ public class StatusFilterPredicate implements Predicate{ // only apply filters for given context .filter(filter -> filter.context.contains(context)) // treating filterAction = null (from filters list) as FilterAction.HIDE - .filter(filter -> filter.filterAction == null ? action == Filter.FilterAction.HIDE : filter.filterAction == action) + .filter(filter -> filter.filterAction == null ? action == HIDE : filter.filterAction == action) .findAny(); + //Apply client filters if no server filter is triggered + if (applyingFilter.isEmpty()) { + applyingFilter = clientFilters.stream() + // only apply filters for given context + .filter(filter -> filter.context.contains(context)) + // treating filterAction = null (from filters list) as FilterAction.HIDE + .filter(filter -> filter.filterAction == null ? action == HIDE : filter.filterAction == action) + //client filter has to match the status + .filter(filter -> filter.matches(status)) + .findAny(); + } + this.applyingFilter = applyingFilter.orElse(null); return applyingFilter.isEmpty(); } diff --git a/mastodon/src/main/res/drawable/ic_fluent_eye_tracking_on_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_eye_tracking_on_24_regular.xml new file mode 100644 index 000000000..46f2eebbc --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_eye_tracking_on_24_regular.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/values-de-rDE/strings_sk.xml b/mastodon/src/main/res/values-de-rDE/strings_sk.xml index 8d3b14411..23b676d63 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_sk.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_sk.xml @@ -231,6 +231,7 @@ Keine Bildbeschreibung Indikator für Bildbeschreibungen Indikator für fehlende Bildbeschreibungen + Zeige Medienbeiträge ohne Bildbeschreibung Vorab-Versionen einschalten Wird gesucht… Änderungen speichern oder Entwurf jetzt veröffentlichen\? diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 88a6da871..562325f5b 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -259,6 +259,7 @@ No alt text available Indicator for alt texts Indicator for missing alt texts + Show media posts with missing alt text Enable pre-releases “Show new posts” button local-only From 6ed7d24513ad154a3321b382059973920f957e67 Mon Sep 17 00:00:00 2001 From: Botiplz Date: Sat, 22 Jul 2023 19:41:01 +0200 Subject: [PATCH 2/5] PR comments: - StatusFilterPredicate sets clientFilters bases on settings - Reverted changes on SettingsFragment - Resources in strings_mo.xml - removed duplicate comments - conditional in onBind method --- .../android/fragments/SettingsFragment.java | 4 ---- .../fragments/settings/TimeLineFragment.java | 2 +- .../android/model/AltTextFilter.java | 2 +- .../WarningFilteredStatusDisplayItem.java | 7 ++----- .../android/utils/StatusFilterPredicate.java | 21 +++++++++---------- .../src/main/res/values-de-rDE/strings_mo.xml | 3 +++ .../src/main/res/values-de-rDE/strings_sk.xml | 1 - mastodon/src/main/res/values/strings_mo.xml | 3 +++ mastodon/src/main/res/values/strings_sk.xml | 1 - 9 files changed, 20 insertions(+), 24 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java index 3053f4bc8..0c9a06829 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -296,10 +296,6 @@ public class SettingsFragment extends MastodonToolbarFragment implements Provide GlobalUserPreferences.showNoAltIndicator=i.checked; GlobalUserPreferences.save(); })); - items.add(new SwitchItem(R.string.sk_settings_show_posts_without_alt, R.drawable.ic_fluent_eye_tracking_on_24_regular, GlobalUserPreferences.showPostsWithoutAlt, i->{ - GlobalUserPreferences.showPostsWithoutAlt =i.checked; - GlobalUserPreferences.save(); - })); items.add(new SwitchItem(R.string.sk_settings_collapse_long_posts, R.drawable.ic_fluent_chevron_down_24_regular, GlobalUserPreferences.collapseLongPosts, i->{ GlobalUserPreferences.collapseLongPosts=i.checked; GlobalUserPreferences.save(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java index 195f945dc..53d59567b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/TimeLineFragment.java @@ -64,7 +64,7 @@ public class TimeLineFragment extends SettingsBaseFragment{ GlobalUserPreferences.save(); needAppRestart=true; })); - items.add(new SwitchItem(R.string.sk_settings_show_posts_without_alt, R.drawable.ic_fluent_eye_tracking_on_24_regular, GlobalUserPreferences.showPostsWithoutAlt, i->{ + items.add(new SwitchItem(R.string.mo_settings_show_posts_without_alt, R.string.mo_settings_show_posts_without_alt_summary, R.drawable.ic_fluent_eye_tracking_on_24_regular, GlobalUserPreferences.showPostsWithoutAlt, i->{ GlobalUserPreferences.showPostsWithoutAlt =i.checked; GlobalUserPreferences.save(); needAppRestart=true; diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java b/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java index 83c725bf5..2353fee96 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java @@ -16,6 +16,6 @@ public class AltTextFilter extends Filter { @Override public boolean matches(Status status) { - return !GlobalUserPreferences.showPostsWithoutAlt && status.getContentStatus().mediaAttachments.stream().map(attachment -> attachment.description).anyMatch(StringUtil::isBlank); + return status.getContentStatus().mediaAttachments.stream().map(attachment -> attachment.description).anyMatch(StringUtil::isBlank); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java index c33e8b871..70aaa7752 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java @@ -51,11 +51,8 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onBind(WarningFilteredStatusDisplayItem item) { filteredItems = item.filteredItems; - if(item.applyingFilter instanceof AltTextFilter){ - text.setText(item.parentFragment.getString(R.string.sk_filtered,item.parentFragment.getString(R.string.sk_no_alt_text))); - }else{ - text.setText(item.parentFragment.getString(R.string.sk_filtered, item.applyingFilter.title)); - } + String title = item.applyingFilter instanceof AltTextFilter ? item.parentFragment.getString(R.string.sk_no_alt_text) : item.applyingFilter.title; + text.setText(item.parentFragment.getString(R.string.sk_filtered, title)); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java index 58c1aa5bb..4593ea1e1 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java @@ -8,6 +8,7 @@ import static org.joinmastodon.android.model.Filter.FilterContext.NOTIFICATIONS; import static org.joinmastodon.android.model.Filter.FilterContext.PUBLIC; import static org.joinmastodon.android.model.Filter.FilterContext.THREAD; +import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.model.AltTextFilter; import org.joinmastodon.android.model.Filter; @@ -23,8 +24,7 @@ import java.util.stream.Stream; public class StatusFilterPredicate implements Predicate { //Hide in timelines and warn in threads - private final List clientFilters = List.of( new AltTextFilter(HIDE, HOME, PUBLIC, ACCOUNT), - new AltTextFilter(WARN, THREAD, NOTIFICATIONS)); + private final List clientFilters; private final List filters; private final Filter.FilterContext context; private final Filter.FilterAction action; @@ -39,6 +39,8 @@ public class StatusFilterPredicate implements Predicate { this.filters = filters; this.context = context; this.action = action; + this.clientFilters = GlobalUserPreferences.showPostsWithoutAlt ? List.of() + : List.of(new AltTextFilter(HIDE, HOME, PUBLIC, ACCOUNT), new AltTextFilter(WARN, THREAD, NOTIFICATIONS)); } public StatusFilterPredicate(List filters, Filter.FilterContext context) { @@ -51,9 +53,9 @@ public class StatusFilterPredicate implements Predicate { * status should not be hidden or should not display with warning */ public StatusFilterPredicate(String accountID, Filter.FilterContext context, Filter.FilterAction action) { - filters = AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f -> f.context.contains(context)).collect(Collectors.toList()); - this.context = context; - this.action = action; + this(AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f -> f.context.contains(context)).collect(Collectors.toList()), + context, + action); } /** @@ -65,9 +67,9 @@ public class StatusFilterPredicate implements Predicate { /** * @return whether the status should be displayed without being hidden/warned about. - * will always return true if the context is null. - * true = display this status, - * false = filter this status + * will always return true if the context is null. + * true = display this status, + * false = filter this status */ @Override public boolean test(Status status) { @@ -91,11 +93,8 @@ public class StatusFilterPredicate implements Predicate { //Apply client filters if no server filter is triggered if (applyingFilter.isEmpty()) { applyingFilter = clientFilters.stream() - // only apply filters for given context .filter(filter -> filter.context.contains(context)) - // treating filterAction = null (from filters list) as FilterAction.HIDE .filter(filter -> filter.filterAction == null ? action == HIDE : filter.filterAction == action) - //client filter has to match the status .filter(filter -> filter.matches(status)) .findAny(); } diff --git a/mastodon/src/main/res/values-de-rDE/strings_mo.xml b/mastodon/src/main/res/values-de-rDE/strings_mo.xml index 123786629..a0d598e00 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_mo.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_mo.xml @@ -75,4 +75,7 @@ App-Symbol für alle Benachrichtigungen verwenden Animationen für Interaktionen deaktivieren GIFs in Profilbildern und Emojis automatisch abspielen + Zeige Medienbeiträge ohne Bildbeschreibung + Beiräge werden in allen Timelines ausgeblendet, können aber in Threads und Benachrichtungen ausgeklappt werden + \ No newline at end of file diff --git a/mastodon/src/main/res/values-de-rDE/strings_sk.xml b/mastodon/src/main/res/values-de-rDE/strings_sk.xml index 23b676d63..8d3b14411 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_sk.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_sk.xml @@ -231,7 +231,6 @@ Keine Bildbeschreibung Indikator für Bildbeschreibungen Indikator für fehlende Bildbeschreibungen - Zeige Medienbeiträge ohne Bildbeschreibung Vorab-Versionen einschalten Wird gesucht… Änderungen speichern oder Entwurf jetzt veröffentlichen\? diff --git a/mastodon/src/main/res/values/strings_mo.xml b/mastodon/src/main/res/values/strings_mo.xml index ff938fdf3..a7555d7db 100644 --- a/mastodon/src/main/res/values/strings_mo.xml +++ b/mastodon/src/main/res/values/strings_mo.xml @@ -87,7 +87,10 @@ Swipe to change viewed timeline Vibrate when interacting with posts Bookmark or reblog posts from the notification + Posts will be hidden in all timelines, but can be revealed in threads and notifications Notification Audience + Show media posts with missing alt text + \ No newline at end of file diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 562325f5b..88a6da871 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -259,7 +259,6 @@ No alt text available Indicator for alt texts Indicator for missing alt texts - Show media posts with missing alt text Enable pre-releases “Show new posts” button local-only From ae5d2a7ed3b38d1c326e2115509ef2125bab749e Mon Sep 17 00:00:00 2001 From: Botiplz Date: Sat, 22 Jul 2023 19:50:58 +0200 Subject: [PATCH 3/5] Formatting --- .../android/utils/StatusFilterPredicate.java | 14 +++++++------- mastodon/src/main/res/values-de-rDE/strings_mo.xml | 1 - mastodon/src/main/res/values/strings_mo.xml | 1 - 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java index 4593ea1e1..cd851afeb 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java @@ -32,8 +32,8 @@ public class StatusFilterPredicate implements Predicate { /** * @param context null makes the predicate pass automatically - * @param action defines what the predicate should check: - * status should not be hidden or should not display with warning + * @param action defines what the predicate should check: + * status should not be hidden or should not display with warning */ public StatusFilterPredicate(List filters, Filter.FilterContext context, Filter.FilterAction action) { this.filters = filters; @@ -49,8 +49,8 @@ public class StatusFilterPredicate implements Predicate { /** * @param context null makes the predicate pass automatically - * @param action defines what the predicate should check: - * status should not be hidden or should not display with warning + * @param action defines what the predicate should check: + * status should not be hidden or should not display with warning */ public StatusFilterPredicate(String accountID, Filter.FilterContext context, Filter.FilterAction action) { this(AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f -> f.context.contains(context)).collect(Collectors.toList()), @@ -67,9 +67,9 @@ public class StatusFilterPredicate implements Predicate { /** * @return whether the status should be displayed without being hidden/warned about. - * will always return true if the context is null. - * true = display this status, - * false = filter this status + * will always return true if the context is null. + * true = display this status, + * false = filter this status */ @Override public boolean test(Status status) { diff --git a/mastodon/src/main/res/values-de-rDE/strings_mo.xml b/mastodon/src/main/res/values-de-rDE/strings_mo.xml index a0d598e00..9256c2129 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_mo.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_mo.xml @@ -77,5 +77,4 @@ GIFs in Profilbildern und Emojis automatisch abspielen Zeige Medienbeiträge ohne Bildbeschreibung Beiräge werden in allen Timelines ausgeblendet, können aber in Threads und Benachrichtungen ausgeklappt werden - \ No newline at end of file diff --git a/mastodon/src/main/res/values/strings_mo.xml b/mastodon/src/main/res/values/strings_mo.xml index a7555d7db..460f4d0c8 100644 --- a/mastodon/src/main/res/values/strings_mo.xml +++ b/mastodon/src/main/res/values/strings_mo.xml @@ -88,7 +88,6 @@ Vibrate when interacting with posts Bookmark or reblog posts from the notification Posts will be hidden in all timelines, but can be revealed in threads and notifications - Notification Audience Show media posts with missing alt text From 94ab5835d87b938f13a993240c68a6da5bbfc1e7 Mon Sep 17 00:00:00 2001 From: Botiplz Date: Sat, 22 Jul 2023 19:51:54 +0200 Subject: [PATCH 4/5] Formatting strings_mo.xml --- mastodon/src/main/res/values/strings_mo.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values/strings_mo.xml b/mastodon/src/main/res/values/strings_mo.xml index 460f4d0c8..d17ecf2a1 100644 --- a/mastodon/src/main/res/values/strings_mo.xml +++ b/mastodon/src/main/res/values/strings_mo.xml @@ -88,8 +88,8 @@ Vibrate when interacting with posts Bookmark or reblog posts from the notification Posts will be hidden in all timelines, but can be revealed in threads and notifications + Notification Audience Show media posts with missing alt text - \ No newline at end of file From 009dc226d5040c3dfc3f55aa3692f8e9bc6a5913 Mon Sep 17 00:00:00 2001 From: Botiplz Date: Sat, 22 Jul 2023 22:16:17 +0200 Subject: [PATCH 5/5] Update mastodon/src/main/res/values-de-rDE/strings_mo.xml Co-authored-by: FineFindus <63370021+FineFindus@users.noreply.github.com> --- mastodon/src/main/res/values-de-rDE/strings_mo.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-de-rDE/strings_mo.xml b/mastodon/src/main/res/values-de-rDE/strings_mo.xml index 9256c2129..589b82b2f 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_mo.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_mo.xml @@ -76,5 +76,5 @@ Animationen für Interaktionen deaktivieren GIFs in Profilbildern und Emojis automatisch abspielen Zeige Medienbeiträge ohne Bildbeschreibung - Beiräge werden in allen Timelines ausgeblendet, können aber in Threads und Benachrichtungen ausgeklappt werden + Beiträge werden in allen Timelines ausgeblendet, können aber in Threads und Benachrichtungen angezeigt werden \ No newline at end of file