aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src
diff options
context:
space:
mode:
authorDaniel Ramos <hiperzone@gmail.com>2015-04-14 03:40:59 +0100
committerDaniel Ramos <hiperzone@gmail.com>2015-04-14 03:40:59 +0100
commitd097131a3dcdf806608f43e49e0be96cf34f5c64 (patch)
treebe0f2aaddf41e8a902c2acfeae2dbb381a35b1ab /OpenKeychain/src
parenta545d50f4b90915274bba7de405b251b86fdf2fd (diff)
downloadopen-keychain-d097131a3dcdf806608f43e49e0be96cf34f5c64.tar.gz
open-keychain-d097131a3dcdf806608f43e49e0be96cf34f5c64.tar.bz2
open-keychain-d097131a3dcdf806608f43e49e0be96cf34f5c64.zip
-Improved email sanity verifications when adding emails when creating a new Key
-fixed a few NFC crashes -fixed a few instances when showing the keyboard would crash the Activity -fixed a case where adding new emails would crash the app if the user went back and forth between the Add Email fragment and the Add Name fragment.
Diffstat (limited to 'OpenKeychain/src')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java95
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java6
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEmailDialogFragment.java8
-rw-r--r--OpenKeychain/src/main/res/layout/add_email_dialog.xml1
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_email_fragment.xml1
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml1
6 files changed, 82 insertions, 30 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java
index 85e2f8e9d..26c307957 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java
@@ -18,7 +18,6 @@
package org.sufficientlysecure.keychain.ui;
import android.app.Activity;
-import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -27,6 +26,7 @@ import android.support.v4.app.Fragment;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
+import android.util.Patterns;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -44,6 +44,7 @@ import org.sufficientlysecure.keychain.ui.widget.EmailEditText;
import java.util.ArrayList;
import java.util.List;
+import java.util.regex.Pattern;
public class CreateKeyEmailFragment extends Fragment {
@@ -73,14 +74,13 @@ public class CreateKeyEmailFragment extends Fragment {
* Checks if text of given EditText is not empty. If it is empty an error is
* set and the EditText gets the focus.
*
- * @param context
* @param editText
* @return true if EditText is not empty
*/
- private static boolean isEditTextNotEmpty(Context context, EditText editText) {
+ private boolean isMainEmailValid(EditText editText) {
boolean output = true;
- if (editText.getText().length() == 0) {
- editText.setError(context.getString(R.string.create_key_empty));
+ if (!checkEmail(editText.getText().toString(), false)) {
+ editText.setError(getString(R.string.create_key_empty));
editText.requestFocus();
output = false;
} else {
@@ -125,7 +125,7 @@ public class CreateKeyEmailFragment extends Fragment {
// initial values
if (mAdditionalEmailModels == null) {
mAdditionalEmailModels = new ArrayList<>();
- if (mCreateKeyActivity.mAdditionalEmails != null) {
+ if (mCreateKeyActivity.mAdditionalEmails != null && mEmailAdapter != null) {
mEmailAdapter.addAll(mCreateKeyActivity.mAdditionalEmails);
}
}
@@ -144,6 +144,65 @@ public class CreateKeyEmailFragment extends Fragment {
return view;
}
+ /**
+ * Checks if a given email is valid
+ *
+ * @param email
+ * @param additionalEmail
+ * @return
+ */
+ private boolean checkEmail(String email, boolean additionalEmail) {
+ //check for email format or if the user did any input
+ if (!isEmailFormatValid(email)) {
+ Notify.create(getActivity(),
+ getString(R.string.create_key_email_invalid_email),
+ Notify.LENGTH_LONG, Notify.Style.ERROR).show();
+ return false;
+ }
+
+ //check for duplicated emails
+ if (!additionalEmail && isEmailDuplicatedInsideAdapter(email) || additionalEmail &&
+ mEmailEdit.getText().length() > 0 && email.equals(mEmailEdit.getText().toString())) {
+ Notify.create(getActivity(),
+ getString(R.string.create_key_email_already_exists_text),
+ Notify.LENGTH_LONG, Notify.Style.ERROR).show();
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks the email format
+ * Uses the default Android Email Pattern
+ *
+ * @param email
+ * @return
+ */
+ private boolean isEmailFormatValid(String email) {
+ Pattern emailPattern = Patterns.EMAIL_ADDRESS;
+
+ //check for email format or if the user did any input
+ return !(email.length() == 0 || !emailPattern.matcher(email).matches());
+ }
+
+ /**
+ * Checks for duplicated emails inside the additional email adapter.
+ *
+ * @param email
+ * @return
+ */
+ private boolean isEmailDuplicatedInsideAdapter(String email) {
+ //check for duplicated emails inside the adapter
+ for (EmailAdapter.ViewModel model : mAdditionalEmailModels) {
+ if (email.equals(model.email)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
private void addEmail() {
Handler returnHandler = new Handler() {
@Override
@@ -152,26 +211,10 @@ public class CreateKeyEmailFragment extends Fragment {
Bundle data = message.getData();
String email = data.getString(AddEmailDialogFragment.MESSAGE_DATA_EMAIL);
-
- if (email.length() > 0 && mEmailEdit.getText().length() > 0 &&
- email.equals(mEmailEdit.getText().toString())) {
- Notify.create(getActivity(),
- getString(R.string.create_key_email_already_exists_text),
- Notify.LENGTH_LONG, Notify.Style.ERROR).show();
- return;
- }
- //check for duplicated emails inside the adapter
- for (EmailAdapter.ViewModel model : mAdditionalEmailModels) {
- if (email.equals(model.email)) {
- Notify.create(getActivity(),
- getString(R.string.create_key_email_already_exists_text),
- Notify.LENGTH_LONG, Notify.Style.ERROR).show();
- return;
- }
+ if (checkEmail(email, true)) {
+ // add new user id
+ mEmailAdapter.add(email);
}
-
- // add new user id
- mEmailAdapter.add(email);
}
}
};
@@ -191,7 +234,7 @@ public class CreateKeyEmailFragment extends Fragment {
}
private void nextClicked() {
- if (isEditTextNotEmpty(getActivity(), mEmailEdit)) {
+ if (isMainEmailValid(mEmailEdit)) {
// save state
mCreateKeyActivity.mEmail = mEmailEdit.getText().toString();
mCreateKeyActivity.mAdditionalEmails = getAdditionalEmails();
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
index 9b10ccdb1..4f6d5807e 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
@@ -451,6 +451,8 @@ public abstract class BaseNfcActivity extends BaseActivity {
*/
public void enableNfcForegroundDispatch() {
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
+ if(mNfcAdapter == null) return;
+
Intent nfcI = new Intent(this, getClass())
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent nfcPendingIntent = PendingIntent.getActivity(this, 0, nfcI, PendingIntent.FLAG_CANCEL_CURRENT);
@@ -472,7 +474,9 @@ public abstract class BaseNfcActivity extends BaseActivity {
* Disable foreground dispatch in onPause!
*/
public void disableNfcForegroundDispatch() {
- mNfcAdapter.disableForegroundDispatch(this);
+ if(mNfcAdapter != null) {
+ mNfcAdapter.disableForegroundDispatch(this);
+ }
Log.d(Constants.TAG, "NfcForegroundDispatch has been disabled!");
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEmailDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEmailDialogFragment.java
index 5d5ca533e..5b91b9d37 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEmailDialogFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEmailDialogFragment.java
@@ -112,9 +112,11 @@ public class AddEmailDialogFragment extends DialogFragment implements OnEditorAc
mEmail.post(new Runnable() {
@Override
public void run() {
- InputMethodManager imm = (InputMethodManager) getActivity()
- .getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(mEmail, InputMethodManager.SHOW_IMPLICIT);
+ if(getActivity() != null) {
+ InputMethodManager imm = (InputMethodManager) getActivity()
+ .getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(mEmail, InputMethodManager.SHOW_IMPLICIT);
+ }
}
});
}
diff --git a/OpenKeychain/src/main/res/layout/add_email_dialog.xml b/OpenKeychain/src/main/res/layout/add_email_dialog.xml
index 68d895145..2de657a40 100644
--- a/OpenKeychain/src/main/res/layout/add_email_dialog.xml
+++ b/OpenKeychain/src/main/res/layout/add_email_dialog.xml
@@ -21,6 +21,7 @@
android:layout_marginTop="16dp"
android:hint="@string/label_email"
android:imeOptions="actionNext"
+ android:inputType="textEmailAddress"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
diff --git a/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml
index 17cfe54ac..7b9cffec4 100644
--- a/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml
@@ -32,6 +32,7 @@
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:imeOptions="actionNext"
+ android:inputType="textEmailAddress"
android:hint="@string/label_email"
android:ems="10" />
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index c1e3b51f9..c1ff5a1d1 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -631,6 +631,7 @@
<string name="create_key_add_email">"Add email address"</string>
<string name="create_key_add_email_text">"Additional email addresses are also associated to this key and can be used for secure communication."</string>
<string name="create_key_email_already_exists_text">"Email address has already been added"</string>
+ <string name="create_key_email_invalid_email">"Email address format is invalid"</string>
<!-- View key -->
<string name="view_key_revoked">"Revoked: Key must not be used anymore!"</string>