From 886cad91f0827429441f75e03643aaf043bda14c Mon Sep 17 00:00:00 2001
From: Ernir Erlingsson <ernir@ymirmobile.com>
Date: Wed, 9 Dec 2015 10:29:34 +0100
Subject: [PATCH] Added a dialog and refactored code

---
 briar-android/res/values/strings.xml          |  6 +++++
 .../briarproject/android/BaseActivity.java    |  5 ++++
 .../android/PasswordActivity.java             | 24 +++++++++++++------
 .../android/util/BriarIOUtils.java            | 18 ++++++++++++++
 4 files changed, 46 insertions(+), 7 deletions(-)
 create mode 100644 briar-android/src/org/briarproject/android/util/BriarIOUtils.java

diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index f14644bd5e..2a3b21c7ab 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 61efc68bd7..db3628f06e 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 736991d901..86c3bc02eb 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 0000000000..f4a9ff38f4
--- /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);
+    }
+}
-- 
GitLab