aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/connectbot/service/TerminalManager.java
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2008-12-11 10:29:51 +0000
committerKenny Root <kenny@the-b.org>2008-12-11 10:29:51 +0000
commit11e1867348aa2dd43df8dab4ce811dd13f0a8a50 (patch)
treefd66c25f44859d187cdb038523bc29392b69d3db /src/org/connectbot/service/TerminalManager.java
parent69cdd65f13e45826c3c4729caa3224f9851df000 (diff)
downloadconnectbot-11e1867348aa2dd43df8dab4ce811dd13f0a8a50.tar.gz
connectbot-11e1867348aa2dd43df8dab4ce811dd13f0a8a50.tar.bz2
connectbot-11e1867348aa2dd43df8dab4ce811dd13f0a8a50.zip
* Make sure we catch rebinds to cancel timer
Diffstat (limited to 'src/org/connectbot/service/TerminalManager.java')
-rw-r--r--src/org/connectbot/service/TerminalManager.java40
1 files changed, 34 insertions, 6 deletions
diff --git a/src/org/connectbot/service/TerminalManager.java b/src/org/connectbot/service/TerminalManager.java
index 0f62394..bb9622c 100644
--- a/src/org/connectbot/service/TerminalManager.java
+++ b/src/org/connectbot/service/TerminalManager.java
@@ -275,13 +275,16 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
return loadedPubkeys.get(nickname);
}
- private void stop() {
+ private void stopWithDelay() {
// TODO add in a way to check whether keys loaded are encrypted and only
// set timer when we have an encrypted key loaded
if (loadedPubkeys.size() > 0) {
- if (idleTimer == null)
- idleTimer = new Timer();
+ synchronized (this) {
+ if (idleTimer == null)
+ idleTimer = new Timer(true);
+ }
+
idleTimer.schedule(new IdleTask(), IDLE_TIMEOUT);
} else {
Log.d(TAG, "Stopping background service immediately");
@@ -289,6 +292,18 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
}
}
+ protected void stopNow() {
+ if (bridges.size() == 0)
+ stopSelf();
+ }
+
+ private synchronized void stopIdleTimer() {
+ if (idleTimer != null) {
+ idleTimer.cancel();
+ idleTimer = null;
+ }
+ }
+
public class TerminalBinder extends Binder {
public TerminalManager getService() {
return TerminalManager.this;
@@ -299,6 +314,8 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
public IBinder onBind(Intent intent) {
Log.i(TAG, "Someone bound to TerminalManager");
+ stopIdleTimer();
+
// Make sure we stay running to maintain the bridges
startService(new Intent(this, TerminalManager.class));
@@ -306,11 +323,22 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
}
@Override
+ public void onRebind(Intent intent) {
+ super.onRebind(intent);
+
+ Log.i(TAG, "Someone rebound to TerminalManager");
+
+ stopIdleTimer();
+ }
+
+ @Override
public boolean onUnbind(Intent intent) {
+ Log.i(TAG, "Someone unbound from TerminalManager");
+
if (bridges.size() == 0)
- stop();
+ stopWithDelay();
- return false;
+ return true;
}
private class IdleTask extends TimerTask {
@@ -320,7 +348,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
@Override
public void run() {
Log.d(TAG, String.format("Stopping service after timeout of ~%d seconds", IDLE_TIMEOUT / 1000));
- TerminalManager.this.stopSelf();
+ TerminalManager.this.stopNow();
}
}
}