From 50760471d59d487e3432f764137a0b2531bfd690 Mon Sep 17 00:00:00 2001 From: Grishka Date: Sat, 20 Apr 2024 07:12:51 +0300 Subject: [PATCH] Add context menus to post footer buttons (AND-161) --- .../displayitems/FooterStatusDisplayItem.java | 53 +++++++++++++++++++ mastodon/src/main/res/menu/boost_longtap.xml | 5 ++ .../src/main/res/menu/favorite_longtap.xml | 6 +++ mastodon/src/main/res/values/strings.xml | 6 ++- 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 mastodon/src/main/res/menu/boost_longtap.xml create mode 100644 mastodon/src/main/res/menu/favorite_longtap.xml 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 42e64e0b0..b2fd4dd92 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 @@ -6,6 +6,7 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityNodeInfo; @@ -19,6 +20,9 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.ComposeFragment; +import org.joinmastodon.android.fragments.account_list.StatusFavoritesListFragment; +import org.joinmastodon.android.fragments.account_list.StatusReblogsListFragment; +import org.joinmastodon.android.fragments.account_list.StatusRelatedAccountListFragment; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.StatusPrivacy; import org.joinmastodon.android.ui.utils.UiUtils; @@ -48,6 +52,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ private final ImageView share; private final ColorStateList buttonColors; private final View replyBtn, boostBtn, favoriteBtn, shareBtn; + private final PopupMenu boostLongTapMenu, favoriteLongTapMenu; private final View.AccessibilityDelegate buttonAccessibilityDelegate=new View.AccessibilityDelegate(){ @Override @@ -97,11 +102,20 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ replyBtn.setOnClickListener(this::onReplyClick); replyBtn.setAccessibilityDelegate(buttonAccessibilityDelegate); boostBtn.setOnClickListener(this::onBoostClick); + boostBtn.setOnLongClickListener(this::onBoostLongClick); boostBtn.setAccessibilityDelegate(buttonAccessibilityDelegate); favoriteBtn.setOnClickListener(this::onFavoriteClick); + favoriteBtn.setOnLongClickListener(this::onFavoriteLongClick); favoriteBtn.setAccessibilityDelegate(buttonAccessibilityDelegate); shareBtn.setOnClickListener(this::onShareClick); shareBtn.setAccessibilityDelegate(buttonAccessibilityDelegate); + + favoriteLongTapMenu=new PopupMenu(activity, favoriteBtn); + favoriteLongTapMenu.inflate(R.menu.favorite_longtap); + favoriteLongTapMenu.setOnMenuItemClickListener(this::onLongTapMenuItemSelected); + boostLongTapMenu=new PopupMenu(activity, boostBtn); + boostLongTapMenu.inflate(R.menu.boost_longtap); + boostLongTapMenu.setOnMenuItemClickListener(this::onLongTapMenuItemSelected); } @Override @@ -172,6 +186,45 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ UiUtils.openSystemShareSheet(v.getContext(), item.status); } + private boolean onBoostLongClick(View v){ + MenuItem boost=boostLongTapMenu.getMenu().findItem(R.id.boost); + boost.setTitle(item.status.reblogged ? R.string.undo_reblog : R.string.button_reblog); + boostLongTapMenu.show(); + return true; + } + + private boolean onFavoriteLongClick(View v){ + MenuItem favorite=favoriteLongTapMenu.getMenu().findItem(R.id.favorite); + MenuItem bookmark=favoriteLongTapMenu.getMenu().findItem(R.id.bookmark); + favorite.setTitle(item.status.favourited ? R.string.undo_favorite : R.string.button_favorite); + bookmark.setTitle(item.status.bookmarked ? R.string.remove_bookmark : R.string.add_bookmark); + favoriteLongTapMenu.show(); + return true; + } + + private boolean onLongTapMenuItemSelected(MenuItem item){ + int id=item.getItemId(); + if(id==R.id.favorite){ + onFavoriteClick(null); + }else if(id==R.id.boost){ + onBoostClick(null); + }else if(id==R.id.bookmark){ + AccountSessionManager.getInstance().getAccount(this.item.accountID).getStatusInteractionController().setBookmarked(this.item.status, !this.item.status.bookmarked); + }else if(id==R.id.view_favorites){ + startAccountListFragment(StatusFavoritesListFragment.class); + }else if(id==R.id.view_boosts){ + startAccountListFragment(StatusReblogsListFragment.class); + } + return true; + } + + private void startAccountListFragment(Class cls){ + Bundle args=new Bundle(); + args.putString("account", item.parentFragment.getAccountID()); + args.putParcelable("status", Parcels.wrap(item.status)); + Nav.go(item.parentFragment.getActivity(), cls, args); + } + private int descriptionForId(int id){ if(id==R.id.reply_btn) return R.string.button_reply; diff --git a/mastodon/src/main/res/menu/boost_longtap.xml b/mastodon/src/main/res/menu/boost_longtap.xml new file mode 100644 index 000000000..0c52a78ed --- /dev/null +++ b/mastodon/src/main/res/menu/boost_longtap.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/menu/favorite_longtap.xml b/mastodon/src/main/res/menu/favorite_longtap.xml new file mode 100644 index 000000000..e76269d9c --- /dev/null +++ b/mastodon/src/main/res/menu/favorite_longtap.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index d5d798300..4ad2692bf 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -314,7 +314,7 @@ This server does not accept new registrations. Copied to clipboard Bookmark - Remove bookmark + Remove Bookmark Bookmarks Your favorites Welcome back @@ -751,4 +751,8 @@ Fewer algorithmic fanfares Only your followers Everyone mentioned in the post + View Boosts + View Favorites + Undo Boost + Undo Favorite \ No newline at end of file