2010-07-16 16:13:12 -04:00
|
|
|
package org.thialfihar.android.apg;
|
|
|
|
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.os.Binder;
|
|
|
|
import android.os.Handler;
|
|
|
|
import android.os.IBinder;
|
|
|
|
|
|
|
|
public class Service extends android.app.Service {
|
|
|
|
private final IBinder mBinder = new LocalBinder();
|
|
|
|
|
|
|
|
public static final String EXTRA_TTL = "ttl";
|
|
|
|
|
|
|
|
private int mPassPhraseCacheTtl = 15;
|
|
|
|
private Handler mCacheHandler = new Handler();
|
|
|
|
private Runnable mCacheTask = new Runnable() {
|
|
|
|
public void run() {
|
|
|
|
// check every ttl/2 seconds, which shouldn't be heavy on the device (even if ttl = 15),
|
|
|
|
// and makes sure the longest a pass phrase survives in the cache is 1.5 * ttl
|
|
|
|
int delay = mPassPhraseCacheTtl * 1000 / 2;
|
|
|
|
// also make sure the delay is not longer than one minute
|
|
|
|
if (delay > 60000) {
|
|
|
|
delay = 60000;
|
|
|
|
}
|
|
|
|
|
|
|
|
delay = Apg.cleanUpCache(mPassPhraseCacheTtl, delay);
|
|
|
|
// don't check too often, even if we were close
|
|
|
|
if (delay < 5000) {
|
|
|
|
delay = 5000;
|
|
|
|
}
|
|
|
|
|
|
|
|
mCacheHandler.postDelayed(this, delay);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
static private boolean mIsRunning = false;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onCreate() {
|
|
|
|
super.onCreate();
|
|
|
|
|
|
|
|
mIsRunning = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onDestroy() {
|
|
|
|
super.onDestroy();
|
|
|
|
mIsRunning = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onStart(Intent intent, int startId) {
|
|
|
|
super.onStart(intent, startId);
|
|
|
|
|
|
|
|
if (intent != null) {
|
|
|
|
mPassPhraseCacheTtl = intent.getIntExtra(EXTRA_TTL, 15);
|
|
|
|
}
|
|
|
|
if (mPassPhraseCacheTtl < 15) {
|
|
|
|
mPassPhraseCacheTtl = 15;
|
|
|
|
}
|
|
|
|
mCacheHandler.removeCallbacks(mCacheTask);
|
|
|
|
mCacheHandler.postDelayed(mCacheTask, 1000);
|
|
|
|
}
|
|
|
|
|
|
|
|
static public boolean isRunning() {
|
|
|
|
return mIsRunning;
|
|
|
|
}
|
|
|
|
|
|
|
|
public class LocalBinder extends Binder {
|
|
|
|
Service getService() {
|
|
|
|
return Service.this;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public IBinder onBind(Intent intent) {
|
|
|
|
return mBinder;
|
|
|
|
}
|
|
|
|
}
|