From 11e1867348aa2dd43df8dab4ce811dd13f0a8a50 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Thu, 11 Dec 2008 10:29:51 +0000 Subject: * Make sure we catch rebinds to cancel timer --- src/org/connectbot/service/TerminalManager.java | 40 +++++++++++++++++++++---- 1 file 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,18 +314,31 @@ 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)); return binder; } + @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(); } } } -- cgit v1.2.3