mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-23 17:22:16 -05:00
Merge branch 'feature/emailImprovements' into localdev
This commit is contained in:
commit
76841ca873
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Create a new Messenger for the communication back
|
||||
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();
|
||||
|
@ -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() {
|
||||
if(mNfcAdapter != null) {
|
||||
mNfcAdapter.disableForegroundDispatch(this);
|
||||
}
|
||||
Log.d(Constants.TAG, "NfcForegroundDispatch has been disabled!");
|
||||
}
|
||||
|
||||
|
@ -112,10 +112,12 @@ public class AddEmailDialogFragment extends DialogFragment implements OnEditorAc
|
||||
mEmail.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(getActivity() != null) {
|
||||
InputMethodManager imm = (InputMethodManager) getActivity()
|
||||
.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.showSoftInput(mEmail, InputMethodManager.SHOW_IMPLICIT);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -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>
|
||||
|
@ -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" />
|
||||
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user