From 92beac8dff278ead91b263e012ebccafa9163d7a Mon Sep 17 00:00:00 2001 From: sk Date: Tue, 14 Mar 2023 15:34:05 +0100 Subject: [PATCH] fuck it, indented header line closes #448 --- .../ReblogOrReplyLineStatusDisplayItem.java | 13 ++--- .../ui/displayitems/StatusDisplayItem.java | 47 ++++++++++--------- 2 files changed, 33 insertions(+), 27 deletions(-) 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 b958fa7ed..a6924dc52 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 @@ -38,13 +38,10 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{ private int iconEnd; private CustomEmojiHelper emojiHelper=new CustomEmojiHelper(); private View.OnClickListener handleClick; - private boolean isLastLine; + private boolean isLastLine = true; + private int lineNo = 0; public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List emojis, @DrawableRes int icon, StatusPrivacy visibility, @Nullable View.OnClickListener handleClick){ - this(parentID, parentFragment, text, emojis, icon, visibility, handleClick, true); - } - - public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List emojis, @DrawableRes int icon, StatusPrivacy visibility, @Nullable View.OnClickListener handleClick, boolean isLastLine){ super(parentID, parentFragment); SpannableStringBuilder ssb=new SpannableStringBuilder(text); HtmlParser.parseCustomEmoji(ssb, emojis); @@ -55,13 +52,16 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{ TypedValue outValue = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true); updateVisibility(visibility); - setIsLastLine(isLastLine); } public void setIsLastLine(boolean isLastLine) { this.isLastLine = isLastLine; } + public void setLineNo(int lineNo) { + this.lineNo = lineNo; + } + public void updateVisibility(StatusPrivacy visibility) { this.visibility = visibility; this.iconEnd = visibility != null ? switch (visibility) { @@ -116,6 +116,7 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{ UiUtils.fixCompoundDrawableTintOnAndroid6(text); ViewGroup.MarginLayoutParams params = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.bottomMargin = V.dp(item.isLastLine ? -12 : -18); + params.leftMargin = V.dp(13) * item.lineNo; frame.setLayoutParams(params); } 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 3ad8a7c39..f40c93c8b 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 @@ -113,23 +113,8 @@ public abstract class StatusDisplayItem{ 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->{ args.putParcelable("profileAccount", Parcels.wrap(status.account)); Nav.go(fragment.getActivity(), ProfileFragment.class, args); - }, false)); - } - - if(statusForContent.inReplyToAccountId!=null){ - Account account = knownAccounts.get(statusForContent.inReplyToAccountId); - View.OnClickListener handleClick = account == null ? null : i -> { - args.putParcelable("profileAccount", Parcels.wrap(account)); - Nav.go(fragment.getActivity(), ProfileFragment.class, args); - }; - String text = account != null ? fragment.getString(R.string.in_reply_to, account.displayName) : fragment.getString(R.string.sk_in_reply); - items.add(new ReblogOrReplyLineStatusDisplayItem( - parentID, fragment, text, account == null ? List.of() : account.emojis, - R.drawable.ic_fluent_arrow_reply_20_filled, null, handleClick, false - )); - } - - if (status.reblog == null && !(status.tags.isEmpty() || + })); + } else if (!(status.tags.isEmpty() || fragment instanceof HashtagTimelineFragment || fragment instanceof ListTimelineFragment ) && fragment.getParentFragment() instanceof HomeTabFragment home) { @@ -144,15 +129,35 @@ public abstract class StatusDisplayItem{ i -> { args.putString("hashtag", hashtag.name); Nav.go(fragment.getActivity(), HashtagTimelineFragment.class, args); - }, - false + } ))); } - if (items.size() > 0) { - ((ReblogOrReplyLineStatusDisplayItem) items.get(items.size() - 1)).setIsLastLine(true); + if(statusForContent.inReplyToAccountId!=null){ + Account account = knownAccounts.get(statusForContent.inReplyToAccountId); + View.OnClickListener handleClick = account == null ? null : i -> { + args.putParcelable("profileAccount", Parcels.wrap(account)); + Nav.go(fragment.getActivity(), ProfileFragment.class, args); + }; + String text = account != null ? fragment.getString(R.string.in_reply_to, account.displayName) : fragment.getString(R.string.sk_in_reply); + items.add(new ReblogOrReplyLineStatusDisplayItem( + parentID, fragment, text, account == null ? List.of() : account.emojis, + R.drawable.ic_fluent_arrow_reply_20_filled, null, handleClick + )); } + int l = 0; + ReblogOrReplyLineStatusDisplayItem lastLine = null; + for (StatusDisplayItem item : items) { + if (item instanceof ReblogOrReplyLineStatusDisplayItem line) { + line.setLineNo(l); + line.setIsLastLine(false); + lastLine = line; + l++; + } + } + if (lastLine != null) lastLine.setIsLastLine(true); + HeaderStatusDisplayItem header; items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, notification, scheduledStatus)); if(!TextUtils.isEmpty(statusForContent.content))