From 3e1d891d71412f18b872fc6a08817638f86b0e35 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Sat, 29 Aug 2015 11:10:43 -0700 Subject: Add host status change listener This fixes a problem where the 'Disconnect' context menu item in the HostListActivity would only detect when a host's status changed if it happened to win the race. --- .../org/connectbot/service/TerminalManager.java | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'app/src/main/java/org/connectbot/service/TerminalManager.java') diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java index a15dff0..5416ddb 100644 --- a/app/src/main/java/org/connectbot/service/TerminalManager.java +++ b/app/src/main/java/org/connectbot/service/TerminalManager.java @@ -81,6 +81,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen public BridgeDisconnectedListener disconnectListener = null; + private final ArrayList hostStatusChangedListeners = new ArrayList<>(); + public Map loadedKeypairs = new HashMap(); public Resources res; @@ -252,6 +254,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen // also update database with new connected time touchHost(host); + notifyHostStatusChanged(); + return bridge; } @@ -354,6 +358,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen disconnected.add(bridge.host); } + notifyHostStatusChanged(); + if (shouldHideRunningNotification) { ConnectionNotifier.getInstance().hideRunningNotification(this); } @@ -719,4 +725,28 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen mPendingReconnect.clear(); } } + + /** + * Register a {@code listener} that wants to know when a host's status materially changes. + * @see #hostStatusChangedListeners + */ + public void registerOnHostStatusChangedListener(OnHostStatusChangedListener listener) { + if (!hostStatusChangedListeners.contains(listener)) { + hostStatusChangedListeners.add(listener); + } + } + + /** + * Unregister a {@code listener} that wants to know when a host's status materially changes. + * @see #hostStatusChangedListeners + */ + public void unregisterOnHostStatusChangedListener(OnHostStatusChangedListener listener) { + hostStatusChangedListeners.remove(listener); + } + + private void notifyHostStatusChanged() { + for (OnHostStatusChangedListener listener : hostStatusChangedListeners) { + listener.onHostStatusChanged(); + } + } } -- cgit v1.2.3