From ebeaa5265f91c8ab68058df702465d45c3131d6f Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Thu, 23 Jul 2015 14:54:30 -0700 Subject: Add a confirm dialog for the disconnect all action. --- .../main/java/org/connectbot/HostListActivity.java | 37 +++++++++++++++------- app/src/main/res/values/strings.xml | 4 +++ 2 files changed, 29 insertions(+), 12 deletions(-) (limited to 'app/src') diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java index f0fdf16..a0d7901 100644 --- a/app/src/main/java/org/connectbot/HostListActivity.java +++ b/app/src/main/java/org/connectbot/HostListActivity.java @@ -442,27 +442,40 @@ public class HostListActivity extends ListActivity { * Disconnects all active connections and closes the activity if appropriate. */ private void disconnectAll() { - // TODO(jklein24): Show a confirm dialog before actually disconnecting. if (bound == null) { waitingForDisconnectAll = true; return; } - bound.disconnectAll(true, false); - updateHandler.sendEmptyMessage(-1); - waitingForDisconnectAll = false; - - if (closeOnDisconnectAll) { - // Clear the intent so that the activity can be relaunched without closing. - // TODO(jlklein): Find a better way to do this. - setIntent(new Intent()); - finish(); - } + new AlertDialog.Builder(HostListActivity.this) + .setMessage(getString(R.string.disconnect_all_message)) + .setPositiveButton(R.string.disconnect_all_pos, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + bound.disconnectAll(true, false); + updateHandler.sendEmptyMessage(-1); + waitingForDisconnectAll = false; + + // Clear the intent so that the activity can be relaunched without closing. + // TODO(jlklein): Find a better way to do this. + setIntent(new Intent()); + + if (closeOnDisconnectAll) { + finish(); + } + } + }) + .setNegativeButton(R.string.disconnect_all_neg, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + waitingForDisconnectAll = false; + // Clear the intent so that the activity can be relaunched without closing. + // TODO(jlklein): Find a better way to do this. + setIntent(new Intent()); + } + }).create().show(); } /** - * @param text * @return */ private boolean startConsoleActivity() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7d351a4..939ee9a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -424,6 +424,10 @@ "Yes, delete" "Cancel" + "Are you sure you want to disconnect from all connected hosts?" + "Yes, disconnect" + "Cancel" + "Agree" -- cgit v1.2.3 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') 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 From 125be93257c9ea04650a0dddf7213741eba1913f Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Wed, 29 Jul 2015 13:49:06 -0700 Subject: Use scaled touch slop for determining the scroll x-tolerance. --- app/src/main/java/org/connectbot/ConsoleActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app/src') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index e7a8f7d..3a89c4c 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -500,7 +500,8 @@ public class ConsoleActivity extends Activity { } // activate consider if within x tolerance - if (Math.abs(e1.getX() - e2.getX()) < ViewConfiguration.getTouchSlop() * 4) { + int touchSlop = ViewConfiguration.get(ConsoleActivity.this).getScaledTouchSlop(); + if (Math.abs(e1.getX() - e2.getX()) < touchSlop * 4) { View flip = findCurrentView(R.id.console_flip); if (flip == null) return false; -- cgit v1.2.3