diff options
author | Jeremy Klein <jlklein@google.com> | 2015-08-17 11:36:14 -0700 |
---|---|---|
committer | Jeremy Klein <jlklein@google.com> | 2015-08-17 11:36:14 -0700 |
commit | da1606001352b56711eb1eeefe6c3006a37fec48 (patch) | |
tree | 6e2d5d6ca1da46a98c0fa584e115e896df54c72e /app/src/main | |
parent | 72a09ffdae339fbdc73999b797bf1e2365bd661d (diff) | |
download | connectbot-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')
-rw-r--r-- | app/src/main/java/org/connectbot/service/TerminalBridge.java | 38 |
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; } |