Added swipe to previous/next conversation

pull/147/head
M66B 7 years ago
parent 41f8fde043
commit 8f2115fe0c

@ -35,7 +35,6 @@ Anything on this list is in random order and *might* be added in the near future
## Frequently requested features
* Swipe left/right to go to previous/next message: besides that swiping left/right is already being used to move messages to archive/trash, swiping also selects message text, so this will not work reliably. You can use the bottom navigation bar instead.
* Rich text editor: besides that very few people would use this on a small mobile device, Android doesn't support a rich text editor and most rich text editor open source projects are abandoned.
* Widget to read e-mail: widgets can have limited user interaction only, so a widget to read e-mail would not be very useful. Moreover, it would be not very useful to duplicate functions which are already available in the app.
* Badge count: there is no standard Android API for this and third party solutions might stop working anytime. For example *ShortcutBadger* [has lots of problems](https://github.com/leolin310148/ShortcutBadger/issues). You can use the provided widget instead.

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

@ -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();
}
}
Loading…
Cancel
Save