feat: Add haptic feedback on boost/favourite/bookmark
This commit is contained in:
parent
1810821983
commit
ede7305fe9
|
@ -52,6 +52,7 @@ public class GlobalUserPreferences{
|
|||
public static boolean doubleTapToSwipe;
|
||||
public static boolean compactReblogReplyLine;
|
||||
public static boolean confirmBeforeReblog;
|
||||
public static boolean hapticFeedback;
|
||||
public static boolean replyLineAboveHeader;
|
||||
public static boolean swapBookmarkWithBoostAction;
|
||||
public static boolean loadRemoteAccountFollowers;
|
||||
|
@ -139,6 +140,7 @@ public class GlobalUserPreferences{
|
|||
replyLineAboveHeader=prefs.getBoolean("replyLineAboveHeader", true);
|
||||
compactReblogReplyLine=prefs.getBoolean("compactReblogReplyLine", true);
|
||||
confirmBeforeReblog=prefs.getBoolean("confirmBeforeReblog", false);
|
||||
hapticFeedback=prefs.getBoolean("hapticFeedback", true);
|
||||
swapBookmarkWithBoostAction=prefs.getBoolean("swapBookmarkWithBoostAction", false);
|
||||
loadRemoteAccountFollowers=prefs.getBoolean("loadRemoteAccountFollowers", true);
|
||||
mentionRebloggerAutomatically=prefs.getBoolean("mentionRebloggerAutomatically", false);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.joinmastodon.android.fragments.settings;
|
||||
|
||||
import android.os.Build;
|
||||
import android.view.Gravity;
|
||||
import android.view.MenuItem;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -63,6 +64,10 @@ public class BehaviourFragment extends SettingsBaseFragment{
|
|||
GlobalUserPreferences.save();
|
||||
needAppRestart=true;
|
||||
}));
|
||||
items.add(new SwitchItem(R.string.mo_haptic_feedback, R.string.mo_setting_haptic_feedback, R.drawable.ic_fluent_phone_vibrate_24_filled, GlobalUserPreferences.hapticFeedback, i -> {
|
||||
GlobalUserPreferences.hapticFeedback = i.checked;
|
||||
GlobalUserPreferences.save();
|
||||
}, Build.VERSION.SDK_INT >= Build.VERSION_CODES.R));
|
||||
items.add(new SwitchItem(R.string.sk_settings_confirm_before_reblog, R.drawable.ic_fluent_checkmark_circle_24_regular, GlobalUserPreferences.confirmBeforeReblog, i->{
|
||||
GlobalUserPreferences.confirmBeforeReblog=i.checked;
|
||||
GlobalUserPreferences.save();
|
||||
|
|
|
@ -264,6 +264,15 @@ public abstract class SettingsBaseFragment extends MastodonToolbarFragment imple
|
|||
this.onChanged=onChanged;
|
||||
}
|
||||
|
||||
public SwitchItem(@StringRes int title, @StringRes int summary, @DrawableRes int icon, boolean checked, Consumer<SwitchItem> onChanged, boolean enabled){
|
||||
this.title=getString(title);
|
||||
this.summary=getString(summary);
|
||||
this.icon=icon;
|
||||
this.checked=checked;
|
||||
this.onChanged=onChanged;
|
||||
this.enabled=enabled;
|
||||
}
|
||||
|
||||
public SwitchItem(@StringRes int title, @DrawableRes int icon, boolean checked, Consumer<SwitchItem> onChanged, boolean enabled){
|
||||
this.title=getString(title);
|
||||
this.icon=icon;
|
||||
|
|
|
@ -5,7 +5,9 @@ import android.app.Dialog;
|
|||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
@ -244,6 +246,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||
if(status == null)
|
||||
return;
|
||||
boost.setSelected(!status.reblogged);
|
||||
vibrateForAction(boost, !status.reblogged);
|
||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(status, !status.reblogged, null, r->boostConsumer(v, r));
|
||||
}
|
||||
);
|
||||
|
@ -361,6 +364,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||
if(status == null)
|
||||
return;
|
||||
favorite.setSelected(!status.favourited);
|
||||
vibrateForAction(favorite, !status.favourited);
|
||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(status, !status.favourited, r->{
|
||||
if (status.favourited) {
|
||||
v.startAnimation(GlobalUserPreferences.reduceMotion ? opacityIn : animSet);
|
||||
|
@ -406,6 +410,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||
if(status == null)
|
||||
return;
|
||||
bookmark.setSelected(!status.bookmarked);
|
||||
vibrateForAction(bookmark, !status.bookmarked);
|
||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(status, !status.bookmarked, r->{
|
||||
v.startAnimation(opacityIn);
|
||||
});
|
||||
|
@ -459,5 +464,11 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||
return R.string.button_share;
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static void vibrateForAction(View view, boolean isPositive) {
|
||||
if (!GlobalUserPreferences.hapticFeedback) return;
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) return;
|
||||
view.performHapticFeedback(isPositive ? HapticFeedbackConstants.CONFIRM : HapticFeedbackConstants.REJECT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M15.75,2A2.25,2.25 0,0 1,18 4.25v15.5A2.25,2.25 0,0 1,15.75 22h-7.5A2.25,2.25 0,0 1,6 19.75L6,4.25A2.25,2.25 0,0 1,8.25 2h7.5ZM13.25,18h-2.5a0.75,0.75 0,0 0,-0.102 1.493l0.102,0.007h2.5a0.75,0.75 0,1 0,0 -1.5ZM20.129,7.572a1,1 0,0 1,1.25 0.45l0.05,0.107 0.582,1.456a3,3 0,0 1,-0.266 2.743l-0.12,0.171 -0.15,0.202a1,1 0,0 0,-0.17 0.848l0.041,0.123 0.582,1.457a1,1 0,0 1,-1.807 0.848l-0.05,-0.106 -0.582,-1.456a3,3 0,0 1,0.266 -2.743l0.12,-0.171 0.15,-0.202a1,1 0,0 0,0.17 -0.848l-0.04,-0.123 -0.583,-1.457a1,1 0,0 1,0.557 -1.3ZM2.629,7.572a1,1 0,0 1,1.25 0.45l0.05,0.107 0.582,1.456a3,3 0,0 1,-0.266 2.743l-0.12,0.171 -0.15,0.202a1,1 0,0 0,-0.17 0.848l0.041,0.123 0.583,1.457a1,1 0,0 1,-1.808 0.848l-0.05,-0.106 -0.582,-1.456a3,3 0,0 1,0.266 -2.743l0.12,-0.171 0.15,-0.202a1,1 0,0 0,0.17 -0.848l-0.04,-0.123 -0.583,-1.457a1,1 0,0 1,0.557 -1.3Z"
|
||||
android:fillColor="#212121"/>
|
||||
</vector>
|
|
@ -53,6 +53,7 @@
|
|||
|
||||
<string name="mo_share_open_url">Open in App</string>
|
||||
<string name="mo_double_tap_to_swipe_between_tabs">Double tap to swipe between tabs</string>
|
||||
<string name="mo_haptic_feedback">Haptic feedback</string>
|
||||
<string name="mo_swap_bookmark_with_reblog">Swap bookmark with reblog action</string>
|
||||
<string name="mo_download_latest_nightly_release">Download latest nightly release</string>
|
||||
<string name="mo_load_remote_followers">Load remote profile follows and followers</string>
|
||||
|
@ -83,6 +84,7 @@
|
|||
<string name="mo_setting_default_reply_privacy_summary">Replies will be opted out of discovery features</string>
|
||||
<string name="mo_setting_interaction_count_summary">Show how many people interacted with a post in the timeline</string>
|
||||
<string name="mo_setting_disable_swipe_summary">Swipe to change viewed timeline</string>
|
||||
<string name="mo_setting_haptic_feedback">Vibrate on boost/favourite/bookmark</string>
|
||||
<string name="mo_swap_bookmark_with_reblog_summary">Bookmark or reblog posts from the notification</string>
|
||||
|
||||
<!-- Settings -->
|
||||
|
|
Loading…
Reference in New Issue