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