Added option to copy names from received messages

This commit is contained in:
M66B 2023-01-26 08:07:00 +01:00
parent e0efd0b0e9
commit 41997e080f
7 changed files with 2910 additions and 4 deletions

File diff suppressed because it is too large Load Diff

View File

@ -68,7 +68,7 @@ import javax.mail.internet.InternetAddress;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 264,
version = 265,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -2710,6 +2710,13 @@ public abstract class DB extends RoomDatabase {
db.execSQL("ALTER TABLE `account` ADD COLUMN `raw_fetch` INTEGER NOT NULL DEFAULT 0");
createTriggers(db);
}
}).addMigrations(new Migration(264, 265) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
logMigration(startVersion, endVersion);
db.execSQL("ALTER TABLE `identity` ADD COLUMN `reply_extra_name` INTEGER NOT NULL DEFAULT 0");
createTriggers(db);
}
}).addMigrations(new Migration(998, 999) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {

View File

@ -101,6 +101,8 @@ public class EntityIdentity {
public Boolean sender_extra = false;
@NonNull
public Boolean sender_extra_name = false;
@NonNull
public Boolean reply_extra_name = false;
public String sender_extra_regex;
public String replyto;
public String cc;

View File

@ -4984,7 +4984,8 @@ public class FragmentCompose extends FragmentBase {
EntityLog.log(context, "Preferred=" + name + " <" + from + ">");
if (TextUtils.isEmpty(from) || from.equals(recognized.email))
from = null;
if (TextUtils.isEmpty(name) || name.equals(recognized.name))
if (!recognized.reply_extra_name ||
TextUtils.isEmpty(name) || name.equals(recognized.name))
name = null;
String username = UriHelper.getEmailUser(from);
String extra = (name == null ? "" : name + ", ") +

View File

@ -115,6 +115,7 @@ public class FragmentIdentity extends FragmentBase {
private CheckBox cbSenderExtra;
private CheckBox cbSenderExtraName;
private CheckBox cbReplyExtraName;
private TextView etSenderExtra;
private ImageButton ibSenderExtra;
private EditText etReplyTo;
@ -214,6 +215,7 @@ public class FragmentIdentity extends FragmentBase {
cbSenderExtra = view.findViewById(R.id.cbSenderExtra);
cbSenderExtraName = view.findViewById(R.id.cbSenderExtraName);
cbReplyExtraName = view.findViewById(R.id.cbReplyExtraName);
etSenderExtra = view.findViewById(R.id.etSenderExtra);
ibSenderExtra = view.findViewById(R.id.ibSenderExtra);
etReplyTo = view.findViewById(R.id.etReplyTo);
@ -396,6 +398,7 @@ public class FragmentIdentity extends FragmentBase {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
cbSenderExtraName.setEnabled(isChecked);
cbReplyExtraName.setEnabled(isChecked);
}
});
@ -661,6 +664,7 @@ public class FragmentIdentity extends FragmentBase {
args.putInt("color", btnColor.getColor());
args.putBoolean("sender_extra", cbSenderExtra.isChecked());
args.putBoolean("sender_extra_name", cbSenderExtraName.isChecked());
args.putBoolean("reply_extra_name", cbReplyExtraName.isChecked());
args.putString("sender_extra_regex", etSenderExtra.getText().toString());
args.putString("replyto", etReplyTo.getText().toString().trim());
args.putString("cc", etCc.getText().toString().trim());
@ -748,6 +752,7 @@ public class FragmentIdentity extends FragmentBase {
boolean sender_extra = args.getBoolean("sender_extra");
boolean sender_extra_name = args.getBoolean("sender_extra_name");
boolean reply_extra_name = args.getBoolean("reply_extra_name");
String sender_extra_regex = args.getString("sender_extra_regex");
String replyto = args.getString("replyto");
String cc = args.getString("cc");
@ -896,6 +901,8 @@ public class FragmentIdentity extends FragmentBase {
return true;
if (!Objects.equals(identity.sender_extra_name, sender_extra_name))
return true;
if (!Objects.equals(identity.reply_extra_name, reply_extra_name))
return true;
if (!Objects.equals(identity.sender_extra_regex, sender_extra_regex))
return true;
if (!Objects.equals(identity.replyto, replyto))
@ -1003,6 +1010,7 @@ public class FragmentIdentity extends FragmentBase {
identity.sender_extra = sender_extra;
identity.sender_extra_name = sender_extra_name;
identity.reply_extra_name = reply_extra_name;
identity.sender_extra_regex = sender_extra_regex;
identity.replyto = replyto;
identity.cc = cc;
@ -1188,6 +1196,7 @@ public class FragmentIdentity extends FragmentBase {
cbSenderExtra.setChecked(identity != null && identity.sender_extra);
cbSenderExtraName.setChecked(identity != null && identity.sender_extra_name);
cbReplyExtraName.setChecked(identity != null && identity.reply_extra_name);
etSenderExtra.setText(identity == null ? null : identity.sender_extra_regex);
etReplyTo.setText(identity == null ? null : identity.replyto);
etCc.setText(identity == null ? null : identity.cc);
@ -1273,6 +1282,7 @@ public class FragmentIdentity extends FragmentBase {
cbPrimary.setEnabled(cbSynchronize.isChecked());
cbSenderExtraName.setEnabled(cbSenderExtra.isChecked());
cbReplyExtraName.setEnabled(cbSenderExtra.isChecked());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean sign_default = prefs.getBoolean("sign_default", false);

View File

@ -594,11 +594,23 @@
android:id="@+id/cbSenderExtraName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="12dp"
android:checked="true"
android:text="@string/title_advanced_sender_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbSenderExtra" />
<CheckBox
android:id="@+id/cbReplyExtraName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_reply_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbSenderExtraName" />
<TextView
android:id="@+id/tvSenderExtra"
android:layout_width="wrap_content"
@ -607,7 +619,7 @@
android:text="@string/title_advanced_sender_regex"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbSenderExtraName" />
app:layout_constraintTop_toBottomOf="@id/cbReplyExtraName" />
<eu.faircode.email.EditTextPlain
android:id="@+id/etSenderExtra"
@ -971,7 +983,7 @@
tvRealm,etRealm,
cbUseIp,tvUseIpHint,tvEhlo,etEhlo,
cbSynchronize,cbPrimary,cbSelf,tvSelfHint,
cbSenderExtra,cbSenderExtraName,tvSenderExtra,etSenderExtra,ibSenderExtra,tvSenderExtraHint,
cbSenderExtra,cbSenderExtraName,cbReplyExtraName,tvSenderExtra,etSenderExtra,ibSenderExtra,tvSenderExtraHint,
tvReplyTo,etReplyTo,tvCc,etCc,tvCcHint,tvBcc,etBcc,tvBccHint,
tvInternal,etInternal,tvInternalHint,
tvE2Encryption,cbSignDefault,cbEncryptDefault,

View File

@ -1032,6 +1032,7 @@
<string name="title_identity_color_hint">Identity colors take precedence over folder and account colors</string>
<string name="title_advanced_sender">Allow editing sender address</string>
<string name="title_advanced_sender_name">Use name when sender address has been edited</string>
<string name="title_advanced_reply_name">Copy the name from the received message</string>
<string name="title_advanced_sender_regex">Regex to match username of incoming email addresses</string>
<string name="title_identity_reply_to">Reply to address</string>
<string name="title_identity_internal">Internal domain names (comma separated)</string>