diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java b/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java index e140d58ec..566bde320 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java @@ -32,7 +32,7 @@ public class M3AlertDialogBuilder extends AlertDialog.Builder{ View title=alert.findViewById(titleID); if(title!=null){ int pad=V.dp(24); - title.setPadding(pad, pad, pad, pad); + title.setPadding(pad, pad, pad, V.dp(18)); } } int titleDividerID=getContext().getResources().getIdentifier("titleDividerNoCustom", "id", "android"); 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 45962e587..0b18bd2f2 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 @@ -19,8 +19,6 @@ import android.widget.PopupMenu; import android.widget.TextView; import android.widget.Toast; -import androidx.recyclerview.widget.RecyclerView; - import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; @@ -139,6 +137,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ avatar.setOutlineProvider(roundCornersOutline); avatar.setClipToOutline(true); more.setOnClickListener(this::onMoreClick); + more.setOnLongClickListener((v) -> { openWithAccount(); return true; }); visibility.setOnClickListener(v->item.parentFragment.onVisibilityIconClick(this)); deleteNotification.setOnClickListener(v->UiUtils.confirmDeleteNotification(activity, item.parentFragment.getAccountID(), item.notification, ()->{ if (item.parentFragment instanceof NotificationsListFragment fragment) { @@ -191,8 +190,11 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ } }else if(id==R.id.delete){ UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{}); - }else if(id==R.id.pin || id==R.id.unpin){ - UiUtils.confirmPinPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, !item.status.pinned, s->{}); + }else if(id==R.id.pin || id==R.id.unpin) { + UiUtils.confirmPinPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, !item.status.pinned, s -> { + }); + }else if(id==R.id.open_with_account) { + openWithAccount(); }else if(id==R.id.mute){ UiUtils.confirmToggleMuteUser(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), account, relationship!=null && relationship.muting, r->{}); }else if(id==R.id.block){ @@ -231,6 +233,13 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ }); } + private void openWithAccount() { + UiUtils.pickAccount(item.parentFragment.getActivity(), (session, dialog) -> { + UiUtils.openURL(item.parentFragment.getActivity(), session.getID(), item.status.url); + return true; + }, R.string.sk_open_with_account); + } + @Override public void onBind(HeaderStatusDisplayItem item){ name.setText(item.parsedName); 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 413319737..b1741b24e 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 @@ -57,6 +57,7 @@ import org.joinmastodon.android.api.requests.search.GetSearchResults; import org.joinmastodon.android.api.requests.statuses.DeleteStatus; import org.joinmastodon.android.api.requests.statuses.GetStatusByID; import org.joinmastodon.android.api.requests.statuses.SetStatusPinned; +import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.StatusCountersUpdatedEvent; import org.joinmastodon.android.events.FollowRequestHandledEvent; @@ -97,6 +98,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; import androidx.annotation.AttrRes; +import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.browser.customtabs.CustomTabsIntent; @@ -832,4 +834,12 @@ public class UiUtils{ public static boolean isMIUI(){ return !TextUtils.isEmpty(getSystemProperty("ro.miui.ui.version.code")); } + + public static void pickAccount(Context context, BiPredicate pick, @StringRes int title) { + List sessions=AccountSessionManager.getInstance().getLoggedInAccounts(); + new M3AlertDialogBuilder(context) + .setItems(sessions.stream().map(as->"@"+as.self.username+"@"+as.domain).toArray(String[]::new), (d, which)->pick.test(sessions.get(which), d)) + .setTitle(title == 0 ? R.string.choose_account : title) + .show(); + } } diff --git a/mastodon/src/main/res/menu/post.xml b/mastodon/src/main/res/menu/post.xml index e0c21c1a6..c12cdc619 100644 --- a/mastodon/src/main/res/menu/post.xml +++ b/mastodon/src/main/res/menu/post.xml @@ -5,6 +5,7 @@ + diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index cdb69a967..469c7eeef 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -88,4 +88,5 @@ Post about this Hashtags you follow Copy link to post + Open with other account \ No newline at end of file