Selecting swipe actions is available. Fix issues in swipe aciton. Add two icons for advanced and about in settings.

This commit is contained in:
Alex Ning 2020-11-10 15:35:22 +08:00
parent 4de6887423
commit bbfcce2e90
13 changed files with 207 additions and 93 deletions

View File

@ -1,6 +1,5 @@
package ml.docilealligator.infinityforreddit.Activity; package ml.docilealligator.infinityforreddit.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
@ -9,7 +8,6 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Vibrator;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.HapticFeedbackConstants; import android.view.HapticFeedbackConstants;
import android.view.KeyEvent; import android.view.KeyEvent;
@ -229,11 +227,13 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
private SlidrInterface mSlidrInterface; private SlidrInterface mSlidrInterface;
private Drawable mSavedIcon; private Drawable mSavedIcon;
private Drawable mUnsavedIcon; private Drawable mUnsavedIcon;
private ColorDrawable backgroundLeft; private ColorDrawable backgroundSwipeRight;
private ColorDrawable backgroundRight; private ColorDrawable backgroundSwipeLeft;
private Drawable drawableLeft; private Drawable drawableSwipeRight;
private Drawable drawableRight; private Drawable drawableSwipeLeft;
private float swipeActionThreshold = 0.3f; private int swipeLeftAction;
private int swipeRightAction;
private float swipeActionThreshold;
private ItemTouchHelper touchHelper; private ItemTouchHelper touchHelper;
@Override @Override
@ -392,11 +392,10 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
boolean enableSwipeAction = mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SWIPE_ACTION, false); boolean enableSwipeAction = mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SWIPE_ACTION, false);
boolean vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true); boolean vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true);
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); swipeActionThreshold = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_ACTION_THRESHOLD, "0.3"));
backgroundLeft = new ColorDrawable(mCustomThemeWrapper.getDownvoted()); swipeRightAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_RIGHT_ACTION, "1"));
backgroundRight = new ColorDrawable(mCustomThemeWrapper.getUpvoted()); swipeLeftAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_LEFT_ACTION, "0"));
drawableLeft = ResourcesCompat.getDrawable(resources, R.drawable.ic_arrow_downward_black_24dp, null); initializeSwipeActionDrawable();
drawableRight = ResourcesCompat.getDrawable(resources, R.drawable.ic_arrow_upward_black_24dp, null);
touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
boolean exceedThreshold = false; boolean exceedThreshold = false;
@ -426,7 +425,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
touchHelper.attachToRecyclerView(null); touchHelper.attachToRecyclerView(null);
touchHelper.attachToRecyclerView(mRecyclerView); touchHelper.attachToRecyclerView(mRecyclerView);
if (mAdapter != null) { if (mAdapter != null) {
mAdapter.onItemSwipe(viewHolder, direction); mAdapter.onItemSwipe(viewHolder, direction, swipeLeftAction, swipeRightAction);
} }
} }
} }
@ -441,39 +440,43 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) {
if (!exceedThreshold) { if (!exceedThreshold) {
exceedThreshold = true; exceedThreshold = true;
viewHolder.itemView.setHapticFeedbackEnabled(true); if (vibrateWhenActionTriggered) {
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); viewHolder.itemView.setHapticFeedbackEnabled(true);
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
} }
backgroundLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); backgroundSwipeRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom());
} else { } else {
exceedThreshold = false; exceedThreshold = false;
backgroundLeft.setBounds(0, 0, 0, 0); backgroundSwipeRight.setBounds(0, 0, 0, 0);
} }
drawableLeft.setBounds(itemView.getLeft() + ((int) dX) - horizontalOffset - drawableLeft.getIntrinsicWidth(), drawableSwipeRight.setBounds(itemView.getLeft() + ((int) dX) - horizontalOffset - drawableSwipeRight.getIntrinsicWidth(),
(itemView.getBottom() + itemView.getTop() - drawableLeft.getIntrinsicHeight()) / 2, (itemView.getBottom() + itemView.getTop() - drawableSwipeRight.getIntrinsicHeight()) / 2,
itemView.getLeft() + ((int) dX) - horizontalOffset, itemView.getLeft() + ((int) dX) - horizontalOffset,
(itemView.getBottom() + itemView.getTop() + drawableLeft.getIntrinsicHeight()) / 2); (itemView.getBottom() + itemView.getTop() + drawableSwipeRight.getIntrinsicHeight()) / 2);
backgroundLeft.draw(c); backgroundSwipeRight.draw(c);
drawableLeft.draw(c); drawableSwipeRight.draw(c);
} else if (dX < 0) { } else if (dX < 0) {
if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) {
if (!exceedThreshold) { if (!exceedThreshold) {
exceedThreshold = true; exceedThreshold = true;
viewHolder.itemView.setHapticFeedbackEnabled(true); if (vibrateWhenActionTriggered) {
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); viewHolder.itemView.setHapticFeedbackEnabled(true);
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
} }
backgroundRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); backgroundSwipeLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom());
} else { } else {
exceedThreshold = false; exceedThreshold = false;
backgroundRight.setBounds(0, 0, 0, 0); backgroundSwipeLeft.setBounds(0, 0, 0, 0);
} }
drawableRight.setBounds(itemView.getRight() + ((int) dX) + horizontalOffset, drawableSwipeLeft.setBounds(itemView.getRight() + ((int) dX) + horizontalOffset,
(itemView.getBottom() + itemView.getTop() - drawableRight.getIntrinsicHeight()) / 2, (itemView.getBottom() + itemView.getTop() - drawableSwipeLeft.getIntrinsicHeight()) / 2,
itemView.getRight() + ((int) dX) + horizontalOffset + drawableRight.getIntrinsicWidth(), itemView.getRight() + ((int) dX) + horizontalOffset + drawableSwipeLeft.getIntrinsicWidth(),
(itemView.getBottom() + itemView.getTop() + drawableRight.getIntrinsicHeight()) / 2); (itemView.getBottom() + itemView.getTop() + drawableSwipeLeft.getIntrinsicHeight()) / 2);
backgroundRight.draw(c); backgroundSwipeLeft.draw(c);
drawableRight.draw(c); drawableSwipeLeft.draw(c);
} }
} }
@ -534,6 +537,24 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
mPostCommentSortTypeBottomSheetFragment = new PostCommentSortTypeBottomSheetFragment(); mPostCommentSortTypeBottomSheetFragment = new PostCommentSortTypeBottomSheetFragment();
} }
private void initializeSwipeActionDrawable() {
if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
backgroundSwipeRight = new ColorDrawable(mCustomThemeWrapper.getDownvoted());
drawableSwipeRight = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_arrow_downward_black_24dp, null);
} else {
backgroundSwipeRight = new ColorDrawable(mCustomThemeWrapper.getUpvoted());
drawableSwipeRight = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_arrow_upward_black_24dp, null);
}
if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
backgroundSwipeLeft = new ColorDrawable(mCustomThemeWrapper.getUpvoted());
drawableSwipeLeft = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_arrow_upward_black_24dp, null);
} else {
backgroundSwipeLeft = new ColorDrawable(mCustomThemeWrapper.getDownvoted());
drawableSwipeLeft = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_arrow_downward_black_24dp, null);
}
}
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();

