mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 04:39:54 +01:00
Merge branch '263-delete-all-the-things' into 'master'
Delete all app data when deleting account. #263 When deleting the user's account, delete everything in the app's persistent storage directory except the libs directory, which is populated with native libs when the app is installed. Fixes #263. See merge request !119
This commit is contained in:
@@ -38,8 +38,9 @@ import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
|
|||||||
public abstract class BaseActivity extends AppCompatActivity
|
public abstract class BaseActivity extends AppCompatActivity
|
||||||
implements RoboContext {
|
implements RoboContext {
|
||||||
|
|
||||||
private final static String PREFS_DB = "db";
|
public final static String PREFS_NAME = "db";
|
||||||
private final static String PREFS_KEY = "key";
|
public final static String PREF_DB_KEY = "key";
|
||||||
|
public final static String PREF_SEEN_WELCOME_MESSAGE = "welcome_message";
|
||||||
|
|
||||||
private final HashMap<Key<?>, Object> scopedObjects =
|
private final HashMap<Key<?>, Object> scopedObjects =
|
||||||
new HashMap<Key<?>, Object>();
|
new HashMap<Key<?>, Object>();
|
||||||
@@ -128,18 +129,17 @@ public abstract class BaseActivity extends AppCompatActivity
|
|||||||
return scopedObjects;
|
return scopedObjects;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Factor out prefs code so it can be used by SplashScreenActivity
|
|
||||||
private SharedPreferences getSharedPrefs() {
|
private SharedPreferences getSharedPrefs() {
|
||||||
return getSharedPreferences(PREFS_DB, MODE_PRIVATE);
|
return getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getEncryptedDatabaseKey() {
|
protected String getEncryptedDatabaseKey() {
|
||||||
return getSharedPrefs().getString(PREFS_KEY, null);
|
return getSharedPrefs().getString(PREF_DB_KEY, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void storeEncryptedDatabaseKey(final String hex) {
|
protected void storeEncryptedDatabaseKey(final String hex) {
|
||||||
SharedPreferences.Editor editor = getSharedPrefs().edit();
|
SharedPreferences.Editor editor = getSharedPrefs().edit();
|
||||||
editor.putString(PREFS_KEY, hex);
|
editor.putString(PREF_DB_KEY, hex);
|
||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package org.briarproject.android;
|
package org.briarproject.android;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
@@ -20,9 +19,9 @@ import android.widget.ImageView;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.android.fragment.BaseFragment;
|
|
||||||
import org.briarproject.android.contact.ContactListFragment;
|
import org.briarproject.android.contact.ContactListFragment;
|
||||||
import org.briarproject.android.forum.ForumListFragment;
|
import org.briarproject.android.forum.ForumListFragment;
|
||||||
|
import org.briarproject.android.fragment.BaseFragment;
|
||||||
import org.briarproject.android.fragment.SettingsFragment;
|
import org.briarproject.android.fragment.SettingsFragment;
|
||||||
import org.briarproject.android.util.CustomAnimations;
|
import org.briarproject.android.util.CustomAnimations;
|
||||||
import org.briarproject.api.TransportId;
|
import org.briarproject.api.TransportId;
|
||||||
@@ -59,9 +58,6 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
|
|||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(NavDrawerActivity.class.getName());
|
Logger.getLogger(NavDrawerActivity.class.getName());
|
||||||
|
|
||||||
private final static String PREFS_USER_SETTINGS = "prefs_user_settings";
|
|
||||||
private final static String KEY_SEEN_WELCOME_MESSAGE = "welcome_message";
|
|
||||||
|
|
||||||
private ActionBarDrawerToggle drawerToggle;
|
private ActionBarDrawerToggle drawerToggle;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@@ -149,12 +145,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void welcomeMessageCheck() {
|
private void welcomeMessageCheck() {
|
||||||
SharedPreferences prefs = getSharedPreferences(PREFS_USER_SETTINGS,
|
SharedPreferences prefs = getSharedPreferences(PREFS_NAME,
|
||||||
Context.MODE_PRIVATE);
|
MODE_PRIVATE);
|
||||||
if (!prefs.getBoolean(KEY_SEEN_WELCOME_MESSAGE, false)) {
|
if (!prefs.getBoolean(PREF_SEEN_WELCOME_MESSAGE, false)) {
|
||||||
showMessageDialog(R.string.dialog_title_welcome,
|
showMessageDialog(R.string.dialog_title_welcome,
|
||||||
R.string.dialog_welcome_message);
|
R.string.dialog_welcome_message);
|
||||||
prefs.edit().putBoolean(KEY_SEEN_WELCOME_MESSAGE, true).apply();
|
prefs.edit().putBoolean(PREF_SEEN_WELCOME_MESSAGE, true).apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import org.briarproject.api.crypto.CryptoComponent;
|
|||||||
import org.briarproject.api.crypto.CryptoExecutor;
|
import org.briarproject.api.crypto.CryptoExecutor;
|
||||||
import org.briarproject.api.crypto.SecretKey;
|
import org.briarproject.api.crypto.SecretKey;
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
import org.briarproject.api.db.DatabaseConfig;
|
||||||
import org.briarproject.util.FileUtils;
|
|
||||||
import org.briarproject.util.StringUtils;
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
@@ -53,7 +52,7 @@ public class PasswordActivity extends BaseActivity {
|
|||||||
|
|
||||||
String hex = getEncryptedDatabaseKey();
|
String hex = getEncryptedDatabaseKey();
|
||||||
if (hex == null || !databaseConfig.databaseExists()) {
|
if (hex == null || !databaseConfig.databaseExists()) {
|
||||||
clearSharedPrefsAndDeleteDatabase();
|
clearSharedPrefsAndDeleteEverything();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
encrypted = StringUtils.fromHexString(hex);
|
encrypted = StringUtils.fromHexString(hex);
|
||||||
@@ -96,9 +95,9 @@ public class PasswordActivity extends BaseActivity {
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearSharedPrefsAndDeleteDatabase() {
|
private void clearSharedPrefsAndDeleteEverything() {
|
||||||
clearSharedPrefs();
|
clearSharedPrefs();
|
||||||
FileUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory());
|
AndroidUtils.deleteAppData(this);
|
||||||
setResult(RESULT_CANCELED);
|
setResult(RESULT_CANCELED);
|
||||||
startActivity(new Intent(this, SetupActivity.class));
|
startActivity(new Intent(this, SetupActivity.class));
|
||||||
finish();
|
finish();
|
||||||
@@ -118,7 +117,7 @@ public class PasswordActivity extends BaseActivity {
|
|||||||
new DialogInterface.OnClickListener() {
|
new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
clearSharedPrefsAndDeleteDatabase();
|
clearSharedPrefsAndDeleteEverything();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
AlertDialog dialog = builder.create();
|
AlertDialog dialog = builder.create();
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import android.widget.LinearLayout;
|
|||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
|
|
||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
|
import org.briarproject.android.util.AndroidUtils;
|
||||||
import org.briarproject.android.util.LayoutUtils;
|
import org.briarproject.android.util.LayoutUtils;
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
import org.briarproject.api.db.DatabaseConfig;
|
||||||
import org.briarproject.util.FileUtils;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@@ -26,6 +26,8 @@ import roboguice.activity.RoboSplashActivity;
|
|||||||
import static android.view.Gravity.CENTER;
|
import static android.view.Gravity.CENTER;
|
||||||
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
|
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
|
||||||
import static java.util.logging.Level.INFO;
|
import static java.util.logging.Level.INFO;
|
||||||
|
import static org.briarproject.android.BaseActivity.PREFS_NAME;
|
||||||
|
import static org.briarproject.android.BaseActivity.PREF_DB_KEY;
|
||||||
import static org.briarproject.android.TestingConstants.DEFAULT_LOG_LEVEL;
|
import static org.briarproject.android.TestingConstants.DEFAULT_LOG_LEVEL;
|
||||||
import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
|
import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
|
||||||
import static org.briarproject.android.TestingConstants.TESTING;
|
import static org.briarproject.android.TestingConstants.TESTING;
|
||||||
@@ -79,16 +81,16 @@ public class SplashScreenActivity extends RoboSplashActivity {
|
|||||||
LOG.info("Expired");
|
LOG.info("Expired");
|
||||||
startActivity(new Intent(this, ExpiredActivity.class));
|
startActivity(new Intent(this, ExpiredActivity.class));
|
||||||
} else {
|
} else {
|
||||||
SharedPreferences prefs = getSharedPreferences("db", MODE_PRIVATE);
|
SharedPreferences prefs = getSharedPreferences(PREFS_NAME,
|
||||||
String hex = prefs.getString("key", null);
|
MODE_PRIVATE);
|
||||||
|
String hex = prefs.getString(PREF_DB_KEY, null);
|
||||||
Injector i = RoboGuice.getBaseApplicationInjector(getApplication());
|
Injector i = RoboGuice.getBaseApplicationInjector(getApplication());
|
||||||
DatabaseConfig databaseConfig = i.getInstance(DatabaseConfig.class);
|
DatabaseConfig databaseConfig = i.getInstance(DatabaseConfig.class);
|
||||||
if (hex != null && databaseConfig.databaseExists()) {
|
if (hex != null && databaseConfig.databaseExists()) {
|
||||||
startActivity(new Intent(this, NavDrawerActivity.class));
|
startActivity(new Intent(this, NavDrawerActivity.class));
|
||||||
} else {
|
} else {
|
||||||
prefs.edit().clear().apply();
|
prefs.edit().clear().apply();
|
||||||
FileUtils.deleteFileOrDir(
|
AndroidUtils.deleteAppData(this);
|
||||||
databaseConfig.getDatabaseDirectory());
|
|
||||||
startActivity(new Intent(this, SetupActivity.class));
|
startActivity(new Intent(this, SetupActivity.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,14 +8,11 @@ import android.os.Bundle;
|
|||||||
import android.support.v7.preference.PreferenceManager;
|
import android.support.v7.preference.PreferenceManager;
|
||||||
|
|
||||||
import org.briarproject.android.BriarActivity;
|
import org.briarproject.android.BriarActivity;
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
import org.briarproject.android.util.AndroidUtils;
|
||||||
import org.briarproject.util.FileUtils;
|
|
||||||
import org.iilab.IilabEngineeringRSA2048Pin;
|
import org.iilab.IilabEngineeringRSA2048Pin;
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import info.guardianproject.GuardianProjectRSA4096;
|
import info.guardianproject.GuardianProjectRSA4096;
|
||||||
import info.guardianproject.panic.Panic;
|
import info.guardianproject.panic.Panic;
|
||||||
import info.guardianproject.panic.PanicResponder;
|
import info.guardianproject.panic.PanicResponder;
|
||||||
@@ -29,7 +26,6 @@ public class PanicResponderActivity extends BriarActivity {
|
|||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(PanicResponderActivity.class.getName());
|
Logger.getLogger(PanicResponderActivity.class.getName());
|
||||||
@Inject private DatabaseConfig databaseConfig;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -105,9 +101,7 @@ public class PanicResponderActivity extends BriarActivity {
|
|||||||
public void run() {
|
public void run() {
|
||||||
clearSharedPrefs();
|
clearSharedPrefs();
|
||||||
// TODO somehow delete/shred the database more thoroughly
|
// TODO somehow delete/shred the database more thoroughly
|
||||||
FileUtils
|
AndroidUtils.deleteAppData(PanicResponderActivity.this);
|
||||||
.deleteFileOrDir(
|
|
||||||
databaseConfig.getDatabaseDirectory());
|
|
||||||
PanicResponder.deleteAllAppData(PanicResponderActivity.this);
|
PanicResponder.deleteAllAppData(PanicResponderActivity.this);
|
||||||
|
|
||||||
// nothing left to do after everything is deleted,
|
// nothing left to do after everything is deleted,
|
||||||
|
|||||||
@@ -7,8 +7,10 @@ import android.os.Build;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.design.widget.TextInputLayout;
|
import android.support.design.widget.TextInputLayout;
|
||||||
|
|
||||||
|
import org.briarproject.util.FileUtils;
|
||||||
import org.briarproject.util.StringUtils;
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -71,4 +73,15 @@ public class AndroidUtils {
|
|||||||
&& BluetoothAdapter.checkBluetoothAddress(address)
|
&& BluetoothAdapter.checkBluetoothAddress(address)
|
||||||
&& !address.equals(FAKE_BLUETOOTH_ADDRESS);
|
&& !address.equals(FAKE_BLUETOOTH_ADDRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void deleteAppData(Context ctx) {
|
||||||
|
File dataDir = new File(ctx.getApplicationInfo().dataDir);
|
||||||
|
File[] children = dataDir.listFiles();
|
||||||
|
if (children != null) {
|
||||||
|
for (File child : children) {
|
||||||
|
if (!child.getName().equals("lib"))
|
||||||
|
FileUtils.deleteFileOrDir(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ public class FileUtils {
|
|||||||
if (f.isFile()) {
|
if (f.isFile()) {
|
||||||
f.delete();
|
f.delete();
|
||||||
} else if (f.isDirectory()) {
|
} else if (f.isDirectory()) {
|
||||||
for (File child : f.listFiles()) deleteFileOrDir(child);
|
File[] children = f.listFiles();
|
||||||
|
if (children != null)
|
||||||
|
for (File child : children) deleteFileOrDir(child);
|
||||||
f.delete();
|
f.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user