diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index de73cdfc9..be4306131 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -40,7 +40,7 @@ public class GlobalUserPreferences{ public static boolean showAltIndicator; public static boolean showNoAltIndicator; public static boolean enablePreReleases; - public static boolean prefixRepliesWithRe; + public static PrefixRepliesMode prefixReplies; public static boolean bottomEncoding; public static boolean collapseLongPosts; public static boolean spectatorMode; @@ -112,7 +112,7 @@ public class GlobalUserPreferences{ showAltIndicator=prefs.getBoolean("showAltIndicator", true); showNoAltIndicator=prefs.getBoolean("showNoAltIndicator", true); enablePreReleases=prefs.getBoolean("enablePreReleases", false); - prefixRepliesWithRe=prefs.getBoolean("prefixRepliesWithRe", false); + prefixReplies=PrefixRepliesMode.valueOf(prefs.getString("prefixReplies", PrefixRepliesMode.NEVER.name())); bottomEncoding=prefs.getBoolean("bottomEncoding", false); collapseLongPosts=prefs.getBoolean("collapseLongPosts", true); spectatorMode=prefs.getBoolean("spectatorMode", false); @@ -132,6 +132,15 @@ public class GlobalUserPreferences{ allowRemoteLoading=prefs.getBoolean("allowRemoteLoading", true); autoRevealEqualSpoilers=AutoRevealMode.valueOf(prefs.getString("autoRevealEqualSpoilers", AutoRevealMode.THREADS.name())); + if (prefs.contains("prefixRepliesWithRe")) { + prefixReplies = prefs.getBoolean("prefixRepliesWithRe", false) + ? PrefixRepliesMode.TO_OTHERS : PrefixRepliesMode.NEVER; + prefs.edit() + .putString("prefixReplies", prefixReplies.name()) + .remove("prefixRepliesWithRe") + .apply(); + } + try { color=ColorPreference.valueOf(prefs.getString("color", ColorPreference.PINK.name())); } catch (IllegalArgumentException|ClassCastException ignored) { @@ -162,7 +171,7 @@ public class GlobalUserPreferences{ .putBoolean("showAltIndicator", showAltIndicator) .putBoolean("showNoAltIndicator", showNoAltIndicator) .putBoolean("enablePreReleases", enablePreReleases) - .putBoolean("prefixRepliesWithRe", prefixRepliesWithRe) + .putString("prefixReplies", prefixReplies.name()) .putBoolean("collapseLongPosts", collapseLongPosts) .putBoolean("spectatorMode", spectatorMode) .putBoolean("autoHideFab", autoHideFab) @@ -207,4 +216,10 @@ public class GlobalUserPreferences{ THREADS, DISCUSSIONS } + + public enum PrefixRepliesMode { + NEVER, + ALWAYS, + TO_OTHERS + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java b/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java index 372f39e02..c7da94a11 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java +++ b/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java @@ -1,5 +1,7 @@ package org.joinmastodon.android; +import static org.joinmastodon.android.GlobalUserPreferences.PrefixRepliesMode.*; + import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; @@ -295,7 +297,11 @@ public class PushNotificationReceiver extends BroadcastReceiver{ req.language = preferences.postingDefaultLanguage; req.visibility = preferences.postingDefaultVisibility; req.inReplyToId = notification.status.id; - if(!notification.status.spoilerText.isEmpty() && GlobalUserPreferences.prefixRepliesWithRe && !notification.status.spoilerText.startsWith("re: ")){ + + if (!notification.status.spoilerText.isEmpty() && + (GlobalUserPreferences.prefixReplies == ALWAYS + || (GlobalUserPreferences.prefixReplies == TO_OTHERS && !ownID.equals(notification.status.account.id))) + && !notification.status.spoilerText.startsWith("re: ")) { req.spoilerText = "re: " + notification.status.spoilerText; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 8ddaebbf8..e1c36732e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -1,5 +1,6 @@ package org.joinmastodon.android.fragments; +import static org.joinmastodon.android.GlobalUserPreferences.PrefixRepliesMode.*; import static org.joinmastodon.android.GlobalUserPreferences.recentLanguages; import static org.joinmastodon.android.api.requests.statuses.CreateStatus.DRAFTS_AFTER_INSTANT; import static org.joinmastodon.android.api.requests.statuses.CreateStatus.getDraftInstant; @@ -746,9 +747,11 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr if(!TextUtils.isEmpty(status.spoilerText)){ hasSpoiler=true; spoilerEdit.setVisibility(View.VISIBLE); - if(GlobalUserPreferences.prefixRepliesWithRe && !status.spoilerText.startsWith("re: ")){ + if ((GlobalUserPreferences.prefixReplies == ALWAYS + || (GlobalUserPreferences.prefixReplies == TO_OTHERS && !ownID.equals(status.account.id))) + && !status.spoilerText.startsWith("re: ")) { spoilerEdit.setText("re: " + status.spoilerText); - }else{ + } else { spoilerEdit.setText(status.spoilerText); } spoilerBtn.setSelected(true); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java index 07940bafa..42494db3b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -39,6 +39,7 @@ import org.joinmastodon.android.E; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.GlobalUserPreferences.AutoRevealMode; import org.joinmastodon.android.GlobalUserPreferences.ColorPreference; +import org.joinmastodon.android.GlobalUserPreferences.PrefixRepliesMode; import org.joinmastodon.android.MainActivity; import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; @@ -221,8 +222,17 @@ public class SettingsFragment extends MastodonToolbarFragment implements Provide GlobalUserPreferences.keepOnlyLatestNotification=i.checked; GlobalUserPreferences.save(); })); - items.add(new SwitchItem(R.string.sk_settings_prefix_reply_cw_with_re, R.drawable.ic_fluent_arrow_reply_24_regular, GlobalUserPreferences.prefixRepliesWithRe, i->{ - GlobalUserPreferences.prefixRepliesWithRe=i.checked; + items.add(new ButtonItem(R.string.sk_settings_prefix_reply_cw_with_re, R.drawable.ic_fluent_arrow_reply_24_regular, b->{ + PopupMenu popupMenu=new PopupMenu(getActivity(), b, Gravity.CENTER_HORIZONTAL); + popupMenu.inflate(R.menu.settings_prefix_reply_mode); + popupMenu.setOnMenuItemClickListener(i -> onPrefixRepliesClick(i, b)); + b.setOnTouchListener(popupMenu.getDragToOpenListener()); + b.setOnClickListener(v->popupMenu.show()); + b.setText(switch(GlobalUserPreferences.prefixReplies){ + case TO_OTHERS -> R.string.sk_settings_prefix_replies_to_others; + case ALWAYS -> R.string.sk_settings_prefix_replies_always; + default -> R.string.sk_settings_prefix_replies_never; + }); GlobalUserPreferences.save(); })); items.add(new SwitchItem(R.string.sk_settings_confirm_before_reblog, R.drawable.ic_fluent_checkmark_circle_24_regular, GlobalUserPreferences.confirmBeforeReblog, i->{ @@ -541,6 +551,22 @@ public class SettingsFragment extends MastodonToolbarFragment implements Provide return true; } + private boolean onPrefixRepliesClick(MenuItem item, Button btn) { + int id = item.getItemId(); + PrefixRepliesMode mode = PrefixRepliesMode.NEVER; + if (id == R.id.prefix_replies_always) mode = PrefixRepliesMode.ALWAYS; + else if (id == R.id.prefix_replies_to_others) mode = PrefixRepliesMode.TO_OTHERS; + GlobalUserPreferences.prefixReplies = mode; + + btn.setText(switch(GlobalUserPreferences.prefixReplies){ + case TO_OTHERS -> R.string.sk_settings_prefix_replies_to_others; + case ALWAYS -> R.string.sk_settings_prefix_replies_always; + default -> R.string.sk_settings_prefix_replies_never; + }); + + return true; + } + private boolean onAutoRevealSpoilerClick(MenuItem item, Button btn) { int id = item.getItemId(); diff --git a/mastodon/src/main/res/menu/settings_prefix_reply_mode.xml b/mastodon/src/main/res/menu/settings_prefix_reply_mode.xml new file mode 100644 index 000000000..5ecccbeee --- /dev/null +++ b/mastodon/src/main/res/menu/settings_prefix_reply_mode.xml @@ -0,0 +1,6 @@ + +
\ No newline at end of file diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 7aada80cc..9d7111204 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -260,7 +260,7 @@