View File

@ -1883,18 +1883,34 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
mDataSavingMode = dataSavingMode; mDataSavingMode = dataSavingMode;
} }
public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction) { public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction, int swipeLeftAction, int swipeRightAction) {
if (viewHolder instanceof PostDetailBaseViewHolder) { if (viewHolder instanceof PostDetailBaseViewHolder) {
if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) { if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) {
((PostDetailBaseViewHolder) viewHolder).mUpvoteButton.performClick(); if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
((PostDetailBaseViewHolder) viewHolder).mUpvoteButton.performClick();
} else if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
((PostDetailBaseViewHolder) viewHolder).mDownvoteButton.performClick();
}
} else { } else {
((PostDetailBaseViewHolder) viewHolder).mDownvoteButton.performClick(); if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
((PostDetailBaseViewHolder) viewHolder).mUpvoteButton.performClick();
} else if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
((PostDetailBaseViewHolder) viewHolder).mDownvoteButton.performClick();
}
} }
} else if (viewHolder instanceof CommentViewHolder) { } else if (viewHolder instanceof CommentViewHolder) {
if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) { if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) {
((CommentViewHolder) viewHolder).upvoteButton.performClick(); if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
((CommentViewHolder) viewHolder).upvoteButton.performClick();
} else if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
((CommentViewHolder) viewHolder).downvoteButton.performClick();
}
} else { } else {
((CommentViewHolder) viewHolder).downvoteButton.performClick(); if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
((CommentViewHolder) viewHolder).upvoteButton.performClick();
} else if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
((CommentViewHolder) viewHolder).downvoteButton.performClick();
}
} }
} }
} }

