From 4e1cb2c5960f045d564089c449ecbfa7d7bcad2f Mon Sep 17 00:00:00 2001 From: Andrew Savonichev Date: Sun, 15 Oct 2017 15:22:40 +0300 Subject: [PATCH 1/3] Add gesture listener for terminal view --- .../java/com/termux/app/TermuxActivity.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index c869ffeb88..295d548021 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -39,11 +39,14 @@ import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; @@ -139,6 +142,11 @@ public final class TermuxActivity extends Activity implements ServiceConnection .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION).build()).build(); int mBellSoundId; + /** Swipe gesture detection. + */ + GestureDetector mGestureDetector; + View.OnTouchListener mGestureListener; + private final BroadcastReceiver mBroadcastReceiever = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -337,6 +345,14 @@ public boolean onLongClick(View v) { checkForFontAndColors(); mBellSoundId = mBellSoundPool.load(this, R.raw.bell, 1); + + mGestureDetector = new GestureDetector(this, new SwipeGestureListener()); + mGestureListener = new View.OnTouchListener() { + public boolean onTouch(View v, MotionEvent ev) { + return mGestureDetector.onTouchEvent(ev); + } + }; + mTerminalView.setOnTouchListener(mGestureListener); } void toggleShowExtraKeys() { @@ -867,4 +883,11 @@ public void removeFinishedSession(TerminalSession finishedSession) { } } + class SwipeGestureListener extends SimpleOnGestureListener { + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + Toast.makeText(TermuxActivity.this, "onFling", Toast.LENGTH_SHORT).show(); + return true; + } + } } From b2ec40b368c46e836332af5d73ff99a27084e971 Mon Sep 17 00:00:00 2001 From: Andrew Savonichev Date: Sun, 15 Oct 2017 16:08:25 +0300 Subject: [PATCH 2/3] Detect swipe direction and distance --- .../java/com/termux/app/TermuxActivity.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 295d548021..60bf77627b 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -886,7 +886,32 @@ public void removeFinishedSession(TerminalSession finishedSession) { class SwipeGestureListener extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - Toast.makeText(TermuxActivity.this, "onFling", Toast.LENGTH_SHORT).show(); + double dx = e2.getX() - e1.getX(); + double dy = e2.getY() - e1.getY(); + + double distance = Math.hypot(dx, dy); + double angle = Math.atan(dy / dx); + + boolean isRight = dx > 0; + + double maxAngleForHorizontal = Math.PI / 8; + boolean isHorizontal = Math.abs(angle) < maxAngleForHorizontal; + + double minInchesForSwipe = 1.2; + int dpi = getResources().getDisplayMetrics().densityDpi; + boolean isSwipe = (distance / dpi) > minInchesForSwipe; + + if (isSwipe && isHorizontal) { + return onHorizontalSwipe(isRight); + } + + return false; + } + + public boolean onHorizontalSwipe(boolean isRight) { + Toast.makeText(TermuxActivity.this, + "horizontal swipe ".concat(isRight ? "right " : "left "), + Toast.LENGTH_SHORT).show(); return true; } } From 95886d9b7f1badccd98607e8e7332e16b23ce225 Mon Sep 17 00:00:00 2001 From: Andrew Savonichev Date: Sun, 15 Oct 2017 16:18:31 +0300 Subject: [PATCH 3/3] Switch session forward/backward for horizontal swipe --- app/src/main/java/com/termux/app/TermuxActivity.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 60bf77627b..3215b6fb40 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -909,9 +909,7 @@ public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float ve } public boolean onHorizontalSwipe(boolean isRight) { - Toast.makeText(TermuxActivity.this, - "horizontal swipe ".concat(isRight ? "right " : "left "), - Toast.LENGTH_SHORT).show(); + switchToSession(isRight); return true; } }