diff --git a/app/src/main/java/eu/faircode/email/AdapterContact.java b/app/src/main/java/eu/faircode/email/AdapterContact.java index dc0a0a666c..b0249684f3 100644 --- a/app/src/main/java/eu/faircode/email/AdapterContact.java +++ b/app/src/main/java/eu/faircode/email/AdapterContact.java @@ -239,7 +239,7 @@ public class AdapterContact extends RecyclerView.Adapter() { @Override protected Void onExecute(Context context, Bundle args) { long id = args.getLong("id"); + long account = args.getLong("account"); + int type = args.getInt("type"); + String email = args.getString("email"); String name = args.getString("name"); + if (TextUtils.isEmpty(email)) + throw new IllegalArgumentException(context.getString(R.string.title_no_email)); + if (!Helper.EMAIL_ADDRESS.matcher(email).matches()) + throw new IllegalArgumentException(context.getString(R.string.title_email_invalid, email)); if (TextUtils.isEmpty(name)) name = null; DB db = DB.getInstance(context); - db.contact().setContactName(id, name); + + EntityContact contact; + if (id > 0) + contact = db.contact().getContact(id); + else + contact = new EntityContact(); + contact.account = account; + contact.type = type; + contact.email = email; + contact.name = name; + if (id > 0) + db.contact().updateContact(contact); + else { + contact.times_contacted = 0; + contact.first_contacted = new Date().getTime(); + contact.last_contacted = contact.first_contacted; + contact.id = db.contact().insertContact(contact); + } return null; } @Override protected void onException(Bundle args, Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); + if (ex instanceof IllegalArgumentException) + ToastEx.makeText(getContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); + else + Log.unexpectedError(getParentFragmentManager(), ex); } }.execute(this, args, "contact:name"); } @@ -531,4 +593,34 @@ public class FragmentContacts extends FragmentBase { .create(); } } + + public static class FragmentDialogEditContact extends FragmentDialogBase { + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_edit_contact, null); + final Spinner spType = view.findViewById(R.id.spType); + final EditText etEmail = view.findViewById(R.id.etEmail); + final EditText etName = view.findViewById(R.id.etName); + + final Bundle args = getArguments(); + spType.setSelection(args.getInt("type")); + etEmail.setText(args.getString("email")); + etName.setText(args.getString("name")); + + return new AlertDialog.Builder(getContext()) + .setView(view) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + args.putInt("type", spType.getSelectedItemPosition()); + args.putString("email", etEmail.getText().toString()); + args.putString("name", etName.getText().toString()); + sendResult(RESULT_OK); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .create(); + } + } } diff --git a/app/src/main/res/layout/dialog_edit_contact.xml b/app/src/main/res/layout/dialog_edit_contact.xml new file mode 100644 index 0000000000..8994d726e4 --- /dev/null +++ b/app/src/main/res/layout/dialog_edit_contact.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_contacts.xml b/app/src/main/res/layout/fragment_contacts.xml index df41a36622..c7a5e3e27d 100644 --- a/app/src/main/res/layout/fragment_contacts.xml +++ b/app/src/main/res/layout/fragment_contacts.xml @@ -1,47 +1,65 @@ - + tools:context="eu.faircode.email.ActivityView"> - + + + + + + + + + + + - - - - - - - + android:layout_gravity="end|bottom" + android:layout_margin="@dimen/fab_padding" + android:contentDescription="@string/title_insert_contact" + android:tooltipText="@string/title_insert_contact" + app:backgroundTint="?attr/colorFabBackground" + app:srcCompat="@drawable/twotone_person_add_24" + app:tint="?attr/colorFabForeground" /> + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 931d2d1f73..4ac2b9609e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1023,6 +1023,8 @@ Delete notification channel Add contact Edit contact + Email + Name Import vCards Export vCards Create sub folder @@ -2293,6 +2295,13 @@ @string/title_editasnew + + Recipient + Sender + Blocked + Not blocked + + 17BA15C1AF55D925F98B99CEA4375D4CDF4C174B 77CD40058858DC3A38523E01C227A39AA019F88B 200D0AA43A8ADBC7BB8237023C1553F4753CA7D2