diff options
author | Kenny Root <kenny@the-b.org> | 2008-12-11 10:29:51 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2008-12-11 10:29:51 +0000 |
commit | 11e1867348aa2dd43df8dab4ce811dd13f0a8a50 (patch) | |
tree | fd66c25f44859d187cdb038523bc29392b69d3db /src/org/connectbot/service/TerminalManager.java | |
parent | 69cdd65f13e45826c3c4729caa3224f9851df000 (diff) | |
download | connectbot-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.java | 40 |
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(); } } } |