View File

@ -353,12 +353,20 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
} }
} }
public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction) { public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction, int swipeLeftAction, int swipeRightAction) {
if (viewHolder instanceof CommentViewHolder) { if (viewHolder instanceof CommentViewHolder) {
if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) { if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) {
((CommentViewHolder) viewHolder).upvoteButton.performClick(); if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
((CommentViewHolder) viewHolder).upvoteButton.performClick();
} else if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
((CommentViewHolder) viewHolder).downvoteButton.performClick();
}
} else { } else {
((CommentViewHolder) viewHolder).downvoteButton.performClick(); if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
((CommentViewHolder) viewHolder).upvoteButton.performClick();
} else if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
((CommentViewHolder) viewHolder).downvoteButton.performClick();
}
} }
} }
} }

View File

@ -10,7 +10,6 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Vibrator;
import android.view.HapticFeedbackConstants; import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -105,11 +104,13 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
private LinearLayoutManager mLinearLayoutManager; private LinearLayoutManager mLinearLayoutManager;
private CommentsListingRecyclerViewAdapter mAdapter; private CommentsListingRecyclerViewAdapter mAdapter;
private SortType sortType; private SortType sortType;
private ColorDrawable backgroundLeft; private ColorDrawable backgroundSwipeRight;
private ColorDrawable backgroundRight; private ColorDrawable backgroundSwipeLeft;
private Drawable drawableLeft; private Drawable drawableSwipeRight;
private Drawable drawableRight; private Drawable drawableSwipeLeft;
private float swipeActionThreshold = 0.3f; private int swipeLeftAction;
private int swipeRightAction;
private float swipeActionThreshold;
private ItemTouchHelper touchHelper; private ItemTouchHelper touchHelper;
public CommentsListingFragment() { public CommentsListingFragment() {
@ -144,11 +145,10 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
boolean enableSwipeAction = mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SWIPE_ACTION, false); boolean enableSwipeAction = mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SWIPE_ACTION, false);
boolean vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true); boolean vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true);
Vibrator v = (Vibrator) mActivity.getSystemService(Context.VIBRATOR_SERVICE); swipeActionThreshold = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_ACTION_THRESHOLD, "0.3"));
backgroundLeft = new ColorDrawable(customThemeWrapper.getDownvoted()); swipeRightAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_RIGHT_ACTION, "1"));
backgroundRight = new ColorDrawable(customThemeWrapper.getUpvoted()); swipeLeftAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_LEFT_ACTION, "0"));
drawableLeft = ResourcesCompat.getDrawable(resources, R.drawable.ic_arrow_downward_black_24dp, null); initializeSwipeActionDrawable();
drawableRight = ResourcesCompat.getDrawable(resources, R.drawable.ic_arrow_upward_black_24dp, null);
touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
boolean exceedThreshold = false; boolean exceedThreshold = false;
@ -177,7 +177,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
touchHelper.attachToRecyclerView(null); touchHelper.attachToRecyclerView(null);
touchHelper.attachToRecyclerView(mCommentRecyclerView); touchHelper.attachToRecyclerView(mCommentRecyclerView);
if (mAdapter != null) { if (mAdapter != null) {
mAdapter.onItemSwipe(viewHolder, direction); mAdapter.onItemSwipe(viewHolder, direction, swipeLeftAction, swipeRightAction);
} }
} }
} }
@ -192,39 +192,43 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) {
if (!exceedThreshold) { if (!exceedThreshold) {
exceedThreshold = true; exceedThreshold = true;
viewHolder.itemView.setHapticFeedbackEnabled(true); if (vibrateWhenActionTriggered) {
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); viewHolder.itemView.setHapticFeedbackEnabled(true);
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
} }
backgroundLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); backgroundSwipeRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom());
} else { } else {
exceedThreshold = false; exceedThreshold = false;
backgroundLeft.setBounds(0, 0, 0, 0); backgroundSwipeRight.setBounds(0, 0, 0, 0);
} }
drawableLeft.setBounds(itemView.getLeft() + ((int) dX) - horizontalOffset - drawableLeft.getIntrinsicWidth(), drawableSwipeRight.setBounds(itemView.getLeft() + ((int) dX) - horizontalOffset - drawableSwipeRight.getIntrinsicWidth(),
(itemView.getBottom() + itemView.getTop() - drawableLeft.getIntrinsicHeight()) / 2, (itemView.getBottom() + itemView.getTop() - drawableSwipeRight.getIntrinsicHeight()) / 2,
itemView.getLeft() + ((int) dX) - horizontalOffset, itemView.getLeft() + ((int) dX) - horizontalOffset,
(itemView.getBottom() + itemView.getTop() + drawableLeft.getIntrinsicHeight()) / 2); (itemView.getBottom() + itemView.getTop() + drawableSwipeRight.getIntrinsicHeight()) / 2);
backgroundLeft.draw(c); backgroundSwipeRight.draw(c);
drawableLeft.draw(c); drawableSwipeRight.draw(c);
} else if (dX < 0) { } else if (dX < 0) {
if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) {
if (!exceedThreshold) { if (!exceedThreshold) {
exceedThreshold = true; exceedThreshold = true;
viewHolder.itemView.setHapticFeedbackEnabled(true); if (vibrateWhenActionTriggered) {
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); viewHolder.itemView.setHapticFeedbackEnabled(true);
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
} }
backgroundRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); backgroundSwipeLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom());
} else { } else {
exceedThreshold = false; exceedThreshold = false;
backgroundRight.setBounds(0, 0, 0, 0); backgroundSwipeLeft.setBounds(0, 0, 0, 0);
} }
drawableRight.setBounds(itemView.getRight() + ((int) dX) + horizontalOffset, drawableSwipeLeft.setBounds(itemView.getRight() + ((int) dX) + horizontalOffset,
(itemView.getBottom() + itemView.getTop() - drawableRight.getIntrinsicHeight()) / 2, (itemView.getBottom() + itemView.getTop() - drawableSwipeLeft.getIntrinsicHeight()) / 2,
itemView.getRight() + ((int) dX) + horizontalOffset + drawableRight.getIntrinsicWidth(), itemView.getRight() + ((int) dX) + horizontalOffset + drawableSwipeLeft.getIntrinsicWidth(),
(itemView.getBottom() + itemView.getTop() + drawableRight.getIntrinsicHeight()) / 2); (itemView.getBottom() + itemView.getTop() + drawableSwipeLeft.getIntrinsicHeight()) / 2);
backgroundRight.draw(c); backgroundSwipeLeft.draw(c);
drawableRight.draw(c); drawableSwipeLeft.draw(c);
} }
} }
@ -334,6 +338,24 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
this.sortType = sortType; this.sortType = sortType;
} }
private void initializeSwipeActionDrawable() {
if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
backgroundSwipeRight = new ColorDrawable(customThemeWrapper.getDownvoted());
drawableSwipeRight = ResourcesCompat.getDrawable(mActivity.getResources(), R.drawable.ic_arrow_downward_black_24dp, null);
} else {
backgroundSwipeRight = new ColorDrawable(customThemeWrapper.getUpvoted());
drawableSwipeRight = ResourcesCompat.getDrawable(mActivity.getResources(), R.drawable.ic_arrow_upward_black_24dp, null);
}
if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
backgroundSwipeLeft = new ColorDrawable(customThemeWrapper.getUpvoted());
drawableSwipeLeft = ResourcesCompat.getDrawable(mActivity.getResources(), R.drawable.ic_arrow_upward_black_24dp, null);
} else {
backgroundSwipeLeft = new ColorDrawable(customThemeWrapper.getDownvoted());
drawableSwipeLeft = ResourcesCompat.getDrawable(mActivity.getResources(), R.drawable.ic_arrow_downward_black_24dp, null);
}
}
@Override @Override
public void onAttach(@NonNull Context context) { public void onAttach(@NonNull Context context) {
super.onAttach(context); super.onAttach(context);

View File

@ -187,7 +187,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private boolean hasPost = false; private boolean hasPost = false;
private boolean isShown = false; private boolean isShown = false;
private boolean savePostFeedScrolledPosition; private boolean savePostFeedScrolledPosition;
private boolean vibrateWhenActionTriggered;
private PostRecyclerViewAdapter mAdapter; private PostRecyclerViewAdapter mAdapter;
private RecyclerView.SmoothScroller smoothScroller; private RecyclerView.SmoothScroller smoothScroller;
private Window window; private Window window;
@ -208,6 +207,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private Drawable drawableSwipeLeft; private Drawable drawableSwipeLeft;
private int swipeLeftAction; private int swipeLeftAction;
private int swipeRightAction; private int swipeRightAction;
private boolean vibrateWhenActionTriggered;
private float swipeActionThreshold; private float swipeActionThreshold;
private ItemTouchHelper touchHelper; private ItemTouchHelper touchHelper;
private ArrayList<SubredditFilter> subredditFilterList; private ArrayList<SubredditFilter> subredditFilterList;
@ -415,9 +415,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.NSFW_BASE, false); boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.NSFW_BASE, false);
int defaultPostLayout = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.DEFAULT_POST_LAYOUT_KEY, "0")); int defaultPostLayout = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.DEFAULT_POST_LAYOUT_KEY, "0"));
savePostFeedScrolledPosition = mSharedPreferences.getBoolean(SharedPreferencesUtils.SAVE_FRONT_PAGE_SCROLLED_POSITION, false); savePostFeedScrolledPosition = mSharedPreferences.getBoolean(SharedPreferencesUtils.SAVE_FRONT_PAGE_SCROLLED_POSITION, false);
vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true);
boolean enableSwipeAction = mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SWIPE_ACTION, false);
swipeActionThreshold = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_ACTION_THRESHOLD, "0.3"));
Locale locale = getResources().getConfiguration().locale; Locale locale = getResources().getConfiguration().locale;
if (postType == PostDataSource.TYPE_SEARCH) { if (postType == PostDataSource.TYPE_SEARCH) {
@ -692,6 +689,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
((ActivityToolbarInterface) activity).displaySortType(); ((ActivityToolbarInterface) activity).displaySortType();
} }
vibrateWhenActionTriggered = mSharedPreferences.getBoolean(SharedPreferencesUtils.VIBRATE_WHEN_ACTION_TRIGGERED, true);
swipeActionThreshold = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_ACTION_THRESHOLD, "0.3"));
swipeRightAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_RIGHT_ACTION, "1")); swipeRightAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_RIGHT_ACTION, "1"));
swipeLeftAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_LEFT_ACTION, "0")); swipeLeftAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_LEFT_ACTION, "0"));
initializeSwipeActionDrawable(); initializeSwipeActionDrawable();
@ -740,8 +739,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) {
if (!exceedThreshold) { if (!exceedThreshold) {
exceedThreshold = true; exceedThreshold = true;
viewHolder.itemView.setHapticFeedbackEnabled(true); if (vibrateWhenActionTriggered) {
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); viewHolder.itemView.setHapticFeedbackEnabled(true);
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
} }
backgroundSwipeRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); backgroundSwipeRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom());
} else { } else {
@ -759,8 +760,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) {
if (!exceedThreshold) { if (!exceedThreshold) {
exceedThreshold = true; exceedThreshold = true;
viewHolder.itemView.setHapticFeedbackEnabled(true); if (vibrateWhenActionTriggered) {
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); viewHolder.itemView.setHapticFeedbackEnabled(true);
viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
} }
backgroundSwipeLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); backgroundSwipeLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom());
} else { } else {
@ -782,7 +785,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
} }
}); });
if (enableSwipeAction) { if (mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SWIPE_ACTION, false)) {
touchHelper.attachToRecyclerView(mPostRecyclerView); touchHelper.attachToRecyclerView(mPostRecyclerView);
} }
mPostRecyclerView.setAdapter(mAdapter); mPostRecyclerView.setAdapter(mAdapter);

