From a796d5416654f1001f7b866b8780098c0de3d27a Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 27 Nov 2022 16:47:28 +0100 Subject: [PATCH] Live remove when muting tags --- .../java/app/fedilab/android/helper/Helper.java | 1 + .../fedilab/android/helper/SpannableHelper.java | 15 ++++++++++----- .../fedilab/android/ui/drawer/StatusAdapter.java | 4 ++++ .../timeline/FragmentMastodonTimeline.java | 3 +++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index fd2ba59a..57e1ce80 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -218,6 +218,7 @@ public class Helper { public static final String ARG_NOTIFICATION_TYPE = "ARG_NOTIFICATION_TYPE"; public static final String ARG_EXCLUDED_NOTIFICATION_TYPE = "ARG_EXCLUDED_NOTIFICATION_TYPE"; public static final String ARG_STATUS = "ARG_STATUS"; + public static final String ARG_TIMELINE_REFRESH_ALL = "ARG_TIMELINE_REFRESH_ALL"; public static final String ARG_STATUS_DELETED = "ARG_STATUS_DELETED"; public static final String ARG_STATUS_UPDATED = "ARG_STATUS_UPDATED"; diff --git a/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java b/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java index 68dd7653..46df2e4e 100644 --- a/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java @@ -17,6 +17,7 @@ package app.fedilab.android.helper; import static app.fedilab.android.BaseMainActivity.currentAccount; import static app.fedilab.android.helper.ThemeHelper.linkColor; +import static app.fedilab.android.ui.drawer.StatusAdapter.sendAction; import android.content.ClipData; import android.content.ClipboardManager; @@ -148,7 +149,7 @@ public class SpannableHelper { content.removeSpan(span); } //Make tags, mentions, groups - interaction(context, content, mentionList); + interaction(context, content, status, mentionList); //Make all links linkify(context, content, urlDetails); linkifyURL(context, content, urlDetails); @@ -751,7 +752,7 @@ public class SpannableHelper { } } - private static void interaction(Context context, Spannable content, List mentions) { + private static void interaction(Context context, Spannable content, Status status, List mentions) { // --- For all patterns defined in Helper class --- for (Map.Entry entry : Helper.patternHashMap.entrySet()) { Helper.PatternType patternType = entry.getKey(); @@ -802,11 +803,11 @@ public class SpannableHelper { .observe((LifecycleOwner) context, filter -> { if (filter != null) { MainActivity.mainFilters.add(filter); - addTagToFilter(context, finalTag, filter); + addTagToFilter(context, finalTag, status, filter); } }); } else { - addTagToFilter(context, tag, fedilabFilter); + addTagToFilter(context, tag, status, fedilabFilter); } } } @@ -901,7 +902,7 @@ public class SpannableHelper { } } - public static void addTagToFilter(Context context, String tag, Filter filter) { + public static void addTagToFilter(Context context, String tag, Status status, Filter filter) { for (Filter.KeywordsAttributes keywords : filter.keywords) { if (keywords.keyword.equalsIgnoreCase(tag)) { return; @@ -921,6 +922,10 @@ public class SpannableHelper { filterParams.context = filter.context; FiltersVM filtersVM = new ViewModelProvider((ViewModelStoreOwner) context).get(FiltersVM.class); filtersVM.editFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams); + if (status != null) { + status.filteredByApp = filter; + } + sendAction(context, Helper.ARG_TIMELINE_REFRESH_ALL, null, null); dialog.dismiss(); }) .setNegativeButton(R.string.no, (dialog, which) -> dialog.dismiss()) diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java index b671b040..43d2a498 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java @@ -24,6 +24,7 @@ import static app.fedilab.android.BaseMainActivity.regex_public; import static app.fedilab.android.BaseMainActivity.show_boosts; import static app.fedilab.android.BaseMainActivity.show_replies; import static app.fedilab.android.activities.ContextActivity.expand; +import static app.fedilab.android.helper.Helper.ARG_TIMELINE_REFRESH_ALL; import static app.fedilab.android.helper.Helper.PREF_USER_ID; import static app.fedilab.android.helper.Helper.PREF_USER_INSTANCE; import static app.fedilab.android.helper.Helper.PREF_USER_TOKEN; @@ -2178,6 +2179,9 @@ public class StatusAdapter extends RecyclerView.Adapter if (id != null) { b.putSerializable(type, id); } + if (type == ARG_TIMELINE_REFRESH_ALL) { + b.putSerializable(ARG_TIMELINE_REFRESH_ALL, true); + } Intent intentBC = new Intent(Helper.RECEIVE_STATUS_ACTION); intentBC.putExtras(b); LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC); diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java index 8727bb7f..e23efb62 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java @@ -98,6 +98,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. Status status_to_delete = (Status) b.getSerializable(Helper.ARG_STATUS_DELETED); Status status_to_update = (Status) b.getSerializable(Helper.ARG_STATUS_UPDATED); Status statusPosted = (Status) b.getSerializable(Helper.ARG_STATUS_DELETED); + boolean refreshAll = b.getBoolean(Helper.ARG_TIMELINE_REFRESH_ALL, false); if (receivedStatus != null && statusAdapter != null) { int position = getPosition(receivedStatus); if (position >= 0) { @@ -154,6 +155,8 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. statusAdapter.notifyItemRemoved(position); } } + } else if (refreshAll) { + refreshAllAdapters(); } } }