diff options
Diffstat (limited to 'OpenKeychain/src/main')
5 files changed, 92 insertions, 44 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..8fdfb35cb 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,16 @@ 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 RecyclerView mEmailsRecyclerView; +    private View mBackButton; +    private View mNextButton; +    private ArrayList<EmailAdapter.ViewModel> mAdditionalEmailModels; +    private EmailAdapter mEmailAdapter;      /**       * Creates new instance of this fragment @@ -73,14 +71,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,9 +122,6 @@ public class CreateKeyEmailFragment extends Fragment {          // initial values          if (mAdditionalEmailModels == null) {              mAdditionalEmailModels = new ArrayList<>(); -            if (mCreateKeyActivity.mAdditionalEmails != null) { -                mEmailAdapter.addAll(mCreateKeyActivity.mAdditionalEmails); -            }          }          if (mEmailAdapter == null) { @@ -137,6 +131,10 @@ public class CreateKeyEmailFragment extends Fragment {                      addEmail();                  }              }); + +            if (mCreateKeyActivity.mAdditionalEmails != null) { +                mEmailAdapter.addAll(mCreateKeyActivity.mAdditionalEmails); +            }          }          mEmailsRecyclerView.setAdapter(mEmailAdapter); @@ -144,6 +142,68 @@ 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; +    } + +    /** +     * Displays a dialog fragment for the user to input a valid email. +     */      private void addEmail() {          Handler returnHandler = new Handler() {              @Override @@ -152,35 +212,18 @@ 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);                  }              }          }; -          // Create a new Messenger for the communication back -        Messenger messenger = new Messenger(returnHandler); +        Messenger messenger =  new Messenger(returnHandler);          AddEmailDialogFragment addEmailDialog = AddEmailDialogFragment.newInstance(messenger); - +        addEmailDialog.setTargetFragment(this, -1);          addEmailDialog.show(getActivity().getSupportFragmentManager(), "addEmailDialog");      } @@ -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/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 df88336a1..33fc362a1 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -639,6 +639,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> | 