View File

@ -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:fillColor="#FFFFFF"
android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:pathData="M21.67,18.17l-5.3,-5.3h-0.99l-2.54,2.54v0.99l5.3,5.3c0.39,0.39 1.02,0.39 1.41,0l2.12,-2.12C22.06,19.2 22.06,18.56 21.67,18.17zM18.84,19.59l-4.24,-4.24l0.71,-0.71l4.24,4.24L18.84,19.59z"/>
<path
android:fillColor="#FFFFFF"
android:pathData="M17.34,10.19l1.41,-1.41l2.12,2.12c1.17,-1.17 1.17,-3.07 0,-4.24l-3.54,-3.54l-1.41,1.41V1.71L15.22,1l-3.54,3.54l0.71,0.71h2.83l-1.41,1.41l1.06,1.06l-2.89,2.89L7.85,6.48V5.06L4.83,2.04L2,4.87l3.03,3.03h1.41l4.13,4.13l-0.85,0.85H7.6l-5.3,5.3c-0.39,0.39 -0.39,1.02 0,1.41l2.12,2.12c0.39,0.39 1.02,0.39 1.41,0l5.3,-5.3v-2.12l5.15,-5.15L17.34,10.19zM9.36,15.34l-4.24,4.24l-0.71,-0.71l4.24,-4.24l0,0L9.36,15.34L9.36,15.34z"/>
</vector>

