diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index cebb4ab61..8110aa000 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -29,8 +29,10 @@ public class GlobalUserPreferences{ public static boolean disableDividers; public static boolean voteButtonForSingleChoice; public static boolean showUniformPushNoticationIcons; - public static boolean relocatePublishButton; public static boolean enableDeleteNotifications; + public static boolean relocatePublishButton; + public static boolean reduceMotion; + public static String publishButtonText; public static ThemePreference theme; public static ColorPreference color; @@ -96,6 +98,8 @@ public class GlobalUserPreferences{ .putBoolean("relocatePublishButton", relocatePublishButton) .putBoolean("showUniformPushNotificationIcons", showUniformPushNoticationIcons) .putBoolean("enableDeleteNotifications", enableDeleteNotifications) + .putBoolean("reduceMotion", reduceMotion) + .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 98579bbaa..d37edec17 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -574,9 +574,11 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr scrollView.post(() -> { int bottom = scrollView.getChildAt(0).getBottom(); int delta = bottom - (scrollView.getScrollY() + scrollView.getHeight()); - int space = Math.min(V.dp(150), delta); + int space = GlobalUserPreferences.reduceMotion ? 0 : Math.min(V.dp(150), delta); scrollView.scrollBy(0, delta - space); - scrollView.postDelayed(() -> scrollView.smoothScrollBy(0, space), 150); + if (!GlobalUserPreferences.reduceMotion) { + scrollView.postDelayed(() -> scrollView.smoothScrollBy(0, space), 150); + } }); } } 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 cedc401b8..78cfec4a5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -93,6 +93,7 @@ public class SettingsFragment extends MastodonToolbarFragment{ accountID=getArguments().getString("account"); AccountSession session=AccountSessionManager.getInstance().getAccount(accountID); Instance instance = AccountSessionManager.getInstance().getInstanceInfo(session.domain); + String instanceName = UiUtils.getInstanceName(accountID); if(GithubSelfUpdater.needSelfUpdating()){ GithubSelfUpdater updater=GithubSelfUpdater.getInstance(); @@ -129,6 +130,41 @@ public class SettingsFragment extends MastodonToolbarFragment{ }); })); items.add(new SwitchItem(R.string.sk_settings_uniform_icon_for_notifications, R.drawable.ic_ntf_logo, GlobalUserPreferences.showUniformPushNoticationIcons, this::onNotificationStyleChanged)); + 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 SwitchItem(R.string.sk_settings_uniform_icon_for_notifications, R.drawable.ic_ntf_logo, GlobalUserPreferences.uniformNotificationIcon, i->{ + GlobalUserPreferences.uniformNotificationIcon=i.checked; + GlobalUserPreferences.save(); + })); + items.add(new SwitchItem(R.string.sk_settings_reduce_motion, R.drawable.ic_fluent_star_emphasis_24_regular, GlobalUserPreferences.reduceMotion, i->{ + GlobalUserPreferences.reduceMotion=i.checked; + GlobalUserPreferences.save(); + })); 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->{ @@ -171,6 +207,7 @@ public class SettingsFragment extends MastodonToolbarFragment{ items.add(new SwitchItem(R.string.sk_relocate_publish_button, R.drawable.ic_fluent_arrow_autofit_down_24_regular, GlobalUserPreferences.relocatePublishButton, i->{ GlobalUserPreferences.relocatePublishButton=i.checked; GlobalUserPreferences.save(); + needAppRestart=true; })); // items.add(new SwitchItem(R.string.sk_settings_hide_translate_in_timeline, R.drawable.ic_fluent_translate_24_regular, GlobalUserPreferences.translateButtonOpenedOnly, i->{ // GlobalUserPreferences.translateButtonOpenedOnly=i.checked; @@ -201,12 +238,13 @@ public class SettingsFragment extends MastodonToolbarFragment{ items.add(new SwitchItem(R.string.notify_mention, R.drawable.ic_fluent_mention_24_regular, pushSubscription.alerts.mention, i->onNotificationsChanged(PushNotification.Type.MENTION, i.checked))); items.add(new SwitchItem(R.string.sk_notify_posts, R.drawable.ic_fluent_alert_24_regular, pushSubscription.alerts.status, i->onNotificationsChanged(PushNotification.Type.STATUS, i.checked))); - items.add(new HeaderItem(R.string.settings_boring)); - items.add(new TextItem(R.string.settings_account, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/auth/edit"))); - items.add(new TextItem(R.string.settings_tos, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/terms"))); - items.add(new TextItem(R.string.settings_privacy_policy, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/terms"))); + items.add(new HeaderItem(R.string.settings_account)); + items.add(new TextItem(R.string.sk_settings_profile, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/settings/profile"), R.drawable.ic_fluent_open_24_regular)); + items.add(new TextItem(R.string.sk_settings_posting, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/settings/preferences/other"), R.drawable.ic_fluent_open_24_regular)); + items.add(new TextItem(R.string.sk_settings_filters, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/filters"), R.drawable.ic_fluent_open_24_regular)); + items.add(new TextItem(R.string.sk_settings_auth, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/auth/edit"), R.drawable.ic_fluent_open_24_regular)); - items.add(new HeaderItem(instance != null ? instance.title : session.domain)); + items.add(new HeaderItem(instanceName)); items.add(new TextItem(R.string.sk_settings_rules, ()->{ Bundle args=new Bundle(); args.putParcelable("instance", Parcels.wrap(instance)); @@ -240,6 +278,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); diff --git a/mastodon/src/main/res/drawable/ic_fluent_star_emphasis_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_star_emphasis_24_regular.xml new file mode 100644 index 000000000..dca85947f --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_star_emphasis_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 73a618949..e7b84aa53 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -129,4 +129,5 @@ Schedule or draft Don’t schedule Don’t draft + Reduce motion in animations \ No newline at end of file