diff options
| author | Daniel Ramos <hiperzone@gmail.com> | 2015-04-14 03:40:59 +0100 | 
|---|---|---|
| committer | Daniel Ramos <hiperzone@gmail.com> | 2015-04-14 03:40:59 +0100 | 
| commit | d097131a3dcdf806608f43e49e0be96cf34f5c64 (patch) | |
| tree | be0f2aaddf41e8a902c2acfeae2dbb381a35b1ab /OpenKeychain/src/main/java | |
| parent | a545d50f4b90915274bba7de405b251b86fdf2fd (diff) | |
| download | open-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/main/java')
3 files changed, 79 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); +                        }                      }                  });              } | 
