From f70abbbb73ca5bf94b4cf3d95f27004b7963dfd9 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Fri, 5 Jul 2024 17:19:42 +0200 Subject: [PATCH] feat: use AccountSwitcher for open with other account --- .../android/fragments/ProfileFragment.java | 19 ++++----------- .../displayitems/HeaderStatusDisplayItem.java | 15 ++++-------- .../android/ui/utils/UiUtils.java | 23 ------------------- mastodon/src/main/res/menu/post.xml | 4 +--- mastodon/src/main/res/menu/profile.xml | 4 +--- 5 files changed, 11 insertions(+), 54 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 2145399d2..e404f241a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -817,15 +817,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.edit_note); } boolean hasMultipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1; - MenuItem openWithAccounts = menu.findItem(R.id.open_with_account); - openWithAccounts.setVisible(hasMultipleAccounts); - SubMenu accountsMenu=openWithAccounts.getSubMenu(); - if(hasMultipleAccounts){ - accountsMenu.clear(); - UiUtils.populateAccountsMenu(accountID, accountsMenu, s-> UiUtils.openURL( - getActivity(), s.getID(), account.url, false - )); - } + menu.findItem(R.id.open_with_account).setVisible(hasMultipleAccounts); if(isOwnProfile) { if (isInstancePixelfed()) menu.findItem(R.id.scheduled).setVisible(false); @@ -962,11 +954,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList .show(); } invalidateOptionsMenu(); - }else if(id==R.id.manage_user_lists){ - Bundle args=new Bundle(); - args.putString("account", accountID); - args.putParcelable("targetAccount", Parcels.wrap(account)); - Nav.go(getActivity(), AddAccountToListsFragment.class, args); + }else if(id==R.id.open_with_account){ + UiUtils.pickAccount(getActivity(), accountID, R.string.sk_open_with_account, R.drawable.ic_fluent_person_swap_24_regular, session ->UiUtils.openURL( + getActivity(), session.getID(), account.url, false + ), null); } return true; } 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 7e05968ba..6f1a3b475 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 @@ -290,6 +290,10 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ Nav.go(item.parentFragment.getActivity(), ListsFragment.class, args); }else if(id==R.id.share){ UiUtils.openSystemShareSheet(activity, item.status); + }else if(id==R.id.open_with_account){ + UiUtils.pickAccount(item.parentFragment.getActivity(), item.accountID, R.string.sk_open_with_account, R.drawable.ic_fluent_person_swap_24_regular, session ->UiUtils.openURL( + item.parentFragment.getActivity(), session.getID(), item.status.url, false + ), null); } return true; }); @@ -489,17 +493,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ Account account=item.user; Menu menu=optionsMenu.getMenu(); - MenuItem openWithAccounts = menu.findItem(R.id.open_with_account); - SubMenu accountsMenu = openWithAccounts != null ? openWithAccounts.getSubMenu() : null; - if (hasMultipleAccounts && accountsMenu != null) { - openWithAccounts.setVisible(true); - accountsMenu.clear(); - UiUtils.populateAccountsMenu(item.accountID, accountsMenu, s-> UiUtils.openURL( - item.parentFragment.getActivity(), s.getID(), item.status.url, false - )); - } else if (openWithAccounts != null) { - openWithAccounts.setVisible(false); - } String username = account.getShortUsername(); boolean isOwnPost=AccountSessionManager.getInstance().isSelf(item.parentFragment.getAccountID(), account); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index c8473bf60..771b86a33 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -13,7 +13,6 @@ import android.app.ProgressDialog; import android.content.ActivityNotFoundException; import android.content.ClipData; import android.content.ClipboardManager; -import android.content.ClipData; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -38,8 +37,6 @@ import android.os.SystemClock; import android.os.ext.SdkExtensions; import android.provider.MediaStore; import android.provider.OpenableColumns; -import android.system.ErrnoException; -import android.system.Os; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextUtils; @@ -51,13 +48,10 @@ import android.transition.Fade; import android.transition.TransitionManager; import android.transition.TransitionSet; import android.util.Log; -import android.util.Log; import android.util.Pair; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; -import android.view.Gravity; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; @@ -67,7 +61,6 @@ import android.view.ViewPropertyAnimator; import android.view.WindowInsets; import android.webkit.MimeTypeMap; import android.widget.Button; -import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupMenu; @@ -78,10 +71,8 @@ import android.widget.Toast; import org.joinmastodon.android.E; import org.joinmastodon.android.FileProvider; import org.joinmastodon.android.GlobalUserPreferences; -import org.joinmastodon.android.MainActivity; import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; -import org.joinmastodon.android.api.CacheController; import org.joinmastodon.android.api.MastodonAPIRequest; import org.joinmastodon.android.api.MastodonErrorResponse; import org.joinmastodon.android.api.StatusInteractionController; @@ -95,7 +86,6 @@ import org.joinmastodon.android.api.requests.accounts.RejectFollowRequest; import org.joinmastodon.android.api.requests.instance.GetInstance; import org.joinmastodon.android.api.requests.lists.DeleteList; import org.joinmastodon.android.api.requests.notifications.DismissNotification; -import org.joinmastodon.android.api.requests.search.GetSearchResults; import org.joinmastodon.android.api.requests.statuses.CreateStatus; import org.joinmastodon.android.api.requests.statuses.DeleteStatus; import org.joinmastodon.android.api.requests.statuses.GetStatusByID; @@ -126,7 +116,6 @@ import org.joinmastodon.android.model.Hashtag; import org.joinmastodon.android.model.Relationship; import org.joinmastodon.android.model.SearchResults; import org.joinmastodon.android.model.ScheduledStatus; -import org.joinmastodon.android.model.SearchResults; import org.joinmastodon.android.model.Searchable; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.ui.M3AlertDialogBuilder; @@ -160,7 +149,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; -import java.util.Objects; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -1656,17 +1644,6 @@ public class UiUtils { return intent; } - public static void populateAccountsMenu(String excludeAccountID, Menu menu, Consumer onClick) { - List sessions=AccountSessionManager.getInstance().getLoggedInAccounts(); - sessions.stream().filter(s -> !s.getID().equals(excludeAccountID)).forEach(s -> { - String username = "@"+s.self.username+"@"+s.domain; - menu.add(username).setOnMenuItemClickListener((c) -> { - onClick.accept(s); - return true; - }); - }); - } - public static void showFragmentForNotification(Context context, Notification n, String accountID, Bundle extras) { if (extras == null) extras = new Bundle(); extras.putString("account", accountID); diff --git a/mastodon/src/main/res/menu/post.xml b/mastodon/src/main/res/menu/post.xml index ed9c25300..1beb3d464 100644 --- a/mastodon/src/main/res/menu/post.xml +++ b/mastodon/src/main/res/menu/post.xml @@ -23,8 +23,6 @@ - - - + \ No newline at end of file diff --git a/mastodon/src/main/res/menu/profile.xml b/mastodon/src/main/res/menu/profile.xml index 7a5083d2a..043e96312 100644 --- a/mastodon/src/main/res/menu/profile.xml +++ b/mastodon/src/main/res/menu/profile.xml @@ -15,8 +15,6 @@ - - - + \ No newline at end of file