Added swipe to previous/next conversation

This commit is contained in:
M66B
2019-01-30 18:11:22 +00:00
parent 41f8fde043
commit 8f2115fe0c
4 changed files with 83 additions and 1 deletions

View File

@@ -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());

View File

@@ -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);

View 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();
}
}