From 1d63b16ff12221d0458a3f54219ad8d3f0ceadeb Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 24 Feb 2020 13:44:47 +0000 Subject: [PATCH 1/3] Don't delete the code_cache directory when deleting account. This seems to avoid the disappearing account bug when installing a new version. --- .../account/AndroidAccountManager.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java index 012f76c4b..b0cb783d3 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java @@ -12,6 +12,7 @@ import org.briarproject.bramble.api.identity.IdentityManager; import java.io.File; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.logging.Logger; @@ -20,6 +21,7 @@ import javax.annotation.concurrent.GuardedBy; import javax.inject.Inject; import static android.os.Build.VERSION.SDK_INT; +import static java.util.Arrays.asList; import static java.util.logging.Level.INFO; import static org.briarproject.bramble.util.IoUtils.deleteFileOrDir; import static org.briarproject.bramble.util.LogUtils.logFileOrDir; @@ -30,6 +32,12 @@ class AndroidAccountManager extends AccountManagerImpl private static final Logger LOG = Logger.getLogger(AndroidAccountManager.class.getName()); + /** + * Directories that shouldn't be deleted when deleting the user's account. + */ + private static final List PROTECTED_DIR_NAMES = + asList("code_cache", "lib", "shared_prefs"); + protected final Context appContext; private final SharedPreferences prefs; @@ -81,7 +89,7 @@ class AndroidAccountManager extends AccountManagerImpl if (!prefs.edit().clear().commit()) LOG.warning("Could not clear shared preferences"); } - // Delete files, except lib and shared_prefs directories + // Delete files, except protected directories Set files = new HashSet<>(); File dataDir = getDataDir(); @Nullable @@ -90,8 +98,7 @@ class AndroidAccountManager extends AccountManagerImpl LOG.warning("Could not list files in app data dir"); } else { for (File file : fileArray) { - String name = file.getName(); - if (!name.equals("lib") && !name.equals("shared_prefs")) { + if (!PROTECTED_DIR_NAMES.contains(file.getName())) { files.add(file); } } @@ -110,11 +117,15 @@ class AndroidAccountManager extends AccountManagerImpl } } for (File file : files) { + if (LOG.isLoggable(INFO)) { + LOG.info("Deleting " + file.getAbsolutePath()); + } deleteFileOrDir(file); } // Recreate the cache dir as some OpenGL drivers expect it to exist - if (!new File(dataDir, "cache").mkdirs()) + if (!new File(dataDir, "cache").mkdirs()) { LOG.warning("Could not recreate cache dir"); + } } private File getDataDir() { From e1e67f3b2ec0510b73b9d98f02323d1a5d6d5c86 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 25 Feb 2020 10:58:02 +0000 Subject: [PATCH 2/3] Clear the cache directory but don't delete it. --- .../bramble/account/AndroidAccountManager.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java index b0cb783d3..37460cc9b 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java @@ -36,7 +36,7 @@ class AndroidAccountManager extends AccountManagerImpl * Directories that shouldn't be deleted when deleting the user's account. */ private static final List PROTECTED_DIR_NAMES = - asList("code_cache", "lib", "shared_prefs"); + asList("cache", "code_cache", "lib", "shared_prefs"); protected final Context appContext; private final SharedPreferences prefs; @@ -104,7 +104,6 @@ class AndroidAccountManager extends AccountManagerImpl } } files.add(appContext.getFilesDir()); - files.add(appContext.getCacheDir()); addIfNotNull(files, appContext.getExternalCacheDir()); if (SDK_INT >= 19) { for (File file : appContext.getExternalCacheDirs()) { @@ -116,16 +115,16 @@ class AndroidAccountManager extends AccountManagerImpl addIfNotNull(files, file); } } + // Clear the cache directory but don't delete it + File cacheDir = appContext.getCacheDir(); + File[] children = cacheDir.listFiles(); + if (children != null) files.addAll(asList(children)); for (File file : files) { if (LOG.isLoggable(INFO)) { LOG.info("Deleting " + file.getAbsolutePath()); } deleteFileOrDir(file); } - // Recreate the cache dir as some OpenGL drivers expect it to exist - if (!new File(dataDir, "cache").mkdirs()) { - LOG.warning("Could not recreate cache dir"); - } } private File getDataDir() { From 4bdf966e677a733fc060b8008b790a606c64c132 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 25 Feb 2020 11:23:07 +0000 Subject: [PATCH 3/3] Test that code_cache directory isn't deleted. --- .../bramble/account/AndroidAccountManagerTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bramble-android/src/test/java/org/briarproject/bramble/account/AndroidAccountManagerTest.java b/bramble-android/src/test/java/org/briarproject/bramble/account/AndroidAccountManagerTest.java index 55d7b08ff..2b7b8bb88 100644 --- a/bramble-android/src/test/java/org/briarproject/bramble/account/AndroidAccountManagerTest.java +++ b/bramble-android/src/test/java/org/briarproject/bramble/account/AndroidAccountManagerTest.java @@ -72,7 +72,9 @@ public class AndroidAccountManagerTest extends BrambleMockTestCase { @Test public void testDeleteAccountClearsSharedPrefsAndDeletesFiles() throws Exception { - // Directories 'lib' and 'shared_prefs' should be spared + // Directories 'code_cache', 'lib' and 'shared_prefs' should be spared + File codeCacheDir = new File(testDir, "code_cache"); + File codeCacheFile = new File(codeCacheDir, "file"); File libDir = new File(testDir, "lib"); File libFile = new File(libDir, "file"); File sharedPrefsDir = new File(testDir, "shared_prefs"); @@ -111,6 +113,8 @@ public class AndroidAccountManagerTest extends BrambleMockTestCase { assertTrue(dbDir.mkdirs()); assertTrue(keyDir.mkdirs()); + assertTrue(codeCacheDir.mkdirs()); + assertTrue(codeCacheFile.createNewFile()); assertTrue(libDir.mkdirs()); assertTrue(libFile.createNewFile()); assertTrue(sharedPrefsDir.mkdirs()); @@ -126,6 +130,8 @@ public class AndroidAccountManagerTest extends BrambleMockTestCase { assertFalse(dbDir.exists()); assertFalse(keyDir.exists()); + assertTrue(codeCacheDir.exists()); + assertTrue(codeCacheFile.exists()); assertTrue(libDir.exists()); assertTrue(libFile.exists()); assertTrue(sharedPrefsDir.exists());