From b067b78b004f8dd2607fe1acea0e7ec47e108212 Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Thu, 13 Aug 2015 15:01:22 -0700 Subject: Call the bridge disconnect listener sychronously on the main thread. This resolves an issue with the adapter count changing without notifyDataSetChanged being called before layout. --- .../main/java/org/connectbot/service/TerminalBridge.java | 15 +++++++++++++-- .../main/java/org/connectbot/service/TerminalManager.java | 13 ++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) (limited to 'app/src/main/java/org/connectbot/service') diff --git a/app/src/main/java/org/connectbot/service/TerminalBridge.java b/app/src/main/java/org/connectbot/service/TerminalBridge.java index 6333c17..f7be0ae 100644 --- a/app/src/main/java/org/connectbot/service/TerminalBridge.java +++ b/app/src/main/java/org/connectbot/service/TerminalBridge.java @@ -456,8 +456,19 @@ public class TerminalBridge implements VDUDisplay { awaitingClose = true; // Tell the TerminalManager that we can be destroyed now. - if (disconnectListener != null) - disconnectListener.onDisconnected(TerminalBridge.this); + 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); + } + } } } }); diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java index 8001561..a15dff0 100644 --- a/app/src/main/java/org/connectbot/service/TerminalManager.java +++ b/app/src/main/java/org/connectbot/service/TerminalManager.java @@ -54,9 +54,7 @@ import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.net.Uri; import android.os.Binder; -import android.os.Handler; import android.os.IBinder; -import android.os.Message; import android.os.Vibrator; import android.preference.PreferenceManager; import android.util.Log; @@ -81,7 +79,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen public List disconnected = new LinkedList(); - public Handler disconnectHandler = null; + public BridgeDisconnectedListener disconnectListener = null; public Map loadedKeypairs = new HashMap(); @@ -329,6 +327,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen */ public void onDisconnected(TerminalBridge bridge) { boolean shouldHideRunningNotification = false; + Log.d(TAG, "Bridge Disconnected. Removing it."); synchronized (bridges) { // remove this bridge from our list @@ -345,6 +344,10 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen mPendingReconnect.size() == 0) { shouldHideRunningNotification = true; } + + // pass notification back up to gui + if (disconnectListener != null) + disconnectListener.onDisconnected(bridge); } synchronized (disconnected) { @@ -354,10 +357,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen if (shouldHideRunningNotification) { ConnectionNotifier.getInstance().hideRunningNotification(this); } - - // pass notification back up to gui - if (disconnectHandler != null) - Message.obtain(disconnectHandler, -1, bridge).sendToTarget(); } public boolean isKeyLoaded(String nickname) { -- cgit v1.2.3