aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2015-05-04 14:42:21 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2015-05-04 14:42:21 +0200
commit520f9abea309b5a703177b6e10b95ddb61443cc6 (patch)
treeb3eed905db2dfb99080dd136eb237f5bf940f827 /OpenKeychain
parent045ea93ee1d29ea680d4e095153eb89f6531c7b2 (diff)
parente159e619d299c0e91f3f9527186e50649657dd73 (diff)
downloadopen-keychain-520f9abea309b5a703177b6e10b95ddb61443cc6.tar.gz
open-keychain-520f9abea309b5a703177b6e10b95ddb61443cc6.tar.bz2
open-keychain-520f9abea309b5a703177b6e10b95ddb61443cc6.zip
Merge branch 'development' of https://github.com/Hiperzone/open-keychain into Hiperzone-development
Conflicts: OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java
Diffstat (limited to 'OpenKeychain')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java136
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEmailDialogFragment.java8
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml1
3 files changed, 94 insertions, 51 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 552fe6954..aeae8a1ad 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,18 +44,13 @@ 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 {
-
- CreateKeyActivity mCreateKeyActivity;
- EmailEditText mEmailEdit;
- RecyclerView mEmailsRecyclerView;
- View mBackButton;
- View mNextButton;
-
- ArrayList<EmailAdapter.ViewModel> mAdditionalEmailModels;
-
- EmailAdapter mEmailAdapter;
+ private CreateKeyActivity mCreateKeyActivity;
+ private EmailEditText mEmailEdit;
+ private ArrayList<EmailAdapter.ViewModel> mAdditionalEmailModels;
+ private EmailAdapter mEmailAdapter;
/**
* Creates new instance of this fragment
@@ -73,14 +68,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 {
@@ -95,9 +89,9 @@ public class CreateKeyEmailFragment extends Fragment {
View view = inflater.inflate(R.layout.create_key_email_fragment, container, false);
mEmailEdit = (EmailEditText) view.findViewById(R.id.create_key_email);
- mBackButton = view.findViewById(R.id.create_key_back_button);
- mNextButton = view.findViewById(R.id.create_key_next_button);
- mEmailsRecyclerView = (RecyclerView) view.findViewById(R.id.create_key_emails);
+ View backButton = view.findViewById(R.id.create_key_back_button);
+ View nextButton = view.findViewById(R.id.create_key_next_button);
+ RecyclerView emailsRecyclerView = (RecyclerView) view.findViewById(R.id.create_key_emails);
// initial values
mEmailEdit.setText(mCreateKeyActivity.mEmail);
@@ -106,21 +100,21 @@ public class CreateKeyEmailFragment extends Fragment {
if (mCreateKeyActivity.mEmail == null) {
mEmailEdit.requestFocus();
}
- mBackButton.setOnClickListener(new View.OnClickListener() {
+ backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCreateKeyActivity.loadFragment(null, FragAction.TO_LEFT);
}
});
- mNextButton.setOnClickListener(new View.OnClickListener() {
+ nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nextClicked();
}
});
- mEmailsRecyclerView.setHasFixedSize(true);
- mEmailsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- mEmailsRecyclerView.setItemAnimator(new DefaultItemAnimator());
+ emailsRecyclerView.setHasFixedSize(true);
+ emailsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ emailsRecyclerView.setItemAnimator(new DefaultItemAnimator());
// initial values
if (mAdditionalEmailModels == null) {
@@ -133,16 +127,79 @@ public class CreateKeyEmailFragment extends Fragment {
addEmail();
}
});
- }
- if (mAdditionalEmailModels.isEmpty() && mCreateKeyActivity.mAdditionalEmails != null) {
- mEmailAdapter.addAll(mCreateKeyActivity.mAdditionalEmails);
+
+ if (mCreateKeyActivity.mAdditionalEmails != null) {
+ mEmailAdapter.addAll(mCreateKeyActivity.mAdditionalEmails);
+ }
}
- mEmailsRecyclerView.setAdapter(mEmailAdapter);
+ emailsRecyclerView.setAdapter(mEmailAdapter);
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;
+ }
+
+ /**
+ * Displays a dialog fragment for the user to input a valid email.
+ */
private void addEmail() {
Handler returnHandler = new Handler() {
@Override
@@ -152,34 +209,17 @@ public class CreateKeyEmailFragment extends Fragment {
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(CreateKeyEmailFragment.this);
- return;
+ if (checkEmail(email, true)) {
+ // add new user id
+ mEmailAdapter.add(email);
}
- //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(CreateKeyEmailFragment.this);
- return;
- }
- }
-
- // add new user id
- mEmailAdapter.add(email);
}
}
};
-
// Create a new Messenger for the communication back
Messenger messenger = new Messenger(returnHandler);
AddEmailDialogFragment addEmailDialog = AddEmailDialogFragment.newInstance(messenger);
-
addEmailDialog.show(getActivity().getSupportFragmentManager(), "addEmailDialog");
}
@@ -190,7 +230,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/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/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 61ef859c3..72ba46702 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -643,6 +643,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>