From 74159f6e71f4be8c3b200cde6bd22be8345b4d2f Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Sun, 2 Mar 2014 18:37:24 +0000 Subject: [PATCH] Check whether data has been deleted when resuming from recents. Bug #44. --- .../android/PasswordActivity.java | 17 +++++++++++++- .../android/SplashScreenActivity.java | 22 ++++++++++++++----- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/org/briarproject/android/PasswordActivity.java index 64ddd1080c..22791219ca 100644 --- a/briar-android/src/org/briarproject/android/PasswordActivity.java +++ b/briar-android/src/org/briarproject/android/PasswordActivity.java @@ -11,6 +11,7 @@ import static android.widget.LinearLayout.VERTICAL; import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH; import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP; +import java.io.File; import java.util.concurrent.Executor; import javax.inject.Inject; @@ -24,6 +25,7 @@ import org.briarproject.api.db.DatabaseConfig; import org.briarproject.util.StringUtils; import roboguice.activity.RoboActivity; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.Editable; @@ -55,7 +57,15 @@ public class PasswordActivity extends RoboActivity { SharedPreferences prefs = getSharedPreferences("db", MODE_PRIVATE); String hex = prefs.getString("key", null); - if(hex == null) throw new IllegalStateException(); + if(hex == null || !databaseConfig.databaseExists()) { + // Storage has been deleted - clean up and return to setup + prefs.edit().clear().commit(); + delete(databaseConfig.getDatabaseDirectory()); + setResult(RESULT_CANCELED); + startActivity(new Intent(this, SetupActivity.class)); + finish(); + return; + } final byte[] encrypted = StringUtils.fromHexString(hex); LinearLayout layout = new LinearLayout(this); @@ -107,6 +117,11 @@ public class PasswordActivity extends RoboActivity { setContentView(layout); } + private void delete(File f) { + if(f.isFile()) f.delete(); + else if(f.isDirectory()) for(File child : f.listFiles()) delete(child); + } + private void validatePassword(final byte[] encrypted, Editable e) { if(enterPassword == null || continueButton == null || progress == null) return; diff --git a/briar-android/src/org/briarproject/android/SplashScreenActivity.java b/briar-android/src/org/briarproject/android/SplashScreenActivity.java index 9467183bd3..e8040226e0 100644 --- a/briar-android/src/org/briarproject/android/SplashScreenActivity.java +++ b/briar-android/src/org/briarproject/android/SplashScreenActivity.java @@ -4,6 +4,7 @@ import static android.view.Gravity.CENTER; import static java.util.logging.Level.INFO; import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH; +import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; @@ -13,8 +14,8 @@ import org.briarproject.api.db.DatabaseConfig; import roboguice.RoboGuice; import roboguice.activity.RoboSplashActivity; -import android.app.Application; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; import android.widget.ImageView; @@ -66,11 +67,22 @@ public class SplashScreenActivity extends RoboSplashActivity { if(LOG.isLoggable(INFO)) LOG.info("Expired"); startActivity(new Intent(this, ExpiredActivity.class)); } else { - Application app = getApplication(); - Injector guice = RoboGuice.getBaseApplicationInjector(app); - if(guice.getInstance(DatabaseConfig.class).databaseExists()) + SharedPreferences prefs = getSharedPreferences("db", MODE_PRIVATE); + String hex = prefs.getString("key", null); + Injector i = RoboGuice.getBaseApplicationInjector(getApplication()); + DatabaseConfig databaseConfig = i.getInstance(DatabaseConfig.class); + if(hex != null && databaseConfig.databaseExists()) { startActivity(new Intent(this, DashboardActivity.class)); - else startActivity(new Intent(this, SetupActivity.class)); + } else { + prefs.edit().clear().commit(); + delete(databaseConfig.getDatabaseDirectory()); + startActivity(new Intent(this, SetupActivity.class)); + } } } + + private void delete(File f) { + if(f.isFile()) f.delete(); + else if(f.isDirectory()) for(File child : f.listFiles()) delete(child); + } } -- GitLab