diff --git a/briar-android/src/org/briarproject/android/AndroidModule.java b/briar-android/src/org/briarproject/android/AndroidModule.java index 4192956bf456adeccd17c40690d53b5df9baeccf..d3b2029e7039701823116869e65f994464520a69 100644 --- a/briar-android/src/org/briarproject/android/AndroidModule.java +++ b/briar-android/src/org/briarproject/android/AndroidModule.java @@ -1,21 +1,13 @@ package org.briarproject.android; import static android.content.Context.MODE_PRIVATE; -import static java.util.concurrent.TimeUnit.SECONDS; import java.io.File; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.Executor; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.RejectedExecutionHandler; -import java.util.concurrent.ThreadPoolExecutor; import javax.inject.Singleton; import org.briarproject.api.android.AndroidExecutor; import org.briarproject.api.android.AndroidNotificationManager; -import org.briarproject.api.android.DatabaseUiExecutor; import org.briarproject.api.android.ReferenceManager; import org.briarproject.api.db.DatabaseConfig; import org.briarproject.api.lifecycle.LifecycleManager; @@ -28,18 +20,9 @@ import com.google.inject.Provides; public class AndroidModule extends AbstractModule { - private final ExecutorService databaseUiExecutor; private final UiCallback uiCallback; public AndroidModule() { - // The queue is unbounded, so tasks can be dependent - BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(); - // Discard tasks that are submitted during shutdown - RejectedExecutionHandler policy = - new ThreadPoolExecutor.DiscardPolicy(); - // Use a single thread so DB accesses from the UI don't overlap - databaseUiExecutor = new ThreadPoolExecutor(1, 1, 60, SECONDS, queue, - policy); // Use a dummy UI callback uiCallback = new UiCallback() { @@ -53,10 +36,11 @@ public class AndroidModule extends AbstractModule { public void showMessage(String... message) { throw new UnsupportedOperationException(); - } + } }; } + @Override protected void configure() { bind(AndroidExecutor.class).to(AndroidExecutorImpl.class).in( Singleton.class); @@ -65,12 +49,6 @@ public class AndroidModule extends AbstractModule { bind(UiCallback.class).toInstance(uiCallback); } - @Provides @Singleton @DatabaseUiExecutor - Executor getDatabaseUiExecutor(LifecycleManager lifecycleManager) { - lifecycleManager.registerForShutdown(databaseUiExecutor); - return databaseUiExecutor; - } - @Provides @Singleton DatabaseConfig getDatabaseConfig(final Application app) { final File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE); diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java index 708c74b58cc2168044946e046f5a16b06c106179..f65d71f704fd88514ca4d983bcac98663dd7981a 100644 --- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java @@ -23,8 +23,8 @@ import org.briarproject.android.groups.GroupListActivity; import org.briarproject.api.ContactId; import org.briarproject.api.Settings; import org.briarproject.api.android.AndroidNotificationManager; -import org.briarproject.api.android.DatabaseUiExecutor; import org.briarproject.api.db.DatabaseComponent; +import org.briarproject.api.db.DatabaseExecutor; import org.briarproject.api.db.DbException; import org.briarproject.api.event.Event; import org.briarproject.api.event.EventListener; @@ -51,7 +51,7 @@ Service, EventListener { Logger.getLogger(AndroidNotificationManagerImpl.class.getName()); private final DatabaseComponent db; - private final Executor dbUiExecutor; + private final Executor dbExecutor; private final Context appContext; private final Map<ContactId, Integer> contactCounts = new HashMap<ContactId, Integer>(); // Locking: this @@ -65,9 +65,9 @@ Service, EventListener { @Inject public AndroidNotificationManagerImpl(DatabaseComponent db, - @DatabaseUiExecutor Executor dbExecutor, Application app) { + @DatabaseExecutor Executor dbExecutor, Application app) { this.db = db; - this.dbUiExecutor = dbExecutor; + this.dbExecutor = dbExecutor; appContext = app.getApplicationContext(); } @@ -78,7 +78,7 @@ Service, EventListener { } private void loadSettings() { - dbUiExecutor.execute(new Runnable() { + dbExecutor.execute(new Runnable() { public void run() { try { settings = db.getSettings(); diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java index c753015fa74ce6133a2974c925bf537b0f2ae43d..eae384e53dc508ab0cc9f413647442518f80b339 100644 --- a/briar-android/src/org/briarproject/android/BriarActivity.java +++ b/briar-android/src/org/briarproject/android/BriarActivity.java @@ -5,14 +5,18 @@ import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP; import static android.view.WindowManager.LayoutParams.FLAG_SECURE; import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY; import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS; + import java.util.concurrent.Executor; import java.util.logging.Logger; + import javax.inject.Inject; + import org.briarproject.android.BriarService.BriarBinder; import org.briarproject.android.BriarService.BriarServiceConnection; -import org.briarproject.api.android.DatabaseUiExecutor; import org.briarproject.api.db.DatabaseConfig; +import org.briarproject.api.db.DatabaseExecutor; import org.briarproject.api.lifecycle.LifecycleManager; + import roboguice.activity.RoboActivity; import android.annotation.SuppressLint; import android.content.Intent; @@ -35,7 +39,7 @@ public class BriarActivity extends RoboActivity { private boolean bound = false; // Fields that are accessed from background threads must be volatile - @Inject @DatabaseUiExecutor private volatile Executor dbUiExecutor; + @Inject @DatabaseExecutor private volatile Executor dbExecutor; @Inject private volatile LifecycleManager lifecycleManager; @Override @@ -113,7 +117,7 @@ public class BriarActivity extends RoboActivity { } protected void runOnDbThread(final Runnable task) { - dbUiExecutor.execute(new Runnable() { + dbExecutor.execute(new Runnable() { public void run() { try { lifecycleManager.waitForDatabase(); diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/org/briarproject/android/BriarService.java index 2e606f42eb79e6fd1b3ff21668120f7a8143c1cb..36493ee44d967309634fff8e84e140cd2b2e0d81 100644 --- a/briar-android/src/org/briarproject/android/BriarService.java +++ b/briar-android/src/org/briarproject/android/BriarService.java @@ -18,9 +18,9 @@ import org.briarproject.R; import org.briarproject.api.ContactId; import org.briarproject.api.android.AndroidExecutor; import org.briarproject.api.android.AndroidNotificationManager; -import org.briarproject.api.android.DatabaseUiExecutor; import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.db.DatabaseConfig; +import org.briarproject.api.db.DatabaseExecutor; import org.briarproject.api.db.DbException; import org.briarproject.api.event.Event; import org.briarproject.api.event.EventListener; @@ -56,7 +56,7 @@ public class BriarService extends RoboService implements EventListener { // Fields that are accessed from background threads must be volatile @Inject private volatile LifecycleManager lifecycleManager; @Inject private volatile AndroidExecutor androidExecutor; - @Inject @DatabaseUiExecutor private volatile Executor dbUiExecutor; + @Inject @DatabaseExecutor private volatile Executor dbExecutor; @Inject private volatile DatabaseComponent db; private volatile boolean started = false; @@ -130,6 +130,7 @@ public class BriarService extends RoboService implements EventListener { return START_NOT_STICKY; // Don't restart automatically if killed } + @Override public IBinder onBind(Intent intent) { return binder; } @@ -170,7 +171,7 @@ public class BriarService extends RoboService implements EventListener { } private void showMessageNotification(final GroupId g, final ContactId c) { - dbUiExecutor.execute(new Runnable() { + dbExecutor.execute(new Runnable() { public void run() { try { lifecycleManager.waitForDatabase(); diff --git a/briar-android/src/org/briarproject/android/SplashScreenActivity.java b/briar-android/src/org/briarproject/android/SplashScreenActivity.java index d85e06109758500b4d5a06a63d1957307030052f..ff48381cd3161747087e41f9eedacce3069f997a 100644 --- a/briar-android/src/org/briarproject/android/SplashScreenActivity.java +++ b/briar-android/src/org/briarproject/android/SplashScreenActivity.java @@ -30,8 +30,8 @@ public class SplashScreenActivity extends RoboSplashActivity { private static final Logger LOG = Logger.getLogger(SplashScreenActivity.class.getName()); - // This build expires on 17 May 2014 - private static final long EXPIRY_DATE = 1400284800 * 1000L; + // This build expires on 12 July 2014 + private static final long EXPIRY_DATE = 1405123200 * 1000L; private long now = System.currentTimeMillis(); @@ -61,6 +61,7 @@ public class SplashScreenActivity extends RoboSplashActivity { setContentView(layout); } + @Override protected void startNextActivity() { long duration = System.currentTimeMillis() - now; if(LOG.isLoggable(INFO)) diff --git a/briar-api/src/org/briarproject/api/android/DatabaseUiExecutor.java b/briar-api/src/org/briarproject/api/android/DatabaseUiExecutor.java deleted file mode 100644 index 4a9ceb4eb27e69e9d6faf99105f482a25f203796..0000000000000000000000000000000000000000 --- a/briar-api/src/org/briarproject/api/android/DatabaseUiExecutor.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.briarproject.api.android; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import com.google.inject.BindingAnnotation; - -/** - * Annotation for injecting the executor for accessing the database from the UI. - */ -@BindingAnnotation -@Target({ FIELD, METHOD, PARAMETER }) -@Retention(RUNTIME) -public @interface DatabaseUiExecutor {}