View File

@ -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:fillColor="#000000"
android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M21.67,18.17l-5.3,-5.3h-0.99l-2.54,2.54v0.99l5.3,5.3c0.39,0.39 1.02,0.39 1.41,0l2.12,-2.12C22.06,19.2 22.06,18.56 21.67,18.17zM18.84,19.59l-4.24,-4.24l0.71,-0.71l4.24,4.24L18.84,19.59z"/>
<path
android:fillColor="#000000"
android:pathData="M17.34,10.19l1.41,-1.41l2.12,2.12c1.17,-1.17 1.17,-3.07 0,-4.24l-3.54,-3.54l-1.41,1.41V1.71L15.22,1l-3.54,3.54l0.71,0.71h2.83l-1.41,1.41l1.06,1.06l-2.89,2.89L7.85,6.48V5.06L4.83,2.04L2,4.87l3.03,3.03h1.41l4.13,4.13l-0.85,0.85H7.6l-5.3,5.3c-0.39,0.39 -0.39,1.02 0,1.41l2.12,2.12c0.39,0.39 1.02,0.39 1.41,0l5.3,-5.3v-2.12l5.15,-5.15L17.34,10.19zM9.36,15.34l-4.24,4.24l-0.71,-0.71l4.24,-4.24l0,0L9.36,15.34L9.36,15.34z"/>
</vector>

