Check whether data has been deleted when resuming from recents. Bug #44.

This commit is contained in:
akwizgran
2014-03-02 18:37:24 +00:00
parent 581ba7139a
commit 74159f6e71
2 changed files with 33 additions and 6 deletions

View File

@@ -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.MATCH_MATCH;
import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP; import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
import java.io.File;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import javax.inject.Inject; import javax.inject.Inject;
@@ -24,6 +25,7 @@ import org.briarproject.api.db.DatabaseConfig;
import org.briarproject.util.StringUtils; import org.briarproject.util.StringUtils;
import roboguice.activity.RoboActivity; import roboguice.activity.RoboActivity;
import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
@@ -55,7 +57,15 @@ public class PasswordActivity extends RoboActivity {
SharedPreferences prefs = getSharedPreferences("db", MODE_PRIVATE); SharedPreferences prefs = getSharedPreferences("db", MODE_PRIVATE);
String hex = prefs.getString("key", null); 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); final byte[] encrypted = StringUtils.fromHexString(hex);
LinearLayout layout = new LinearLayout(this); LinearLayout layout = new LinearLayout(this);
@@ -107,6 +117,11 @@ public class PasswordActivity extends RoboActivity {
setContentView(layout); 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) { private void validatePassword(final byte[] encrypted, Editable e) {
if(enterPassword == null || continueButton == null || progress == null) if(enterPassword == null || continueButton == null || progress == null)
return; return;

View File

@@ -4,6 +4,7 @@ import static android.view.Gravity.CENTER;
import static java.util.logging.Level.INFO; import static java.util.logging.Level.INFO;
import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH; import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
import java.io.File;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -13,8 +14,8 @@ import org.briarproject.api.db.DatabaseConfig;
import roboguice.RoboGuice; import roboguice.RoboGuice;
import roboguice.activity.RoboSplashActivity; import roboguice.activity.RoboSplashActivity;
import android.app.Application;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.widget.ImageView; import android.widget.ImageView;
@@ -66,11 +67,22 @@ public class SplashScreenActivity extends RoboSplashActivity {
if(LOG.isLoggable(INFO)) LOG.info("Expired"); if(LOG.isLoggable(INFO)) LOG.info("Expired");
startActivity(new Intent(this, ExpiredActivity.class)); startActivity(new Intent(this, ExpiredActivity.class));
} else { } else {
Application app = getApplication(); SharedPreferences prefs = getSharedPreferences("db", MODE_PRIVATE);
Injector guice = RoboGuice.getBaseApplicationInjector(app); String hex = prefs.getString("key", null);
if(guice.getInstance(DatabaseConfig.class).databaseExists()) Injector i = RoboGuice.getBaseApplicationInjector(getApplication());
DatabaseConfig databaseConfig = i.getInstance(DatabaseConfig.class);
if(hex != null && databaseConfig.databaseExists()) {
startActivity(new Intent(this, DashboardActivity.class)); 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);
}
} }