diff --git a/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java b/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java index fe13a7106e05ac6be41362ca57a38631927b2f12..a9dab6370f0221813067a8410be81a650bf0c577 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java @@ -1,7 +1,9 @@ package org.briarproject.bramble.util; +import android.annotation.SuppressLint; import android.bluetooth.BluetoothAdapter; import android.content.Context; +import android.content.SharedPreferences; import android.os.Build; import android.provider.Settings; @@ -42,6 +44,7 @@ public class AndroidUtils { public static String getBluetoothAddress(Context ctx, BluetoothAdapter adapter) { // Return the adapter's address if it's valid and not fake + @SuppressLint("HardwareIds") String address = adapter.getAddress(); if (isValidBluetoothAddress(address)) return address; // Return the address from settings if it's valid and not fake @@ -96,14 +99,25 @@ public class AndroidUtils { } } - public static void deleteAppData(Context ctx) { + @SuppressLint("ApplySharedPref") + public static void deleteAppData(Context ctx, SharedPreferences... clear) { + // Clear and commit shared preferences + for (SharedPreferences prefs : clear) { + boolean cleared = prefs.edit().clear().commit(); + if (LOG.isLoggable(INFO)) { + if (cleared) LOG.info("Cleared shared preferences"); + else LOG.info("Could not clear shared preferences"); + } + } + // Delete files, except lib and shared_prefs directories File dataDir = new File(ctx.getApplicationInfo().dataDir); if (LOG.isLoggable(INFO)) LOG.info("Deleting app data from " + dataDir.getAbsolutePath()); File[] children = dataDir.listFiles(); if (children != null) { for (File child : children) { - if (!child.getName().equals("lib")) { + String name = child.getName(); + if (!name.equals("lib") && !name.equals("shared_prefs")) { if (LOG.isLoggable(INFO)) LOG.info("Deleting " + child.getAbsolutePath()); IoUtils.deleteFileOrDir(child); 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 5b0f7b46dd99aea829044970b2e8beb74b544007..b1a4168129798e5a9a4c5f48200f5842b444ab74 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 @@ -1,7 +1,9 @@ package org.briarproject.briar.android.controller; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; +import android.support.v7.preference.PreferenceManager; import org.briarproject.bramble.api.db.DatabaseConfig; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -42,20 +44,18 @@ public class ConfigControllerImpl implements ConfigController { } @Override + @SuppressLint("ApplySharedPref") public void storeEncryptedDatabaseKey(String hex) { LOG.info("Storing database key in preferences"); - SharedPreferences.Editor editor = briarPrefs.edit(); - editor.putString(PREF_DB_KEY, hex); - editor.apply(); + briarPrefs.edit().putString(PREF_DB_KEY, hex).commit(); } @Override public void deleteAccount(Context ctx) { LOG.info("Deleting account"); - SharedPreferences.Editor editor = briarPrefs.edit(); - editor.clear(); - editor.apply(); - AndroidUtils.deleteAppData(ctx); + SharedPreferences defaultPrefs = + PreferenceManager.getDefaultSharedPreferences(ctx); + AndroidUtils.deleteAppData(ctx, briarPrefs, defaultPrefs); AndroidUtils.logDataDirContents(ctx); } 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 9fee37d7091dbc8192633b20d96c55dc14bfdde4..9807c09c39f5811a37fe3d699a51bb7fc904bb6d 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 @@ -54,7 +54,8 @@ public class PasswordControllerImplTest extends BrambleMockTestCase { oneOf(briarPrefs).edit(); will(returnValue(editor)); oneOf(editor).putString("key", newEncryptedHex); - oneOf(editor).apply(); + will(returnValue(editor)); + oneOf(editor).commit(); }}); PasswordControllerImpl p = new PasswordControllerImpl(briarPrefs, 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 b7052410262d32be6060cfeab951d4ab29fc729b..1aa79e74f80fbda9a087384781e45fd9f2e50a2b 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 @@ -81,7 +81,8 @@ public class SetupControllerImplTest extends BrambleMockTestCase { oneOf(briarPrefs).edit(); will(returnValue(editor)); oneOf(editor).putString("key", encryptedHex); - oneOf(editor).apply(); + will(returnValue(editor)); + oneOf(editor).commit(); }}); SetupControllerImpl s = new SetupControllerImpl(briarPrefs,