From e4e00ff339ab3cce3fcdae762faa2957c7f2dbea Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Tue, 28 Jul 2015 17:01:47 -0700 Subject: Add a context menu to the console view with "paste". --- .../main/java/org/connectbot/ConsoleActivity.java | 60 ++++++++++++++++++---- 1 file changed, 49 insertions(+), 11 deletions(-) (limited to 'app/src/main/java/org/connectbot/ConsoleActivity.java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index e7a8f7d..dc1cb91 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -48,6 +48,7 @@ import android.os.Message; import android.preference.PreferenceManager; import android.text.ClipboardManager; import android.util.Log; +import android.view.ContextMenu; import android.view.GestureDetector; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -324,6 +325,7 @@ public class ConsoleActivity extends Activity { inflater = LayoutInflater.from(this); flip = (ViewFlipper) findViewById(R.id.console_flip); + registerForContextMenu(flip); empty = (TextView) findViewById(android.R.id.empty); stringPromptGroup = (RelativeLayout) findViewById(R.id.console_password_group); @@ -455,7 +457,7 @@ public class ConsoleActivity extends Activity { }); // detect fling gestures to switch between terminals - final GestureDetector detect = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { + final GestureDetector detect = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { private float totalY = 0; @Override @@ -480,7 +482,13 @@ public class ConsoleActivity extends Activity { } - return false; + return super.onFling(e1, e2, velocityX, velocityY); + } + + @Override + public void onLongPress(MotionEvent e) { + super.onLongPress(e); + openContextMenu(flip); } @@ -622,7 +630,8 @@ public class ConsoleActivity extends Activity { } // pass any touch events back to detector - return detect.onTouchEvent(event); + detect.onTouchEvent(event); + return true; } }); @@ -726,14 +735,7 @@ public class ConsoleActivity extends Activity { paste.setEnabled(clipboard.hasText() && sessionOpen); paste.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { - // force insert of clipboard text into current console - TerminalView terminalView = (TerminalView) findCurrentView(R.id.console_flip); - TerminalBridge bridge = terminalView.bridge; - - // pull string from clipboard and generate all events to force down - String clip = clipboard.getText().toString(); - bridge.injectString(clip); - + pasteIntoTerminal(); return true; } }); @@ -873,6 +875,32 @@ public class ConsoleActivity extends Activity { setVolumeControlStream(AudioManager.STREAM_MUSIC); } + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + final View view = findCurrentView(R.id.console_flip); + boolean activeTerminal = (view instanceof TerminalView); + boolean sessionOpen = false; + + if (activeTerminal) { + TerminalBridge bridge = ((TerminalView) view).bridge; + sessionOpen = bridge.isSessionOpen(); + } + + MenuItem paste = menu.add(R.string.console_menu_paste); + if (hardKeyboard) + paste.setAlphabeticShortcut('v'); + paste.setIcon(android.R.drawable.ic_menu_edit); + paste.setEnabled(clipboard.hasText() && sessionOpen); + paste.setOnMenuItemClickListener(new OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + pasteIntoTerminal(); + return true; + } + }); + + + } + @Override public void onStart() { super.onStart(); @@ -1114,6 +1142,16 @@ public class ConsoleActivity extends Activity { } } + private void pasteIntoTerminal() { + // force insert of clipboard text into current console + TerminalView terminalView = (TerminalView) findCurrentView(R.id.console_flip); + TerminalBridge bridge = terminalView.bridge; + + // pull string from clipboard and generate all events to force down + String clip = clipboard.getText().toString(); + bridge.injectString(clip); + } + /** * Adds a new TerminalBridge to the current set of views in our ViewFlipper. * -- cgit v1.2.3