From 0473062bc272cfa6c2943caf0e5ba4072ed21c9f Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sat, 28 Jan 2023 19:30:21 -0300 Subject: [PATCH 01/10] Its almost working! --- .../joinmastodon/android/model/Status.java | 2 + .../ui/displayitems/StatusDisplayItem.java | 14 +++++ .../WarningFilteredStatusDisplayItem.java | 51 +++++++++++++++++++ .../android/utils/StatusFilterPredicate.java | 18 +++++++ .../main/res/layout/display_item_warning.xml | 24 +++++++++ 5 files changed, 109 insertions(+) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java create mode 100644 mastodon/src/main/res/layout/display_item_warning.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index 99ec54ac3..f1faa0cff 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -58,6 +58,8 @@ public class Status extends BaseModel implements DisplayItemsParent{ public boolean bookmarked; public boolean pinned; + public boolean filterRevealed = false; + public transient boolean spoilerRevealed; public transient boolean hasGapAfter; private transient String strippedText; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index 4930b5126..88f2a742c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -8,6 +8,7 @@ import android.view.View; import android.view.ViewGroup; import org.joinmastodon.android.R; +import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.HashtagTimelineFragment; @@ -19,6 +20,7 @@ import org.joinmastodon.android.fragments.ThreadFragment; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Attachment; import org.joinmastodon.android.model.DisplayItemsParent; +import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Hashtag; import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.Poll; @@ -26,6 +28,7 @@ import org.joinmastodon.android.model.ScheduledStatus; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.ui.PhotoLayoutHelper; import org.joinmastodon.android.ui.text.HtmlParser; +import org.joinmastodon.android.utils.StatusFilterPredicate; import org.parceler.Parcels; import java.util.ArrayList; @@ -78,6 +81,7 @@ public abstract class StatusDisplayItem{ case ACCOUNT -> new AccountStatusDisplayItem.Holder(activity, parent); case HASHTAG -> new HashtagStatusDisplayItem.Holder(activity, parent); case GAP -> new GapStatusDisplayItem.Holder(activity, parent); + case WARNING -> new WarningFilteredStatusDisplayItem.Holder(activity, parent); case EXTENDED_FOOTER -> new ExtendedFooterStatusDisplayItem.Holder(activity, parent); }; } @@ -126,6 +130,15 @@ public abstract class StatusDisplayItem{ } ))); } + + List filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(Filter.FilterContext.HOME)).collect(Collectors.toList()); + StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters); + if(!filterPredicate.testWithWarning(status)){ + if(!status.filterRevealed){ + items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, status)); + return items; + } + } HeaderStatusDisplayItem header; items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, notification, scheduledStatus)); if(!TextUtils.isEmpty(statusForContent.content)) @@ -196,6 +209,7 @@ public abstract class StatusDisplayItem{ ACCOUNT, HASHTAG, GAP, + WARNING, EXTENDED_FOOTER } 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 new file mode 100644 index 000000000..d42e596e8 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java @@ -0,0 +1,51 @@ +package org.joinmastodon.android.ui.displayitems; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ProgressBar; +import android.widget.TextView; + +import org.joinmastodon.android.R; +import org.joinmastodon.android.fragments.BaseStatusListFragment; +import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.drawables.SawtoothTearDrawable; + +// Mind the gap! +public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ + public boolean loading; + public final Status status; + + public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){ + super(parentID, parentFragment); + this.status=status; + } + + @Override + public Type getType(){ + return Type.WARNING; + } + + public static class Holder extends StatusDisplayItem.Holder{ + public final ProgressBar progress; + public final TextView text; + + public Holder(Context context, ViewGroup parent){ + super(context, R.layout.display_item_warning, parent); + progress=findViewById(R.id.progress); + text=findViewById(R.id.text); +// itemView.setForeground(new SawtoothTearDrawable(context)); + } + + @Override + public void onBind(WarningFilteredStatusDisplayItem item){ + text.setVisibility(item.loading ? View.GONE : View.VISIBLE); + } + + @Override + public void onClick(){ + item.status.filterRevealed = true; +// item.parentFragment.onGapClick(this); + } + } +} 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 4555cdfdb..9e4b91413 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java @@ -38,4 +38,22 @@ public class StatusFilterPredicate implements Predicate{ } return true; } + + public boolean testWithWarning(Status status) { + if(status.filtered!=null){ + if (status.filtered.isEmpty()){ + return true; + } + boolean matches=status.filtered.stream() + .map(filterResult->filterResult.filter) + .filter(filter->filter.expiresAt==null||filter.expiresAt.isAfter(Instant.now())) + .anyMatch(filter->filter.filterAction==Filter.FilterAction.WARN); + return !matches; + } + for(Filter filter:filters){ + if(filter.matches(status)) + return false; + } + return true; + } } diff --git a/mastodon/src/main/res/layout/display_item_warning.xml b/mastodon/src/main/res/layout/display_item_warning.xml new file mode 100644 index 000000000..83bcf348d --- /dev/null +++ b/mastodon/src/main/res/layout/display_item_warning.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file From 9a55f847b95242959f15e29b99dcb55520a82b3f Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sat, 28 Jan 2023 20:19:41 -0300 Subject: [PATCH 02/10] Its once again almost working --- .../fragments/BaseStatusListFragment.java | 30 +++++++++++++++++++ .../ui/displayitems/StatusDisplayItem.java | 19 +++++++----- .../WarningFilteredStatusDisplayItem.java | 7 +++-- .../main/res/layout/display_item_warning.xml | 1 + 4 files changed, 46 insertions(+), 11 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index b28bfe6d3..974bba48f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -42,6 +42,7 @@ import org.joinmastodon.android.ui.displayitems.PollFooterStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.PollOptionStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem; +import org.joinmastodon.android.ui.displayitems.WarningFilteredStatusDisplayItem; import org.joinmastodon.android.ui.photoviewer.PhotoViewer; import org.joinmastodon.android.ui.photoviewer.PhotoViewerHost; import org.joinmastodon.android.ui.utils.UiUtils; @@ -513,6 +514,28 @@ public abstract class BaseStatusListFragment exten updateImagesSpoilerState(status, itemID); } +// public void onRevealFilteredClick(TextStatusDisplayItem.Holder holder){ +// Status status=holder.getItem().status; +// revealFiltered(status, holder.getItemID()); +// } + + public void onRevealFilteredClick(WarningFilteredStatusDisplayItem.Holder holder){ + Status status=holder.getItem().status; + revealFiltered(status, holder.getItemID()); + } + + protected void revealFiltered(Status status, String itemID){ + status.filterRevealed=true; + TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class); + if(text!=null) + adapter.notifyItemChanged(text.getAbsoluteAdapterPosition()-getMainAdapterOffset()); + HeaderStatusDisplayItem.Holder header=findHolderOfType(itemID, HeaderStatusDisplayItem.Holder.class); + if(header!=null) + header.rebind(); + updateImagesSpoilerState(status, itemID); + } + + public void onVisibilityIconClick(HeaderStatusDisplayItem.Holder holder){ Status status=holder.getItem().status; status.spoilerRevealed=!status.spoilerRevealed; @@ -543,6 +566,13 @@ public abstract class BaseStatusListFragment exten public void onGapClick(GapStatusDisplayItem.Holder item){} + public void onWarningClick(WarningFilteredStatusDisplayItem.Holder warningItem){ +// Status status = warningItem.getItem().status; +// String itemID = warningItem.getItemID(); + warningItem.itemView.setVisibility(View.GONE); +// adapter.notifyItemChanged(); + } + public String getAccountID(){ return accountID; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index 88f2a742c..d265e14a2 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -98,6 +98,14 @@ public abstract class StatusDisplayItem{ args.putString("account", accountID); ScheduledStatus scheduledStatus = parentObject instanceof ScheduledStatus ? (ScheduledStatus) parentObject : null; + List filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(Filter.FilterContext.HOME)).collect(Collectors.toList()); + StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters); + if(!filterPredicate.testWithWarning(status)){ + if(!status.filterRevealed){ + items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, status)); + } + } + if(status.reblog!=null){ boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account); items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, fragment.getString(R.string.user_boosted, status.account.displayName), status.account.emojis, R.drawable.ic_fluent_arrow_repeat_all_20_filled, isOwnPost ? status.visibility : null, i->{ @@ -131,14 +139,6 @@ public abstract class StatusDisplayItem{ ))); } - List filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(Filter.FilterContext.HOME)).collect(Collectors.toList()); - StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters); - if(!filterPredicate.testWithWarning(status)){ - if(!status.filterRevealed){ - items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, status)); - return items; - } - } HeaderStatusDisplayItem header; items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, notification, scheduledStatus)); if(!TextUtils.isEmpty(statusForContent.content)) @@ -178,11 +178,14 @@ public abstract class StatusDisplayItem{ if(status.hasGapAfter && !(fragment instanceof ThreadFragment)) items.add(new GapStatusDisplayItem(parentID, fragment)); } + int i=1; for(StatusDisplayItem item:items){ item.inset=inset; item.index=i++; } + + return items; } 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 d42e596e8..0f5e6d0bc 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 @@ -27,14 +27,16 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ } public static class Holder extends StatusDisplayItem.Holder{ + public final View warningWrap; public final ProgressBar progress; public final TextView text; public Holder(Context context, ViewGroup parent){ super(context, R.layout.display_item_warning, parent); + warningWrap=findViewById(R.id.warning_wrap); progress=findViewById(R.id.progress); text=findViewById(R.id.text); -// itemView.setForeground(new SawtoothTearDrawable(context)); +// itemView.setOnClickListener(v->item.parentFragment.onRevealFilteredClick(this)); } @Override @@ -44,8 +46,7 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onClick(){ - item.status.filterRevealed = true; -// item.parentFragment.onGapClick(this); + item.parentFragment.onWarningClick(this); } } } diff --git a/mastodon/src/main/res/layout/display_item_warning.xml b/mastodon/src/main/res/layout/display_item_warning.xml index 83bcf348d..0549861c0 100644 --- a/mastodon/src/main/res/layout/display_item_warning.xml +++ b/mastodon/src/main/res/layout/display_item_warning.xml @@ -2,6 +2,7 @@ Date: Sun, 29 Jan 2023 18:24:34 -0300 Subject: [PATCH 03/10] Now it acctually shows a missing posts warning below every filtered post. Still a long way to go --- .../fragments/BaseStatusListFragment.java | 13 ++----------- .../org/joinmastodon/android/model/Status.java | 2 +- .../displayitems/HeaderStatusDisplayItem.java | 18 ++++++++++++++++++ .../ui/displayitems/StatusDisplayItem.java | 18 ++++++++++-------- .../WarningFilteredStatusDisplayItem.java | 9 ++++++++- .../res/layout/place_holder_display_item.xml | 5 +++++ 6 files changed, 44 insertions(+), 21 deletions(-) create mode 100644 mastodon/src/main/res/layout/place_holder_display_item.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 974bba48f..d06515d3f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -526,13 +526,7 @@ public abstract class BaseStatusListFragment exten protected void revealFiltered(Status status, String itemID){ status.filterRevealed=true; - TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class); - if(text!=null) - adapter.notifyItemChanged(text.getAbsoluteAdapterPosition()-getMainAdapterOffset()); - HeaderStatusDisplayItem.Holder header=findHolderOfType(itemID, HeaderStatusDisplayItem.Holder.class); - if(header!=null) - header.rebind(); - updateImagesSpoilerState(status, itemID); + } @@ -567,10 +561,7 @@ public abstract class BaseStatusListFragment exten public void onGapClick(GapStatusDisplayItem.Holder item){} public void onWarningClick(WarningFilteredStatusDisplayItem.Holder warningItem){ -// Status status = warningItem.getItem().status; -// String itemID = warningItem.getItemID(); - warningItem.itemView.setVisibility(View.GONE); -// adapter.notifyItemChanged(); + adapter.notifyItemChanged(warningItem.getAbsoluteAdapterPosition()); } public String getAccountID(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index f1faa0cff..da9f3393e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -58,7 +58,7 @@ public class Status extends BaseModel implements DisplayItemsParent{ public boolean bookmarked; public boolean pinned; - public boolean filterRevealed = false; + public boolean filterRevealed; public transient boolean spoilerRevealed; public transient boolean hasGapAfter; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index f959e7ba4..be07d3244 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -145,6 +145,8 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ private Relationship relationship; private APIRequest currentRelationshipRequest; + ViewGroup.LayoutParams params; + private static final ViewOutlineProvider roundCornersOutline=new ViewOutlineProvider(){ @Override public void getOutline(View view, Outline outline){ @@ -278,8 +280,24 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ return true; }); UiUtils.enablePopupMenuIcons(activity, optionsMenu); + +// if(!item.status.filterRevealed){ +// this.itemView.setVisibility(View.GONE); +// params = this.itemView.getLayoutParams(); +// params.height = 0; +// params.width = 0; +// this.itemView.setLayoutParams(params); +// } } +// public void setFilteredShown(){ +// this.itemView.setVisibility(View.VISIBLE); +// params = this.itemView.getLayoutParams(); +// params.height = 0; +// params.width = 0; +// this.itemView.setLayoutParams(params); +// } + private void populateAccountsMenu(Menu menu) { List sessions=AccountSessionManager.getInstance().getLoggedInAccounts(); sessions.stream().filter(s -> !s.getID().equals(item.accountID)).forEach(s -> { diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index d265e14a2..6f8c067de 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -100,11 +100,8 @@ public abstract class StatusDisplayItem{ List filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(Filter.FilterContext.HOME)).collect(Collectors.toList()); StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters); - if(!filterPredicate.testWithWarning(status)){ - if(!status.filterRevealed){ - items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, status)); - } - } + + statusForContent.filterRevealed = filterPredicate.testWithWarning(status); if(status.reblog!=null){ boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account); @@ -141,9 +138,9 @@ public abstract class StatusDisplayItem{ HeaderStatusDisplayItem header; items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, notification, scheduledStatus)); - if(!TextUtils.isEmpty(statusForContent.content)) + if(!TextUtils.isEmpty(statusForContent.content)){ items.add(new TextStatusDisplayItem(parentID, HtmlParser.parse(statusForContent.content, statusForContent.emojis, statusForContent.mentions, statusForContent.tags, accountID), fragment, statusForContent, disableTranslate)); - else + } else header.needBottomPadding=true; List imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList()); if(!imageAttachments.isEmpty()){ @@ -175,8 +172,9 @@ public abstract class StatusDisplayItem{ } if(addFooter){ items.add(new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID)); - if(status.hasGapAfter && !(fragment instanceof ThreadFragment)) + if(status.hasGapAfter && !(fragment instanceof ThreadFragment)){ items.add(new GapStatusDisplayItem(parentID, fragment)); + } } int i=1; @@ -185,6 +183,10 @@ public abstract class StatusDisplayItem{ item.index=i++; } + if(!statusForContent.filterRevealed){ + items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent)); + } + return items; } 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 0f5e6d0bc..52f6459b1 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 @@ -6,6 +6,8 @@ import android.view.ViewGroup; 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.Status; @@ -41,11 +43,16 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onBind(WarningFilteredStatusDisplayItem item){ - text.setVisibility(item.loading ? View.GONE : View.VISIBLE); + } @Override public void onClick(){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); item.parentFragment.onWarningClick(this); } } diff --git a/mastodon/src/main/res/layout/place_holder_display_item.xml b/mastodon/src/main/res/layout/place_holder_display_item.xml new file mode 100644 index 000000000..280bccc57 --- /dev/null +++ b/mastodon/src/main/res/layout/place_holder_display_item.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file From ede4137935a97f9bc0c800de02153e83f300e2e4 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Sun, 29 Jan 2023 18:46:39 -0300 Subject: [PATCH 04/10] It now hides everything! It still doesnt pop up though :D --- .../fragments/BaseStatusListFragment.java | 4 ++ .../displayitems/AudioStatusDisplayItem.java | 9 ++++ .../displayitems/FooterStatusDisplayItem.java | 9 ++++ .../displayitems/HeaderStatusDisplayItem.java | 43 +++++++++---------- .../displayitems/ImageStatusDisplayItem.java | 9 ++++ .../LinkCardStatusDisplayItem.java | 9 ++++ .../displayitems/PhotoStatusDisplayItem.java | 9 ++++ .../ReblogOrReplyLineStatusDisplayItem.java | 1 + .../ui/displayitems/StatusDisplayItem.java | 1 - .../displayitems/TextStatusDisplayItem.java | 12 ++++++ 10 files changed, 82 insertions(+), 24 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index d06515d3f..6e4f53a6a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -529,6 +529,10 @@ public abstract class BaseStatusListFragment exten } +// public void notifyItemsChanged(int adapterPosition){ +// adapter.notifyItemChanged(adapterPosition); +// } + public void onVisibilityIconClick(HeaderStatusDisplayItem.Holder holder){ Status status=holder.getItem().status; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java index 3d3acef9c..d1bfc0047 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java @@ -105,6 +105,15 @@ public class AudioStatusDisplayItem extends StatusDisplayItem{ }else{ seekBar.setEnabled(false); } + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } } private void onPlayPauseClick(View v){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index f38f632c7..c42ef35c1 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -153,6 +153,15 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ bookmark.setSelected(item.status.bookmarked); boost.setEnabled(item.status.visibility==StatusPrivacy.PUBLIC || item.status.visibility==StatusPrivacy.UNLISTED || item.status.visibility==StatusPrivacy.LOCAL || (item.status.visibility==StatusPrivacy.PRIVATE && item.status.account.id.equals(AccountSessionManager.getInstance().getAccount(item.accountID).self.id))); + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } } private void bindButton(TextView btn, long count){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index be07d3244..6c68b9b8f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -145,8 +145,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ private Relationship relationship; private APIRequest currentRelationshipRequest; - ViewGroup.LayoutParams params; - private static final ViewOutlineProvider roundCornersOutline=new ViewOutlineProvider(){ @Override public void getOutline(View view, Outline outline){ @@ -179,7 +177,9 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ })); optionsMenu=new PopupMenu(activity, more); + optionsMenu.inflate(R.menu.post); + optionsMenu.setOnMenuItemClickListener(menuItem->{ Account account=item.user; int id=menuItem.getItemId(); @@ -277,17 +277,19 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ args.putString("profileDisplayUsername", account.getDisplayUsername()); Nav.go(item.parentFragment.getActivity(), ListTimelinesFragment.class, args); } + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } return true; }); UiUtils.enablePopupMenuIcons(activity, optionsMenu); -// if(!item.status.filterRevealed){ -// this.itemView.setVisibility(View.GONE); -// params = this.itemView.getLayoutParams(); -// params.height = 0; -// params.width = 0; -// this.itemView.setLayoutParams(params); -// } } // public void setFilteredShown(){ @@ -317,20 +319,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ botIcon.setColorFilter(username.getCurrentTextColor()); separator.setVisibility(View.VISIBLE); -// if(item.user.bot){ -// SpannableStringBuilder ssb = new SpannableStringBuilder(); -// ssb.append('@'+item.user.acct); -// ssb.append(" "); -// Drawable botIcon=username.getResources().getDrawable(R.drawable.ic_bot, itemView.getContext().getTheme()).mutate(); -// botIcon.setBounds(0, 0, botIcon.getIntrinsicWidth(), botIcon.getIntrinsicHeight()); -// botIcon.setTint(username.getCurrentTextColor()); -// ssb.append(itemView.getContext().getString(R.string.manually_approves_followers), new ImageSpan(botIcon, ImageSpan.ALIGN_BASELINE), 0); -// username.setPaddingRelative(0,0,16,0); -// username.setText(ssb); -// } - -// username.setCompoundDrawablesWithIntrinsicBounds(item.user.bot ? R.drawable.ic_fluent_bot_24_filled : 0, 0, 0, 0); - if (item.scheduledStatus!=null) if (item.scheduledStatus.scheduledAt.isAfter(CreateStatus.DRAFTS_AFTER_INSTANT)) { timestamp.setText(R.string.sk_draft); @@ -411,6 +399,15 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ more.setContentDescription(desc); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) more.setTooltipText(desc); + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java index 782f94e17..0b893b5a6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java @@ -73,6 +73,15 @@ public abstract class ImageStatusDisplayItem extends StatusDisplayItem{ photo.setImageDrawable(crossfadeDrawable); photo.setContentDescription(TextUtils.isEmpty(item.attachment.description) ? item.parentFragment.getString(R.string.media_no_description) : item.attachment.description); didClear=false; + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java index 42ac3b429..b38df7b07 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java @@ -84,6 +84,15 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{ photo.setImageDrawable(crossfadeDrawable); didClear=false; } + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PhotoStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PhotoStatusDisplayItem.java index bbfc7a082..cc5882dc2 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PhotoStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PhotoStatusDisplayItem.java @@ -106,6 +106,15 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{ altTextWrapper.setVisibility(View.GONE); } } + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } } private void onShowHideClick(View v){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java index 366d5ba9f..df198f823 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java @@ -100,6 +100,7 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{ if (visibilityText != 0) text.setContentDescription(item.text + " (" + ctx.getString(visibilityText) + ")"); if(Build.VERSION.SDK_INT{ if (item.translation == null) { translateProgress.setVisibility(View.VISIBLE); @@ -186,6 +189,15 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ rebind(); } }); + + if(!item.status.filterRevealed){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); +// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); + } } @Override From dae2632c18d9e1ab4ec2bcbcb6c45f89a3ed6471 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Tue, 31 Jan 2023 20:30:05 -0300 Subject: [PATCH 05/10] IT WORKS, now i need to polish it :) --- .../android/fragments/BaseStatusListFragment.java | 9 +++++++-- .../ui/displayitems/AudioStatusDisplayItem.java | 8 -------- .../ui/displayitems/FooterStatusDisplayItem.java | 8 -------- .../ui/displayitems/HeaderStatusDisplayItem.java | 8 -------- .../ui/displayitems/ImageStatusDisplayItem.java | 8 -------- .../ui/displayitems/LinkCardStatusDisplayItem.java | 8 -------- .../android/ui/displayitems/StatusDisplayItem.java | 6 +++++- .../ui/displayitems/TextStatusDisplayItem.java | 8 -------- .../WarningFilteredStatusDisplayItem.java | 11 ++++++++++- 9 files changed, 22 insertions(+), 52 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 6e4f53a6a..00c2fb99f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -521,10 +521,10 @@ public abstract class BaseStatusListFragment exten public void onRevealFilteredClick(WarningFilteredStatusDisplayItem.Holder holder){ Status status=holder.getItem().status; - revealFiltered(status, holder.getItemID()); +// revealFiltered(status, holder.getItemID()); } - protected void revealFiltered(Status status, String itemID){ + protected void revealFiltered(Status status, ArrayList showedItems){ status.filterRevealed=true; } @@ -565,6 +565,11 @@ public abstract class BaseStatusListFragment exten public void onGapClick(GapStatusDisplayItem.Holder item){} public void onWarningClick(WarningFilteredStatusDisplayItem.Holder warningItem){ + int i = warningItem.getAbsoluteAdapterPosition(); + for(StatusDisplayItem item:warningItem.filteredItems){ + i++; + displayItems.add(i, item); + } adapter.notifyItemChanged(warningItem.getAbsoluteAdapterPosition()); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java index d1bfc0047..5ef26577d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/AudioStatusDisplayItem.java @@ -106,14 +106,6 @@ public class AudioStatusDisplayItem extends StatusDisplayItem{ seekBar.setEnabled(false); } - if(!item.status.filterRevealed){ - this.itemView.setVisibility(View.GONE); - ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); - params.height = 0; - params.width = 0; - this.itemView.setLayoutParams(params); -// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); - } } private void onPlayPauseClick(View v){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index c42ef35c1..6a694b7f7 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -154,14 +154,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ boost.setEnabled(item.status.visibility==StatusPrivacy.PUBLIC || item.status.visibility==StatusPrivacy.UNLISTED || item.status.visibility==StatusPrivacy.LOCAL || (item.status.visibility==StatusPrivacy.PRIVATE && item.status.account.id.equals(AccountSessionManager.getInstance().getAccount(item.accountID).self.id))); - if(!item.status.filterRevealed){ - this.itemView.setVisibility(View.GONE); - ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); - params.height = 0; - params.width = 0; - this.itemView.setLayoutParams(params); -// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); - } } private void bindButton(TextView btn, long count){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index 6c68b9b8f..239641419 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -400,14 +400,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ more.setContentDescription(desc); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) more.setTooltipText(desc); - if(!item.status.filterRevealed){ - this.itemView.setVisibility(View.GONE); - ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); - params.height = 0; - params.width = 0; - this.itemView.setLayoutParams(params); -// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); - } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java index 0b893b5a6..fa1061b2d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ImageStatusDisplayItem.java @@ -74,14 +74,6 @@ public abstract class ImageStatusDisplayItem extends StatusDisplayItem{ photo.setContentDescription(TextUtils.isEmpty(item.attachment.description) ? item.parentFragment.getString(R.string.media_no_description) : item.attachment.description); didClear=false; - if(!item.status.filterRevealed){ - this.itemView.setVisibility(View.GONE); - ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); - params.height = 0; - params.width = 0; - this.itemView.setLayoutParams(params); -// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); - } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java index b38df7b07..eb47c2790 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java @@ -85,14 +85,6 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{ didClear=false; } - if(!item.status.filterRevealed){ - this.itemView.setVisibility(View.GONE); - ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); - params.height = 0; - params.width = 0; - this.itemView.setLayoutParams(params); -// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); - } } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index c7e9fa394..597c201d6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -93,6 +93,9 @@ public abstract class StatusDisplayItem{ public static ArrayList buildItems(BaseStatusListFragment fragment, Status status, String accountID, DisplayItemsParent parentObject, Map knownAccounts, boolean inset, boolean addFooter, Notification notification, boolean disableTranslate){ String parentID=parentObject.getID(); ArrayList items=new ArrayList<>(); + + ArrayList filtered=new ArrayList<>(); + Status statusForContent=status.getContentStatus(); Bundle args=new Bundle(); args.putString("account", accountID); @@ -184,7 +187,8 @@ public abstract class StatusDisplayItem{ } if(!statusForContent.filterRevealed){ - items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent)); + filtered.add(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, items)); + return filtered; } return items; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index b4e52899a..a3d35f2ba 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -190,14 +190,6 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ } }); - if(!item.status.filterRevealed){ - this.itemView.setVisibility(View.GONE); - ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); - params.height = 0; - params.width = 0; - this.itemView.setLayoutParams(params); -// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition()); - } } @Override 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 52f6459b1..d91ae13ee 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 @@ -13,14 +13,18 @@ import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.ui.drawables.SawtoothTearDrawable; +import java.util.ArrayList; + // Mind the gap! public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ public boolean loading; public final Status status; + public ArrayList filteredItems; - public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){ + public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, ArrayList items){ super(parentID, parentFragment); this.status=status; + this.filteredItems = items; } @Override @@ -32,6 +36,7 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ public final View warningWrap; public final ProgressBar progress; public final TextView text; + public ArrayList filteredItems; public Holder(Context context, ViewGroup parent){ super(context, R.layout.display_item_warning, parent); @@ -43,7 +48,11 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onBind(WarningFilteredStatusDisplayItem item){ + filteredItems = item.filteredItems; + } + public void hide(WarningFilteredStatusDisplayItem item){ + filteredItems = item.filteredItems; } @Override From ad2895e2970e1dc724b1f0728370c68712b678a6 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Tue, 31 Jan 2023 20:36:01 -0300 Subject: [PATCH 06/10] Doing a bit of cleanup. Man, I still dont believe what i have done --- .../android/fragments/BaseStatusListFragment.java | 1 + .../WarningFilteredStatusDisplayItem.java | 14 +++++--------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 00c2fb99f..66187300f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -566,6 +566,7 @@ public abstract class BaseStatusListFragment exten public void onWarningClick(WarningFilteredStatusDisplayItem.Holder warningItem){ int i = warningItem.getAbsoluteAdapterPosition(); + displayItems.remove(warningItem.getAbsoluteAdapterPosition()); for(StatusDisplayItem item:warningItem.filteredItems){ i++; displayItems.add(i, item); 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 d91ae13ee..7c7c2b77a 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,17 +51,13 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ filteredItems = item.filteredItems; } - public void hide(WarningFilteredStatusDisplayItem item){ - filteredItems = item.filteredItems; - } - @Override public void onClick(){ - this.itemView.setVisibility(View.GONE); - ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); - params.height = 0; - params.width = 0; - this.itemView.setLayoutParams(params); +// this.itemView.setVisibility(View.GONE); +// ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); +// params.height = 0; +// params.width = 0; +// this.itemView.setLayoutParams(params); item.parentFragment.onWarningClick(this); } } From 594e49cf645e6ed26ad9105a8b6a69144c3c84cc Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Wed, 1 Feb 2023 20:21:19 -0300 Subject: [PATCH 07/10] Fixing a weird bug I found --- .../joinmastodon/android/fragments/BaseStatusListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 66187300f..6deed3e32 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -566,11 +566,11 @@ public abstract class BaseStatusListFragment exten public void onWarningClick(WarningFilteredStatusDisplayItem.Holder warningItem){ int i = warningItem.getAbsoluteAdapterPosition(); - displayItems.remove(warningItem.getAbsoluteAdapterPosition()); for(StatusDisplayItem item:warningItem.filteredItems){ i++; displayItems.add(i, item); } + displayItems.remove(warningItem.getAbsoluteAdapterPosition()); adapter.notifyItemChanged(warningItem.getAbsoluteAdapterPosition()); } From cfb9854a8ec07dd51ca013139b285a3a55d418ec Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Wed, 1 Feb 2023 21:16:47 -0300 Subject: [PATCH 08/10] Adding a little bit of polish, and also adding a title to the filters --- .../main/java/org/joinmastodon/android/model/Filter.java | 3 +++ .../ui/displayitems/WarningFilteredStatusDisplayItem.java | 6 +----- mastodon/src/main/res/layout/display_item_warning.xml | 4 ++-- mastodon/src/main/res/values/strings_mo.xml | 1 + 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java b/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java index f7b394765..ea34b8402 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java @@ -18,6 +18,8 @@ public class Filter extends BaseModel{ @RequiredField public String id; @RequiredField + public String title; + @RequiredField public String phrase; public transient EnumSet context=EnumSet.noneOf(FilterContext.class); public Instant expiresAt; @@ -61,6 +63,7 @@ public class Filter extends BaseModel{ public String toString(){ return "Filter{"+ "id='"+id+'\''+ + ", title='"+title+'\''+ ", phrase='"+phrase+'\''+ ", context="+context+ ", expiresAt="+expiresAt+ 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 7c7c2b77a..c77a0ea4d 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 @@ -49,15 +49,11 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onBind(WarningFilteredStatusDisplayItem item){ filteredItems = item.filteredItems; + text.setText(item.parentFragment.getString(R.string.mo_filtered, item.status.filtered.get(item.status.filtered.size() -1).filter.title)); } @Override public void onClick(){ -// this.itemView.setVisibility(View.GONE); -// ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); -// params.height = 0; -// params.width = 0; -// this.itemView.setLayoutParams(params); item.parentFragment.onWarningClick(this); } } diff --git a/mastodon/src/main/res/layout/display_item_warning.xml b/mastodon/src/main/res/layout/display_item_warning.xml index 0549861c0..c0bc627d5 100644 --- a/mastodon/src/main/res/layout/display_item_warning.xml +++ b/mastodon/src/main/res/layout/display_item_warning.xml @@ -1,7 +1,7 @@ @@ -11,7 +11,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_horizontal" - android:textAppearance="@style/m3_body_large" + android:textAppearance="@style/m3_title_medium" android:textColor="?android:textColorSecondary" android:text="@string/load_missing_posts"/> diff --git a/mastodon/src/main/res/values/strings_mo.xml b/mastodon/src/main/res/values/strings_mo.xml index a7bc9bd10..bf2831084 100644 --- a/mastodon/src/main/res/values/strings_mo.xml +++ b/mastodon/src/main/res/values/strings_mo.xml @@ -22,6 +22,7 @@ The included images have no description. Please consider adding one, to allow visually impaired people to participate. Recently used Clear recently used emoji + Filtered: %s Disable "Relocate publish button" to allow customization From 4940eff7f92af71040d9627622711c6fa19f6219 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Wed, 1 Feb 2023 21:39:54 -0300 Subject: [PATCH 09/10] Its pretty much done i think --- .../WarningFilteredStatusDisplayItem.java | 8 +++--- .../main/res/layout/display_item_warning.xml | 26 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) 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 c77a0ea4d..89ad2f56b 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 @@ -3,6 +3,7 @@ package org.joinmastodon.android.ui.displayitems; import android.content.Context; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; @@ -34,14 +35,15 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ public static class Holder extends StatusDisplayItem.Holder{ public final View warningWrap; - public final ProgressBar progress; + public final Button showBtn; public final TextView text; public ArrayList filteredItems; public Holder(Context context, ViewGroup parent){ super(context, R.layout.display_item_warning, parent); warningWrap=findViewById(R.id.warning_wrap); - progress=findViewById(R.id.progress); + showBtn=findViewById(R.id.reveal_btn); + showBtn.setOnClickListener(i -> item.parentFragment.onWarningClick(this)); text=findViewById(R.id.text); // itemView.setOnClickListener(v->item.parentFragment.onRevealFilteredClick(this)); } @@ -54,7 +56,7 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onClick(){ - item.parentFragment.onWarningClick(this); + } } } diff --git a/mastodon/src/main/res/layout/display_item_warning.xml b/mastodon/src/main/res/layout/display_item_warning.xml index c0bc627d5..d618c2bd3 100644 --- a/mastodon/src/main/res/layout/display_item_warning.xml +++ b/mastodon/src/main/res/layout/display_item_warning.xml @@ -1,7 +1,7 @@ @@ -9,17 +9,23 @@ android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:gravity="center_horizontal" + android:layout_marginStart="16dp" + android:layout_gravity="start|center_vertical" android:textAppearance="@style/m3_title_medium" android:textColor="?android:textColorSecondary" - android:text="@string/load_missing_posts"/> + android:text="@string/mo_filtered"/> + +