View File

@ -854,7 +854,7 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
<string name="settings_video_download_location_title">"動画ダウンロード先のフォルダー"</string> <string name="settings_video_download_location_title">"動画ダウンロード先のフォルダー"</string>
<string name="settings_separate_folder_for_each_subreddit">"Subreddit毎にフォルダーを分ける"</string> <string name="settings_separate_folder_for_each_subreddit">"Subreddit毎にフォルダーを分ける"</string>
<string name="settings_swipe_action_title">"スワイプアクション"</string> <string name="settings_swipe_action_title">"スワイプアクション"</string>
<string name="settings_vibrate_when_action_triggered_title">"アクションが実行される際にデバイスをバイブ"</string> <string name="settings_swipe_action_haptic_feedback_title">"アクションが実行される際にデバイスをバイブ"</string>
<string name="settings_disable_swiping_between_tabs_title">"スワイプによるタブ切り替えを無効化"</string> <string name="settings_disable_swiping_between_tabs_title">"スワイプによるタブ切り替えを無効化"</string>
<string name="settings_enable_swipe_action_title">"スワイプアクションを有効化"</string> <string name="settings_enable_swipe_action_title">"スワイプアクションを有効化"</string>
<string name="settings_swipe_action_threshold">"しきい値"</string> <string name="settings_swipe_action_threshold">"しきい値"</string>

View File

