From cb29c9bf32a6689485ca1fe904a3d1e19417de05 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Fri, 20 Jul 2018 15:08:53 +0100
Subject: [PATCH] Create minimal AccountManager interface.

---
 .../bramble/api/account/AccountManager.java   |  6 ++++++
 .../bramble/BrambleCoreModule.java            |  2 ++
 .../bramble/account/AccountManagerImpl.java   | 21 +++++++++++++++++++
 .../bramble/account/AccountModule.java        | 18 ++++++++++++++++
 .../briar/android/AndroidComponent.java       |  3 +++
 .../briar/android/BriarService.java           | 11 +++++-----
 .../briar/android/activity/BriarActivity.java |  4 ++--
 .../android/controller/BriarController.java   |  2 +-
 .../controller/BriarControllerImpl.java       | 15 +++++++------
 .../controller/ConfigControllerImpl.java      |  7 +++++--
 .../briar/android/login/PasswordActivity.java |  2 +-
 .../android/login/PasswordControllerImpl.java |  5 +++--
 .../android/login/SetupControllerImpl.java    |  7 ++++---
 .../controller/ConfigControllerImplTest.java  | 15 +++++++------
 .../android/forum/TestForumActivity.java      |  2 +-
 .../login/PasswordControllerImplTest.java     |  9 ++++++--
 .../login/SetupControllerImplTest.java        |  7 +++++--
 .../test/BriarIntegrationTestComponent.java   |  2 ++
 18 files changed, 103 insertions(+), 35 deletions(-)
 create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java
 create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java
 create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/account/AccountModule.java

diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java
new file mode 100644
index 0000000000..4aa4fb2b5b
--- /dev/null
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java
@@ -0,0 +1,6 @@
+package org.briarproject.bramble.api.account;
+
+public interface AccountManager {
+
+	boolean hasDatabaseKey();
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
index 07bc14eea2..d817c6d57e 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
@@ -1,5 +1,6 @@
 package org.briarproject.bramble;
 
+import org.briarproject.bramble.account.AccountModule;
 import org.briarproject.bramble.client.ClientModule;
 import org.briarproject.bramble.contact.ContactModule;
 import org.briarproject.bramble.crypto.CryptoExecutorModule;
@@ -26,6 +27,7 @@ import org.briarproject.bramble.versioning.VersioningModule;
 import dagger.Module;
 
 @Module(includes = {
+		AccountModule.class,
 		ClientModule.class,
 		ContactModule.class,
 		CryptoModule.class,
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java
new file mode 100644
index 0000000000..dd4df479a3
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java
@@ -0,0 +1,21 @@
+package org.briarproject.bramble.account;
+
+import org.briarproject.bramble.api.account.AccountManager;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+
+import javax.inject.Inject;
+
+class AccountManagerImpl implements AccountManager {
+
+	private final DatabaseConfig databaseConfig;
+
+	@Inject
+	AccountManagerImpl(DatabaseConfig databaseConfig) {
+		this.databaseConfig = databaseConfig;
+	}
+
+	@Override
+	public boolean hasDatabaseKey() {
+		return databaseConfig.getEncryptionKey() != null;
+	}
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountModule.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountModule.java
new file mode 100644
index 0000000000..e8220176a8
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountModule.java
@@ -0,0 +1,18 @@
+package org.briarproject.bramble.account;
+
+import org.briarproject.bramble.api.account.AccountManager;
+
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class AccountModule {
+
+	@Provides
+	@Singleton
+	AccountManager provideAccountManager(AccountManagerImpl accountManager) {
+		return accountManager;
+	}
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
index 087aa5ea0c..8935cfb7fd 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
 import org.briarproject.bramble.BrambleAndroidModule;
 import org.briarproject.bramble.BrambleCoreEagerSingletons;
 import org.briarproject.bramble.BrambleCoreModule;
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.contact.ContactExchangeTask;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
@@ -151,6 +152,8 @@ public interface AndroidComponent
 	@IoExecutor
 	Executor ioExecutor();
 
+	AccountManager accountManager();
+
 	void inject(SignInReminderReceiver briarService);
 
 	void inject(BriarService briarService);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
index f40d2a42bf..980e6cdfc5 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
@@ -17,7 +17,7 @@ import android.os.IBinder;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.content.ContextCompat;
 
-import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult;
 import org.briarproject.bramble.api.system.AndroidExecutor;
@@ -75,12 +75,13 @@ public class BriarService extends Service {
 	private BroadcastReceiver receiver = null;
 
 	@Inject
-	protected DatabaseConfig databaseConfig;
+	AccountManager accountManager;
+
 	// Fields that are accessed from background threads must be volatile
 	@Inject
-	protected volatile LifecycleManager lifecycleManager;
+	volatile LifecycleManager lifecycleManager;
 	@Inject
-	protected volatile AndroidExecutor androidExecutor;
+	volatile AndroidExecutor androidExecutor;
 	private volatile boolean started = false;
 
 	@Override
@@ -96,7 +97,7 @@ public class BriarService extends Service {
 			stopSelf();
 			return;
 		}
-		if (databaseConfig.getEncryptionKey() == null) {
+		if (!accountManager.hasDatabaseKey()) {
 			LOG.info("No database key");
 			stopSelf();
 			return;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
index 3d2d8361cb..cf71839f9f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
@@ -61,7 +61,7 @@ public abstract class BriarActivity extends BaseActivity {
 	@Override
 	public void onStart() {
 		super.onStart();
-		if (!briarController.hasEncryptionKey() && !isFinishing()) {
+		if (!briarController.accountSignedIn() && !isFinishing()) {
 			Intent i = new Intent(this, PasswordActivity.class);
 			startActivityForResult(i, REQUEST_PASSWORD);
 		} else if (SDK_INT >= 23) {
@@ -138,7 +138,7 @@ public abstract class BriarActivity extends BaseActivity {
 	}
 
 	protected void signOut(boolean removeFromRecentApps) {
-		if (briarController.hasEncryptionKey()) {
+		if (briarController.accountSignedIn()) {
 			// Don't use UiResultHandler because we want the result even if
 			// this activity has been destroyed
 			briarController.signOut(result -> runOnUiThread(
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarController.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarController.java
index 350faeabaa..e4e60c6926 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarController.java
@@ -6,7 +6,7 @@ public interface BriarController extends ActivityLifecycleController {
 
 	void startAndBindService();
 
-	boolean hasEncryptionKey();
+	boolean accountSignedIn();
 
 	/**
 	 * Returns true via the handler when the app has dozed
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
index a668a450d0..1271f4d212 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
@@ -5,7 +5,7 @@ import android.content.Intent;
 import android.os.IBinder;
 import android.support.annotation.CallSuper;
 
-import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.db.DatabaseExecutor;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.settings.Settings;
@@ -33,8 +33,7 @@ public class BriarControllerImpl implements BriarController {
 	public static final String DOZE_ASK_AGAIN = "dozeAskAgain";
 
 	private final BriarServiceConnection serviceConnection;
-	private final DatabaseConfig databaseConfig;
-	@DatabaseExecutor
+	private final AccountManager accountManager;
 	private final Executor databaseExecutor;
 	private final SettingsManager settingsManager;
 	private final DozeWatchdog dozeWatchdog;
@@ -44,12 +43,12 @@ public class BriarControllerImpl implements BriarController {
 
 	@Inject
 	BriarControllerImpl(BriarServiceConnection serviceConnection,
-			DatabaseConfig databaseConfig,
+			AccountManager accountManager,
 			@DatabaseExecutor Executor databaseExecutor,
 			SettingsManager settingsManager, DozeWatchdog dozeWatchdog,
 			Activity activity) {
 		this.serviceConnection = serviceConnection;
-		this.databaseConfig = databaseConfig;
+		this.accountManager = accountManager;
 		this.databaseExecutor = databaseExecutor;
 		this.settingsManager = settingsManager;
 		this.dozeWatchdog = dozeWatchdog;
@@ -59,7 +58,7 @@ public class BriarControllerImpl implements BriarController {
 	@Override
 	@CallSuper
 	public void onActivityCreate(Activity activity) {
-		if (databaseConfig.getEncryptionKey() != null) startAndBindService();
+		if (accountManager.hasDatabaseKey()) startAndBindService();
 	}
 
 	@Override
@@ -84,8 +83,8 @@ public class BriarControllerImpl implements BriarController {
 	}
 
 	@Override
-	public boolean hasEncryptionKey() {
-		return databaseConfig.getEncryptionKey() != null;
+	public boolean accountSignedIn() {
+		return accountManager.hasDatabaseKey();
 	}
 
 	@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
index 1e0bce3a26..cb0d2c3c3f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
@@ -4,6 +4,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.support.v7.preference.PreferenceManager;
 
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.util.AndroidUtils;
@@ -34,12 +35,14 @@ public class ConfigControllerImpl implements ConfigController {
 
 	private final SharedPreferences briarPrefs;
 	private final File dbKeyFile, dbKeyBackupFile;
+	private final AccountManager accountManager;
 	protected final DatabaseConfig databaseConfig;
 
 	@Inject
 	public ConfigControllerImpl(SharedPreferences briarPrefs,
-			DatabaseConfig databaseConfig) {
+			AccountManager accountManager, DatabaseConfig databaseConfig) {
 		this.briarPrefs = briarPrefs;
+		this.accountManager = accountManager;
 		this.databaseConfig = databaseConfig;
 		File keyDir = databaseConfig.getDatabaseKeyDirectory();
 		dbKeyFile = new File(keyDir, DB_KEY_FILENAME);
@@ -166,6 +169,6 @@ public class ConfigControllerImpl implements ConfigController {
 
 	@Override
 	public boolean accountSignedIn() {
-		return databaseConfig.getEncryptionKey() != null;
+		return accountManager.hasDatabaseKey();
 	}
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
index f4368dd9a0..5504132b42 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
@@ -85,7 +85,7 @@ public class PasswordActivity extends BaseActivity {
 	public void onStart() {
 		super.onStart();
 		// If the user has already signed in, clean up this instance
-		if (briarController.hasEncryptionKey()) {
+		if (briarController.accountSignedIn()) {
 			setResult(RESULT_OK);
 			finish();
 		}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
index 905797acc6..ca9634502a 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
@@ -2,6 +2,7 @@ package org.briarproject.briar.android.login;
 
 import android.content.SharedPreferences;
 
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.CryptoExecutor;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
@@ -33,10 +34,10 @@ public class PasswordControllerImpl extends ConfigControllerImpl
 
 	@Inject
 	PasswordControllerImpl(SharedPreferences briarPrefs,
-			DatabaseConfig databaseConfig,
+			AccountManager accountManager, DatabaseConfig databaseConfig,
 			@CryptoExecutor Executor cryptoExecutor, CryptoComponent crypto,
 			PasswordStrengthEstimator strengthEstimator) {
-		super(briarPrefs, databaseConfig);
+		super(briarPrefs, accountManager, databaseConfig);
 		this.cryptoExecutor = cryptoExecutor;
 		this.crypto = crypto;
 		this.strengthEstimator = strengthEstimator;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
index 4c56553ba3..30d039849c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
@@ -3,6 +3,7 @@ package org.briarproject.briar.android.login;
 import android.content.SharedPreferences;
 import android.support.annotation.Nullable;
 
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.CryptoExecutor;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
@@ -33,12 +34,12 @@ public class SetupControllerImpl extends PasswordControllerImpl
 
 	@Inject
 	SetupControllerImpl(SharedPreferences briarPrefs,
-			DatabaseConfig databaseConfig,
+			AccountManager accountManager, DatabaseConfig databaseConfig,
 			@CryptoExecutor Executor cryptoExecutor, CryptoComponent crypto,
 			PasswordStrengthEstimator strengthEstimator,
 			IdentityManager identityManager) {
-		super(briarPrefs, databaseConfig, cryptoExecutor, crypto,
-				strengthEstimator);
+		super(briarPrefs, accountManager, databaseConfig, cryptoExecutor,
+				crypto, strengthEstimator);
 		this.identityManager = identityManager;
 	}
 
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/controller/ConfigControllerImplTest.java b/briar-android/src/test/java/org/briarproject/briar/android/controller/ConfigControllerImplTest.java
index 859792b3c9..d8e4445c29 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/controller/ConfigControllerImplTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/controller/ConfigControllerImplTest.java
@@ -3,6 +3,7 @@ package org.briarproject.briar.android.controller;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.test.BrambleMockTestCase;
 import org.jmock.Expectations;
@@ -26,6 +27,8 @@ public class ConfigControllerImplTest extends BrambleMockTestCase {
 
 	private final SharedPreferences prefs =
 			context.mock(SharedPreferences.class);
+	private final AccountManager accountManager =
+			context.mock(AccountManager.class);
 	private final DatabaseConfig databaseConfig =
 			context.mock(DatabaseConfig.class);
 	private final Editor editor = context.mock(Editor.class);
@@ -56,7 +59,7 @@ public class ConfigControllerImplTest extends BrambleMockTestCase {
 		assertFalse(keyFile.exists());
 		assertFalse(keyBackupFile.exists());
 
-		ConfigControllerImpl c = new ConfigControllerImpl(prefs,
+		ConfigControllerImpl c = new ConfigControllerImpl(prefs, accountManager,
 				databaseConfig);
 
 		assertEquals(encryptedKeyHex, c.getEncryptedDatabaseKey());
@@ -85,7 +88,7 @@ public class ConfigControllerImplTest extends BrambleMockTestCase {
 		assertFalse(keyBackupFile.exists());
 		assertEquals(encryptedKeyHex, loadDatabaseKey(keyFile));
 
-		ConfigControllerImpl c = new ConfigControllerImpl(prefs,
+		ConfigControllerImpl c = new ConfigControllerImpl(prefs, accountManager,
 				databaseConfig);
 
 		assertEquals(encryptedKeyHex, c.getEncryptedDatabaseKey());
@@ -113,7 +116,7 @@ public class ConfigControllerImplTest extends BrambleMockTestCase {
 		assertTrue(keyBackupFile.exists());
 		assertEquals(encryptedKeyHex, loadDatabaseKey(keyBackupFile));
 
-		ConfigControllerImpl c = new ConfigControllerImpl(prefs,
+		ConfigControllerImpl c = new ConfigControllerImpl(prefs, accountManager,
 				databaseConfig);
 
 		assertEquals(encryptedKeyHex, c.getEncryptedDatabaseKey());
@@ -135,7 +138,7 @@ public class ConfigControllerImplTest extends BrambleMockTestCase {
 		assertFalse(keyFile.exists());
 		assertFalse(keyBackupFile.exists());
 
-		ConfigControllerImpl c = new ConfigControllerImpl(prefs,
+		ConfigControllerImpl c = new ConfigControllerImpl(prefs, accountManager,
 				databaseConfig);
 
 		assertNull(c.getEncryptedDatabaseKey());
@@ -160,7 +163,7 @@ public class ConfigControllerImplTest extends BrambleMockTestCase {
 		assertFalse(keyBackupFile.exists());
 		assertEquals(oldEncryptedKeyHex, loadDatabaseKey(keyFile));
 
-		ConfigController c = new ConfigControllerImpl(prefs,
+		ConfigController c = new ConfigControllerImpl(prefs, accountManager,
 				databaseConfig);
 
 		assertTrue(c.storeEncryptedDatabaseKey(encryptedKeyHex));
@@ -187,7 +190,7 @@ public class ConfigControllerImplTest extends BrambleMockTestCase {
 		assertTrue(keyBackupFile.exists());
 		assertEquals(oldEncryptedKeyHex, loadDatabaseKey(keyBackupFile));
 
-		ConfigController c = new ConfigControllerImpl(prefs,
+		ConfigController c = new ConfigControllerImpl(prefs, accountManager,
 				databaseConfig);
 
 		assertTrue(c.storeEncryptedDatabaseKey(encryptedKeyHex));
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/forum/TestForumActivity.java b/briar-android/src/test/java/org/briarproject/briar/android/forum/TestForumActivity.java
index 72b8d66448..7a04b4517b 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/forum/TestForumActivity.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/forum/TestForumActivity.java
@@ -45,7 +45,7 @@ public class TestForumActivity extends ForumActivity {
 			protected BriarController provideBriarController(
 					BriarControllerImpl briarController) {
 				BriarController c = Mockito.mock(BriarController.class);
-				Mockito.when(c.hasEncryptionKey()).thenReturn(true);
+				Mockito.when(c.accountSignedIn()).thenReturn(true);
 				return c;
 			}
 
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java
index 427dfa772d..dcc2685b64 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java
@@ -2,6 +2,7 @@ package org.briarproject.briar.android.login;
 
 import android.content.SharedPreferences;
 
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
 import org.briarproject.bramble.api.db.DatabaseConfig;
@@ -30,6 +31,8 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 
 	private final SharedPreferences briarPrefs =
 			context.mock(SharedPreferences.class);
+	private final AccountManager accountManager =
+			context.mock(AccountManager.class);
 	private final DatabaseConfig databaseConfig =
 			context.mock(DatabaseConfig.class);
 	private final CryptoComponent crypto = context.mock(CryptoComponent.class);
@@ -70,7 +73,8 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 		storeDatabaseKey(keyBackupFile, toHexString(oldEncryptedKey));
 
 		PasswordControllerImpl p = new PasswordControllerImpl(briarPrefs,
-				databaseConfig, cryptoExecutor, crypto, estimator);
+				accountManager, databaseConfig, cryptoExecutor, crypto,
+				estimator);
 
 		AtomicBoolean capturedResult = new AtomicBoolean(false);
 		p.changePassword(oldPassword, newPassword, capturedResult::set);
@@ -104,7 +108,8 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 		storeDatabaseKey(keyBackupFile, toHexString(oldEncryptedKey));
 
 		PasswordControllerImpl p = new PasswordControllerImpl(briarPrefs,
-				databaseConfig, cryptoExecutor, crypto, estimator);
+				accountManager, databaseConfig, cryptoExecutor, crypto,
+				estimator);
 
 		AtomicBoolean capturedResult = new AtomicBoolean(true);
 		p.changePassword(oldPassword, newPassword, capturedResult::set);
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java
index f95aab6dd4..dd88251476 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java
@@ -3,6 +3,7 @@ package org.briarproject.briar.android.login;
 import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
 
+import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -37,6 +38,8 @@ public class SetupControllerImplTest extends BrambleMockTestCase {
 
 	private final SharedPreferences briarPrefs =
 			context.mock(SharedPreferences.class);
+	private final AccountManager accountManager =
+			context.mock(AccountManager.class);
 	private final DatabaseConfig databaseConfig =
 			context.mock(DatabaseConfig.class);
 	private final CryptoComponent crypto = context.mock(CryptoComponent.class);
@@ -101,8 +104,8 @@ public class SetupControllerImplTest extends BrambleMockTestCase {
 		assertFalse(keyBackupFile.exists());
 
 		SetupControllerImpl s = new SetupControllerImpl(briarPrefs,
-				databaseConfig, cryptoExecutor, crypto, estimator,
-				identityManager);
+				accountManager, databaseConfig, cryptoExecutor, crypto,
+				estimator, identityManager);
 		s.setSetupActivity(setupActivity);
 
 		AtomicBoolean called = new AtomicBoolean(false);
diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java
index a3b74d4c25..d55b06d00b 100644
--- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java
@@ -1,5 +1,6 @@
 package org.briarproject.briar.test;
 
+import org.briarproject.bramble.account.AccountModule;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.db.DatabaseComponent;
@@ -54,6 +55,7 @@ import dagger.Component;
 		TestDatabaseModule.class,
 		TestPluginConfigModule.class,
 		TestSecureRandomModule.class,
+		AccountModule.class,
 		BlogModule.class,
 		BriarClientModule.class,
 		ClientModule.class,
-- 
GitLab