mirror of
https://github.com/M66B/FairEmail.git
synced 2026-01-03 11:28:41 +01:00
Added swipe to previous/next conversation
This commit is contained in:
@@ -26,6 +26,7 @@ import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -39,6 +40,7 @@ import androidx.fragment.app.Fragment;
|
||||
|
||||
abstract class ActivityBase extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
private boolean contacts;
|
||||
private SwipeListener swipeListener;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -59,6 +61,17 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
void setSwipeListener(SwipeListener.ISwipeListener listener) {
|
||||
swipeListener = new SwipeListener(this, listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
if (swipeListener != null)
|
||||
swipeListener.onTouch(null, ev);
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
Log.i("Resume " + this.getClass().getName());
|
||||
|
||||
@@ -297,6 +297,30 @@ public class FragmentMessages extends FragmentBase {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ActivityBase activity = (ActivityBase) getActivity();
|
||||
activity.setSwipeListener(new SwipeListener.ISwipeListener() {
|
||||
@Override
|
||||
public boolean onSwipeRight() {
|
||||
return swipe(R.id.action_prev);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSwipeLeft() {
|
||||
return swipe(R.id.action_next);
|
||||
}
|
||||
|
||||
private boolean swipe(int menu) {
|
||||
Intent intent = bottom_navigation.getMenu().findItem(menu).getIntent();
|
||||
Long id = (intent == null ? null : intent.getLongExtra("id", -1));
|
||||
if (id != null && id > 0) {
|
||||
navigate(id);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
final SelectionPredicateMessage predicate = new SelectionPredicateMessage(rvMessage);
|
||||
|
||||
|
||||
46
app/src/main/java/eu/faircode/email/SwipeListener.java
Normal file
46
app/src/main/java/eu/faircode/email/SwipeListener.java
Normal file
@@ -0,0 +1,46 @@
|
||||
package eu.faircode.email;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
public class SwipeListener implements View.OnTouchListener {
|
||||
private final GestureDetector gestureDetector;
|
||||
|
||||
public SwipeListener(Context context, final ISwipeListener listener) {
|
||||
gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
|
||||
private static final int MOVE_THRESHOLD = 100;
|
||||
private static final int SPEED_THRESHOLD = 100;
|
||||
|
||||
@Override
|
||||
public boolean onFling(MotionEvent me1, MotionEvent me2, float vx, float vy) {
|
||||
boolean consumed = false;
|
||||
float dx = me2.getX() - me1.getX();
|
||||
float dy = me2.getY() - me1.getY();
|
||||
if (Math.abs(dx) > Math.abs(dy)) {
|
||||
if (Math.abs(dx) > MOVE_THRESHOLD && Math.abs(vx) > SPEED_THRESHOLD)
|
||||
try {
|
||||
if (dx > 0)
|
||||
consumed = listener.onSwipeRight();
|
||||
else
|
||||
consumed = listener.onSwipeLeft();
|
||||
} catch (Throwable ex) {
|
||||
Log.e(ex);
|
||||
}
|
||||
}
|
||||
return consumed;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean onTouch(final View v, final MotionEvent event) {
|
||||
return gestureDetector.onTouchEvent(event);
|
||||
}
|
||||
|
||||
interface ISwipeListener {
|
||||
boolean onSwipeRight();
|
||||
|
||||
boolean onSwipeLeft();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user