diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index 664c814d9d..2e042470e4 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -24,9 +24,12 @@ import static com.google.android.material.textfield.TextInputLayout.END_ICON_PAS import static eu.faircode.email.ServiceAuthenticator.AUTH_TYPE_OAUTH; import static eu.faircode.email.ServiceAuthenticator.AUTH_TYPE_PASSWORD; +import android.Manifest; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.database.Cursor; import android.graphics.Color; import android.graphics.Paint; import android.net.Uri; @@ -122,7 +125,8 @@ public class FragmentIdentity extends FragmentBase { private EditText etBcc; private EditText etInternal; private Button btnUri; - private TextView tvUri; + private TextView tvUriInfo; + private TextView tvUriPro; private CheckBox cbSignDefault; private CheckBox cbEncryptDefault; private CheckBox cbUnicode; @@ -225,7 +229,8 @@ public class FragmentIdentity extends FragmentBase { etBcc = view.findViewById(R.id.etBcc); etInternal = view.findViewById(R.id.etInternal); btnUri = view.findViewById(R.id.btnUri); - tvUri = view.findViewById(R.id.tvUri); + tvUriInfo = view.findViewById(R.id.tvUriInfo); + tvUriPro = view.findViewById(R.id.tvUriPro); cbSignDefault = view.findViewById(R.id.cbSignDefault); cbEncryptDefault = view.findViewById(R.id.cbEncryptDefault); cbUnicode = view.findViewById(R.id.cbUnicode); @@ -496,6 +501,8 @@ public class FragmentIdentity extends FragmentBase { } }); + Helper.linkPro(tvUriPro); + cbEncryptDefault.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @@ -542,10 +549,6 @@ public class FragmentIdentity extends FragmentBase { cbInsecure.setVisibility(View.GONE); btnAdvanced.setVisibility(View.GONE); - if (!BuildConfig.DEBUG) { - Helper.hide(btnUri); - Helper.hide(tvUri); - } etEhlo.setHint(EmailService.getDefaultEhlo()); @@ -729,7 +732,7 @@ public class FragmentIdentity extends FragmentBase { args.putString("cc", etCc.getText().toString().trim()); args.putString("bcc", etBcc.getText().toString().trim()); args.putString("internal", etInternal.getText().toString().replaceAll(" ", "")); - args.putString("uri", tvUri.getText().toString()); + args.putString("uri", (String) btnUri.getTag()); args.putBoolean("sign_default", cbSignDefault.isChecked()); args.putBoolean("encrypt_default", cbEncryptDefault.isChecked()); args.putBoolean("unicode", cbUnicode.isChecked()); @@ -1184,6 +1187,7 @@ public class FragmentIdentity extends FragmentBase { outState.putInt("fair:auth", auth); outState.putString("fair:authprovider", provider); outState.putString("fair:html", signature); + outState.putString("fair:uri", (String) btnUri.getTag()); super.onSaveInstanceState(outState); } @@ -1265,7 +1269,8 @@ public class FragmentIdentity extends FragmentBase { etCc.setText(identity == null ? null : identity.cc); etBcc.setText(identity == null ? null : identity.bcc); etInternal.setText(identity == null ? null : identity.internal); - tvUri.setText(identity == null ? null : identity.uri); + btnUri.setTag(identity == null ? null : identity.uri); + tvUriInfo.setText(identity == null ? null : getUriInfo(identity.uri)); cbSignDefault.setChecked(identity != null && identity.sign_default); cbEncryptDefault.setChecked(identity != null && identity.encrypt_default); cbUnicode.setChecked(identity != null && identity.unicode); @@ -1301,6 +1306,7 @@ public class FragmentIdentity extends FragmentBase { provider = savedInstanceState.getString("fair:authprovider"); if (signature == null) signature = savedInstanceState.getString("fair:html"); + btnUri.setTag(savedInstanceState.getString("fair:uri")); } Helper.setViewsEnabled(view, true); @@ -1522,6 +1528,30 @@ public class FragmentIdentity extends FragmentBase { private void onPickUri(Intent intent) { Uri uri = (intent == null ? null : intent.getData()); - tvUri.setText(uri == null ? null : uri.toString()); + btnUri.setTag(uri == null ? null : uri.toString()); + tvUriInfo.setText(uri == null ? null : getUriInfo(uri.toString())); + } + + private String getUriInfo(String uri) { + if (uri == null) + return null; + if (!hasPermission(Manifest.permission.READ_CONTACTS)) + return null; + + try { + ContentResolver resolver = getContext().getContentResolver(); + try (Cursor cursor = resolver.query(Uri.parse(uri), + new String[]{ + ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + }, + null, null, null)) { + if (cursor.moveToNext()) + return cursor.getString(0); + } + } catch (Throwable ex) { + Log.w(ex); + } + + return uri; } } diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 9e3e7087bf..7b86bb31e5 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -1089,7 +1089,7 @@ public class MessageHelper { db.endTransaction(); } - if (BuildConfig.DEBUG) { + if (ActivityBilling.isPro(context)) { VCard vcard = null; if (identity.uri != null && diff --git a/app/src/main/res/layout/fragment_identity.xml b/app/src/main/res/layout/fragment_identity.xml index dde27940dc..5a0b9af19e 100644 --- a/app/src/main/res/layout/fragment_identity.xml +++ b/app/src/main/res/layout/fragment_identity.xml @@ -787,14 +787,37 @@ app:layout_constraintTop_toBottomOf="@id/tvInternalHint" /> + + + + + app:layout_constraintTop_toBottomOf="@id/tvUriPro" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f557080cc5..f047fb8bdd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -975,6 +975,7 @@ Most providers do not allow modified sender addresses The address won\'t be shown, but will be added on sending There will be a warning when sending to another domain + The info of the selected contact will be used to attach a vCard Options for end-to-end encryption Disabling this option might be harmful to your privacy @@ -1067,7 +1068,7 @@ Regex to match username of incoming email addresses Reply to address Internal domain names (comma separated) - Link contact + Link contact Allow UTF-8 in message headers Most servers do not support this Allow 8BITMIME