From b77b885a944337dea47cfc57feb86369f35cff7b Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Fri, 11 May 2018 09:54:49 +0100
Subject: [PATCH] Commit shared preferences, clear instead of deleting.

---
 .../bramble/util/AndroidUtils.java             | 18 ++++++++++++++++--
 .../controller/ConfigControllerImpl.java       | 14 +++++++-------
 .../login/PasswordControllerImplTest.java      |  3 ++-
 .../android/login/SetupControllerImplTest.java |  3 ++-
 4 files changed, 27 insertions(+), 11 deletions(-)

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 fe13a7106e..a9dab6370f 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 5b0f7b46dd..b1a4168129 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 9fee37d709..9807c09c39 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 b705241026..1aa79e74f8 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,
-- 
GitLab