@ -471,7 +471,7 @@
<string name="settings_video_download_location_title">Video Download Location</string> <string name="settings_video_download_location_title">Video Download Location</string>
<string name="settings_separate_folder_for_each_subreddit">Separate Folder for Each Subreddit</string> <string name="settings_separate_folder_for_each_subreddit">Separate Folder for Each Subreddit</string>
<string name="settings_swipe_action_title">Swipe Action</string> <string name="settings_swipe_action_title">Swipe Action</string>
<string name="settings_vibrate_when_action_triggered_title">Vibrate the phone when an action is triggered</string> <string name="settings_swipe_action_haptic_feedback_title">Haptic Feedback</string>
<string name="settings_disable_swiping_between_tabs_title">Disable Swiping Between Tabs</string> <string name="settings_disable_swiping_between_tabs_title">Disable Swiping Between Tabs</string>
<string name="settings_enable_swipe_action_title">Enable Swipe Action</string> <string name="settings_enable_swipe_action_title">Enable Swipe Action</string>
<string name="settings_swipe_action_threshold">Threshold</string> <string name="settings_swipe_action_threshold">Threshold</string>
@ -490,7 +490,7 @@
<string name="settings_bottom_app_bar_option_4">Option 4</string> <string name="settings_bottom_app_bar_option_4">Option 4</string>
<string name="settings_bottom_app_bar_fab">Floating Action Button</string> <string name="settings_bottom_app_bar_fab">Floating Action Button</string>
<string name="settings_data_saving_mode">Data Saving Mode</string> <string name="settings_data_saving_mode">Data Saving Mode</string>
<string name="settings_data_saving_mode_info_summary">In data saving mode:\nPreview images are in lower resolution.\nReddit videos are in lower resolution.</string> <string name="settings_data_saving_mode_info_summary">In data saving mode:\nPreview images are in lower resolution.\nReddit videos are in lower resolution.\nVideo autoplay is disabled.</string>
<string name="settings_translation_title">Translation</string> <string name="settings_translation_title">Translation</string>
<string name="settings_translation_summary">Translate this app on POEditor. Thanks to all contributors.</string> <string name="settings_translation_summary">Translate this app on POEditor. Thanks to all contributors.</string>
<string name="settings_credits_national_flags">National Flags</string> <string name="settings_credits_national_flags">National Flags</string>

View File

@ -69,10 +69,12 @@
app:fragment="ml.docilealligator.infinityforreddit.Settings.MiscellaneousPreferenceFragment"/> app:fragment="ml.docilealligator.infinityforreddit.Settings.MiscellaneousPreferenceFragment"/>
<Preference <Preference
android:icon="@drawable/ic_advanced_24dp"
app:title="@string/settings_advanced_master_title" app:title="@string/settings_advanced_master_title"
app:fragment="ml.docilealligator.infinityforreddit.Settings.AdvancedPreferenceFragment" /> app:fragment="ml.docilealligator.infinityforreddit.Settings.AdvancedPreferenceFragment" />
<Preference <Preference
android:icon="@drawable/ic_about_24dp"
app:title="@string/settings_about_master_title" app:title="@string/settings_about_master_title"
app:fragment="ml.docilealligator.infinityforreddit.Settings.AboutPreferenceFragment" /> app:fragment="ml.docilealligator.infinityforreddit.Settings.AboutPreferenceFragment" />

View File

@ -22,16 +22,6 @@
app:title="@string/settings_swipe_action_swipe_right_title" app:title="@string/settings_swipe_action_swipe_right_title"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true" />
<SwitchPreference
app:defaultValue="true"
app:key="vibrate_when_action_triggered"
app:title="@string/settings_vibrate_when_action_triggered_title" />
<SwitchPreference
app:defaultValue="false"
app:key="disable_swiping_between_tabs"
app:title="@string/settings_disable_swiping_between_tabs_title" />
<ListPreference <ListPreference
app:defaultValue="0.3" app:defaultValue="0.3"
app:entries="@array/settings_swipe_action_threshold" app:entries="@array/settings_swipe_action_threshold"
@ -40,4 +30,14 @@
app:title="@string/settings_swipe_action_threshold" app:title="@string/settings_swipe_action_threshold"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true" />
<SwitchPreference
app:defaultValue="true"
app:key="vibrate_when_action_triggered"
app:title="@string/settings_swipe_action_haptic_feedback_title" />
<SwitchPreference
app:defaultValue="false"
app:key="disable_swiping_between_tabs"
app:title="@string/settings_disable_swiping_between_tabs_title" />
</PreferenceScreen> </PreferenceScreen>