aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/org/connectbot/service/TerminalBridge.java
diff options
context:
space:
mode:
authorJeremy Klein <jlklein@google.com>2015-08-17 11:36:14 -0700
committerJeremy Klein <jlklein@google.com>2015-08-17 11:36:14 -0700
commitda1606001352b56711eb1eeefe6c3006a37fec48 (patch)
tree6e2d5d6ca1da46a98c0fa584e115e896df54c72e /app/src/main/java/org/connectbot/service/TerminalBridge.java
parent72a09ffdae339fbdc73999b797bf1e2365bd661d (diff)
downloadconnectbot-da1606001352b56711eb1eeefe6c3006a37fec48.tar.gz
connectbot-da1606001352b56711eb1eeefe6c3006a37fec48.tar.bz2
connectbot-da1606001352b56711eb1eeefe6c3006a37fec48.zip
Ensure that immediate disconnection listeners are handled on the UI thread.
This will resolve a crash when disconnecting hosts with "close on disconnect" set to true. See https://github.com/connectbot/connectbot/issues/135.
Diffstat (limited to 'app/src/main/java/org/connectbot/service/TerminalBridge.java')
-rw-r--r--app/src/main/java/org/connectbot/service/TerminalBridge.java38
1 files changed, 21 insertions, 17 deletions
diff --git a/app/src/main/java/org/connectbot/service/TerminalBridge.java b/app/src/main/java/org/connectbot/service/TerminalBridge.java
index f7be0ae..6d47f96 100644
--- a/app/src/main/java/org/connectbot/service/TerminalBridge.java
+++ b/app/src/main/java/org/connectbot/service/TerminalBridge.java
@@ -437,8 +437,7 @@ public class TerminalBridge implements VDUDisplay {
if (immediate || (host.getQuickDisconnect() && !host.getStayConnected())) {
awaitingClose = true;
- if (disconnectListener != null)
- disconnectListener.onDisconnected(TerminalBridge.this);
+ triggerDisconnectListener();
} else {
{
final String line = manager.res.getString(R.string.alert_disconnect_msg);
@@ -454,21 +453,7 @@ public class TerminalBridge implements VDUDisplay {
manager.res.getString(R.string.prompt_host_disconnected));
if (result == null || result.booleanValue()) {
awaitingClose = true;
-
- // Tell the TerminalManager that we can be destroyed now.
- if (disconnectListener != null) {
- // The disconnect listener should be run on the main thread if possible.
- if (parent != null) {
- parent.post(new Runnable() {
- @Override
- public void run() {
- disconnectListener.onDisconnected(TerminalBridge.this);
- }
- });
- } else {
- disconnectListener.onDisconnected(TerminalBridge.this);
- }
- }
+ triggerDisconnectListener();
}
}
});
@@ -478,6 +463,25 @@ public class TerminalBridge implements VDUDisplay {
}
}
+ /**
+ * Tells the TerminalManager that we can be destroyed now.
+ */
+ private void triggerDisconnectListener() {
+ if (disconnectListener != null) {
+ // The disconnect listener should be run on the main thread if possible.
+ if (parent != null) {
+ parent.post(new Runnable() {
+ @Override
+ public void run() {
+ disconnectListener.onDisconnected(TerminalBridge.this);
+ }
+ });
+ } else {
+ disconnectListener.onDisconnected(TerminalBridge.this);
+ }
+ }
+ }
+
public void setSelectingForCopy(boolean selectingForCopy) {
this.selectingForCopy = selectingForCopy;
}