diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/org/briarproject/android/PasswordActivity.java index 64ddd1080c243fd89738cdd97e63937946e410aa..22791219ca91785ecdffa836da54fafc556689cb 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 9467183bd39a54d8523e1771456240db8032951c..e8040226e0049082fef8a78539beea2c34e69ffa 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); + } }