aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2010-05-31 18:13:04 +0000
committerKenny Root <kenny@the-b.org>2010-05-31 18:13:04 +0000
commit32bc0edb89e708b873533de94d3e58d5099cc3ba (patch)
tree59daae646718cc58dd43c190861b23fa60160782
parent29d9e77a136f65cfd65fa6be6611eb0516cc6cb3 (diff)
downloadconnectbot-32bc0edb89e708b873533de94d3e58d5099cc3ba.tar.gz
connectbot-32bc0edb89e708b873533de94d3e58d5099cc3ba.tar.bz2
connectbot-32bc0edb89e708b873533de94d3e58d5099cc3ba.zip
Refactor the way connection notification works
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@505 df292f66-193f-0410-a5fc-6d59da041ff2
-rw-r--r--AndroidManifest.xml2
-rw-r--r--src/org/connectbot/service/ConnectivityReceiver.java41
-rw-r--r--src/org/connectbot/service/TerminalManager.java34
3 files changed, 41 insertions, 36 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 236f5e5..21139ff 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.connectbot"
android:versionName="1.7.0-rc1"
- android:versionCode="301"
+ android:versionCode="302"
android:installLocation="auto">
<application
diff --git a/src/org/connectbot/service/ConnectivityReceiver.java b/src/org/connectbot/service/ConnectivityReceiver.java
index e2d2d3b..908298f 100644
--- a/src/org/connectbot/service/ConnectivityReceiver.java
+++ b/src/org/connectbot/service/ConnectivityReceiver.java
@@ -31,6 +31,8 @@ public class ConnectivityReceiver extends BroadcastReceiver {
private boolean mLockingWifi;
+ private Object[] mLock = new Object[0];
+
public ConnectivityReceiver(TerminalManager manager, boolean lockingWifi) {
mTerminalManager = manager;
@@ -93,21 +95,26 @@ public class ConnectivityReceiver extends BroadcastReceiver {
}
/**
- * Increase the number of things using the network. Acquire a Wifi lock if necessary.
+ * Increase the number of things using the network. Acquire a Wi-Fi lock
+ * if necessary.
*/
public void incRef() {
- synchronized (this) {
- acquireWifiLockIfNecessary();
+ synchronized (mLock) {
+ acquireWifiLockIfNecessaryLocked();
mNetworkRef += 1;
}
}
+ /**
+ * Decrease the number of things using the network. Release the Wi-Fi lock
+ * if necessary.
+ */
public void decRef() {
- synchronized (this) {
+ synchronized (mLock) {
mNetworkRef -= 1;
- releaseWifiLockIfNecessary();
+ releaseWifiLockIfNecessaryLocked();
}
}
@@ -115,32 +122,24 @@ public class ConnectivityReceiver extends BroadcastReceiver {
* @param mLockingWifi
*/
public void setWantWifiLock(boolean lockingWifi) {
- synchronized (this) {
+ synchronized (mLock) {
mLockingWifi = lockingWifi;
if (mLockingWifi) {
- acquireWifiLockIfNecessary();
- } else if (!mLockingWifi) {
- releaseWifiLockIfNecessary();
+ acquireWifiLockIfNecessaryLocked();
+ } else {
+ releaseWifiLockIfNecessaryLocked();
}
}
}
- /**
- *
- */
- private void acquireWifiLockIfNecessary() {
- synchronized (this) {
- if (mLockingWifi && mNetworkRef > 0 && !mWifiLock.isHeld()) {
- mWifiLock.acquire();
- }
+ private void acquireWifiLockIfNecessaryLocked() {
+ if (mLockingWifi && mNetworkRef > 0 && !mWifiLock.isHeld()) {
+ mWifiLock.acquire();
}
}
- /**
- *
- */
- private void releaseWifiLockIfNecessary() {
+ private void releaseWifiLockIfNecessaryLocked() {
if (mNetworkRef == 0 && mWifiLock.isHeld()) {
mWifiLock.release();
}
diff --git a/src/org/connectbot/service/TerminalManager.java b/src/org/connectbot/service/TerminalManager.java
index c378b14..521ce4b 100644
--- a/src/org/connectbot/service/TerminalManager.java
+++ b/src/org/connectbot/service/TerminalManager.java
@@ -246,6 +246,10 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
connectivityManager.incRef();
}
+ if (prefs.getBoolean(PreferenceConstants.CONNECTION_PERSIST, true)) {
+ ConnectionNotifier.getInstance().showRunningNotification(this);
+ }
+
// also update database with new connected time
touchHost(host);
@@ -323,6 +327,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
* Called by child bridge when somehow it's been disconnected.
*/
public void onDisconnected(TerminalBridge bridge) {
+ boolean shouldHideRunningNotification = false;
+
synchronized (bridges) {
// remove this bridge from our list
bridges.remove(bridge);
@@ -333,16 +339,24 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
if (bridge.isUsingNetwork()) {
connectivityManager.decRef();
}
+
+ if (bridges.size() == 0 &&
+ mPendingReconnect.size() == 0) {
+ shouldHideRunningNotification = true;
+ }
}
synchronized (disconnected) {
disconnected.add(bridge.host);
}
+ 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) {
@@ -465,8 +479,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
setResizeAllowed(true);
- ConnectionNotifier.getInstance().hideRunningNotification(this);
-
stopIdleTimer();
// Make sure we stay running to maintain the bridges
@@ -481,8 +493,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
setResizeAllowed(true);
- ConnectionNotifier.getInstance().hideRunningNotification(this);
-
Log.i(TAG, "Someone rebound to TerminalManager");
stopIdleTimer();
@@ -496,13 +506,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
if (bridges.size() == 0) {
stopWithDelay();
- } else {
- /* If user wants the connections to stay alive at all costs,
- * set the service to be "foreground."
- */
- if (prefs.getBoolean(PreferenceConstants.CONNECTION_PERSIST, true)) {
- ConnectionNotifier.getInstance().showRunningNotification(this);
- }
}
return true;
@@ -565,7 +568,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
vibrate();
}
- class BeepListener implements OnCompletionListener {
+ private static class BeepListener implements OnCompletionListener {
public void onCompletion(MediaPlayer mp) {
mp.seekTo(0);
}
@@ -647,6 +650,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
disconnectAll(false);
}
};
+ t.setName("Disconnector");
t.start();
}
@@ -660,6 +664,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
reconnectPending();
}
};
+ t.setName("Reconnector");
t.start();
}
@@ -673,7 +678,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
public void requestReconnect(TerminalBridge bridge) {
synchronized (mPendingReconnect) {
mPendingReconnect.add(new WeakReference<TerminalBridge>(bridge));
- if (connectivityManager.isConnected()) {
+ if (!bridge.isUsingNetwork() ||
+ connectivityManager.isConnected()) {
reconnectPending();
}
}