diff --git a/briar-android/briar-android.iml b/briar-android/briar-android.iml index c465a22dca8094e080d71df7c153fd1d67f7cf8b..87ea5834446bf83e8bf8fdc38d7ce7dfd8f347e5 100644 --- a/briar-android/briar-android.iml +++ b/briar-android/briar-android.iml @@ -59,6 +59,18 @@ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index f14644bd5e08cdf82f9e16ad609d63195b91e187..2a3b21c7ab45b2271b0f97f6791b666078a67d89 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -16,6 +16,8 @@ <string name="create_account_button">Create Account</string> <string name="enter_password">Enter your password:</string> <string name="password_hint">Password</string> + <string name="yes">Yes</string> + <string name="no">No</string> <string name="forgotten_password">I have forgotten my password</string> <string name="try_again">Wrong password, try again:</string> <string name="sign_in_button">Sign In</string> @@ -108,4 +110,8 @@ <string name="notify_sound_setting_default">Default ringtone</string> <string name="notify_sound_setting_disabled">None</string> <string name="choose_ringtone_title">Choose ringtone</string> + + <!-- Dialogs --> + <string name="dialog_title_lost_password">Lost password</string> + <string name="dialog_message_lost_password">Password recovery is not possible. Do you wish to delete your user and re-register ?</string> </resources> \ No newline at end of file diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java index 61efc68bd7eac2d43f6d83b9133154e8fce45c6f..db3628f06e86f23c3333b97b5e209fcaa5235ae1 100644 --- a/briar-android/src/org/briarproject/android/BaseActivity.java +++ b/briar-android/src/org/briarproject/android/BaseActivity.java @@ -48,6 +48,11 @@ public abstract class BaseActivity extends RoboActivity { this.finish(); } + protected void gotoAndFinish(Class classInstance) + { + this.gotoAndFinish(classInstance, Integer.MIN_VALUE); + } + protected void hideSoftKeyboard() { Object o = getSystemService(INPUT_METHOD_SERVICE); diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/org/briarproject/android/PasswordActivity.java index 736991d901a61e7f8a74ee1008b56e0671a457a8..86c3bc02eb77eb243f6b5852a13f3b141317a7ef 100644 --- a/briar-android/src/org/briarproject/android/PasswordActivity.java +++ b/briar-android/src/org/briarproject/android/PasswordActivity.java @@ -9,12 +9,15 @@ import java.util.concurrent.Executor; import javax.inject.Inject; import org.briarproject.R; +import org.briarproject.android.util.BriarIOUtils; import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoExecutor; import org.briarproject.api.crypto.SecretKey; import org.briarproject.api.db.DatabaseConfig; import org.briarproject.util.StringUtils; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.os.Bundle; import android.text.Editable; import android.view.KeyEvent; @@ -70,7 +73,7 @@ public class PasswordActivity extends BaseActivity { @Override protected void clearDbPrefs() { super.clearDbPrefs(); - this.delete(databaseConfig.getDatabaseDirectory()); + BriarIOUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory()); this.gotoAndFinish(SetupActivity.class, RESULT_CANCELED); } @@ -79,12 +82,19 @@ public class PasswordActivity extends BaseActivity { } public void onForgottenPasswordClick(View v) { - this.clearDbPrefs(); - } - - private void delete(File f) { - if (f.isFile()) f.delete(); - else if (f.isDirectory()) for (File child : f.listFiles()) delete(child); + // TODO Encapsulate the dialog in a re-usable fragment + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.dialog_title_lost_password); + builder.setMessage(R.string.dialog_message_lost_password); + builder.setNegativeButton(R.string.no, null); + builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + PasswordActivity.this.clearDbPrefs(); + } + }); + AlertDialog dialog = builder.create(); + dialog.show(); } private void validatePassword(final byte[] encrypted, Editable e) { diff --git a/briar-android/src/org/briarproject/android/util/BriarIOUtils.java b/briar-android/src/org/briarproject/android/util/BriarIOUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..f4a9ff38f45b26b039b05f36611dda0307d8f45c --- /dev/null +++ b/briar-android/src/org/briarproject/android/util/BriarIOUtils.java @@ -0,0 +1,18 @@ +package org.briarproject.android.util; + +import java.io.File; + +/** + * Created by Ernir Erlingsson (ernir@ymirmobile.com) on 9.12.2015. + */ +public class BriarIOUtils { + + public static void deleteFileOrDir(File f) + { + if (f.isFile()) + f.delete(); + else if (f.isDirectory()) + for (File child : f.listFiles()) + deleteFileOrDir(child); + } +}