diff --git a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java index 426758f52e6faeec7391e38f30a8f3a7a3abe3bb..6c8192adb072ac6d1bdbb2ac12f2c48c0e74c383 100644 --- a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java +++ b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java @@ -1,11 +1,14 @@ package net.sf.briar.android.invitation; +import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import java.util.concurrent.Executor; import java.util.logging.Logger; import net.sf.briar.android.BriarActivity; +import net.sf.briar.android.BriarService; +import net.sf.briar.android.BriarService.BriarServiceConnection; import net.sf.briar.api.android.BundleEncrypter; import net.sf.briar.api.android.ReferenceManager; import net.sf.briar.api.crypto.CryptoComponent; @@ -16,6 +19,7 @@ import net.sf.briar.api.invitation.InvitationListener; import net.sf.briar.api.invitation.InvitationState; import net.sf.briar.api.invitation.InvitationTask; import net.sf.briar.api.invitation.InvitationTaskFactory; +import android.content.Intent; import android.os.Bundle; import com.google.inject.Inject; @@ -26,6 +30,9 @@ implements InvitationListener { private static final Logger LOG = Logger.getLogger(AddContactActivity.class.getName()); + private final BriarServiceConnection serviceConnection = + new BriarServiceConnection(); + @Inject private BundleEncrypter bundleEncrypter; @Inject private CryptoComponent crypto; @Inject private DatabaseComponent db; @@ -111,6 +118,9 @@ implements InvitationListener { } } } + // Bind to the service so we can wait for the DB to be opened + bindService(new Intent(BriarService.class.getName()), + serviceConnection, 0); } @Override @@ -135,6 +145,7 @@ implements InvitationListener { public void onDestroy() { super.onDestroy(); if(task != null) task.removeListener(this); + unbindService(serviceConnection); } void setView(AddContactView view) { @@ -209,10 +220,15 @@ implements InvitationListener { dbExecutor.execute(new Runnable() { public void run() { try { + serviceConnection.waitForStartup(); db.addContact(nickname); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + } catch(InterruptedException e) { + if(LOG.isLoggable(INFO)) + LOG.info("Interrupted while waiting for service"); + Thread.currentThread().interrupt(); } } });