diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index bf2f77d4b..05245ab05 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -27,6 +27,7 @@ public class GlobalUserPreferences{ public static boolean disableSwipe; public static boolean voteButtonForSingleChoice; public static boolean enableDeleteNotifications; + public static String publishButtonText; public static ThemePreference theme; public static ColorPreference color; @@ -57,6 +58,7 @@ public class GlobalUserPreferences{ disableSwipe=prefs.getBoolean("disableSwipe", false); voteButtonForSingleChoice=prefs.getBoolean("voteButtonForSingleChoice", true); enableDeleteNotifications=prefs.getBoolean("enableDeleteNotifications", false); + publishButtonText=prefs.getString("publishButtonText", ""); theme=ThemePreference.values()[prefs.getInt("theme", 0)]; recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>()); @@ -82,6 +84,7 @@ public class GlobalUserPreferences{ .putBoolean("disableMarquee", disableMarquee) .putBoolean("disableSwipe", disableSwipe) .putBoolean("enableDeleteNotifications", enableDeleteNotifications) + .putString("publishButtonText", publishButtonText) .putInt("theme", theme.ordinal()) .putString("color", color.name()) .putString("recentLanguages", gson.toJson(recentLanguages)) 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 6d4cc88d8..2e205f45b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -622,7 +622,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){ publishButton=new Button(getActivity()); - publishButton.setText(editingStatus==null || redraftStatus ? R.string.publish : R.string.save); + int publishText = editingStatus==null || redraftStatus ? R.string.publish : R.string.save; + if (publishText == R.string.publish && !GlobalUserPreferences.publishButtonText.isEmpty()) { + publishButton.setText(GlobalUserPreferences.publishButtonText); + } else { + publishButton.setText(publishText); + } publishButton.setOnClickListener(this::onPublishClick); LinearLayout wrap=new LinearLayout(getActivity()); wrap.setOrientation(LinearLayout.HORIZONTAL); 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 e6f10dd99..c4df5bd06 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -18,6 +18,8 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.animation.LinearInterpolator; import android.widget.Button; +import android.widget.EditText; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.PopupMenu; @@ -103,6 +105,12 @@ public class SettingsFragment extends MastodonToolbarFragment{ GlobalUserPreferences.save(); })); items.add(new ButtonItem(R.string.sk_settings_color_palette, R.drawable.ic_fluent_color_24_regular, b->{ + PopupMenu popupMenu=new PopupMenu(getActivity(), b, Gravity.CENTER_HORIZONTAL); + popupMenu.inflate(R.menu.color_palettes); + popupMenu.getMenu().findItem(R.id.m3_color).setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S); + popupMenu.setOnMenuItemClickListener(SettingsFragment.this::onColorPreferenceClick); + b.setOnTouchListener(popupMenu.getDragToOpenListener()); + b.setOnClickListener(v->popupMenu.show()); b.setText(switch(GlobalUserPreferences.color){ case MATERIAL3 -> R.string.sk_color_palette_material3; case PINK -> R.string.sk_color_palette_pink; @@ -114,6 +122,33 @@ public class SettingsFragment extends MastodonToolbarFragment{ case YELLOW -> R.string.sk_color_palette_yellow; }); })); + items.add(new ButtonItem(R.string.sk_settings_publish_button_text, R.drawable.ic_fluent_send_24_regular, b->{ + updatePublishText(b); + + b.setOnClickListener(l->{ + FrameLayout inputWrap = new FrameLayout(getContext()); + EditText input = new EditText(getContext()); + input.setHint(R.string.publish); + input.setText(GlobalUserPreferences.publishButtonText.trim()); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(V.dp(16), V.dp(4), V.dp(16), V.dp(16)); + input.setLayoutParams(params); + inputWrap.addView(input); + new M3AlertDialogBuilder(getContext()).setTitle(R.string.sk_settings_publish_button_text_title).setView(inputWrap) + .setPositiveButton(R.string.save, (d, which) -> { + GlobalUserPreferences.publishButtonText = input.getText().toString().trim(); + GlobalUserPreferences.save(); + updatePublishText(b); + }) + .setNeutralButton(R.string.clear, (d, which) -> { + GlobalUserPreferences.publishButtonText = ""; + GlobalUserPreferences.save(); + updatePublishText(b); + }) + .setNegativeButton(R.string.cancel, (d, which) -> {}) + .show(); + }); + })); items.add(new HeaderItem(R.string.settings_behavior)); items.add(new SwitchItem(R.string.sk_settings_show_federated_timeline, R.drawable.ic_fluent_earth_24_regular, GlobalUserPreferences.showFederatedTimeline, i->{ @@ -200,6 +235,11 @@ public class SettingsFragment extends MastodonToolbarFragment{ items.add(new FooterItem(getString(R.string.sk_settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE))); } + private void updatePublishText(Button btn) { + if (GlobalUserPreferences.publishButtonText.isBlank()) btn.setText(R.string.publish); + else btn.setText(GlobalUserPreferences.publishButtonText); + } + @Override public void onAttach(Activity activity){ super.onAttach(activity); @@ -742,7 +782,6 @@ public class SettingsFragment extends MastodonToolbarFragment{ } private class ButtonViewHolder extends BindableViewHolder{ private final Button button; - private final PopupMenu popupMenu; private final ImageView icon; private final TextView text; @@ -752,12 +791,6 @@ public class SettingsFragment extends MastodonToolbarFragment{ text=findViewById(R.id.text); icon=findViewById(R.id.icon); button=findViewById(R.id.button); - popupMenu=new PopupMenu(getActivity(), button, Gravity.CENTER_HORIZONTAL); - popupMenu.inflate(R.menu.color_palettes); - popupMenu.getMenu().findItem(R.id.m3_color).setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S); - popupMenu.setOnMenuItemClickListener(SettingsFragment.this::onColorPreferenceClick); - button.setOnTouchListener(popupMenu.getDragToOpenListener()); - button.setOnClickListener(v->popupMenu.show()); } @Override diff --git a/mastodon/src/main/res/drawable/ic_fluent_send_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_send_24_regular.xml new file mode 100644 index 000000000..c5a542eaa --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_send_24_regular.xml @@ -0,0 +1,3 @@ + + + diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 12276107e..fc5d07254 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -77,4 +77,6 @@ Delete all Are you sure you want to delete this notification? Enable deleting notifications + Publish button text + Customize Publish button text