|
|
|
@ -5748,9 +5748,6 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
boolean write_below = prefs.getBoolean("write_below", false);
|
|
|
|
|
boolean perform_expunge = prefs.getBoolean("perform_expunge", true);
|
|
|
|
|
boolean save_drafts = prefs.getBoolean("save_drafts", perform_expunge);
|
|
|
|
|
boolean auto_identity = prefs.getBoolean("auto_identity", false);
|
|
|
|
|
boolean suggest_sent = prefs.getBoolean("suggest_sent", true);
|
|
|
|
|
boolean suggest_received = prefs.getBoolean("suggest_received", false);
|
|
|
|
|
boolean forward_new = prefs.getBoolean("forward_new", false);
|
|
|
|
|
boolean markdown = prefs.getBoolean("markdown", false);
|
|
|
|
|
|
|
|
|
@ -5805,8 +5802,9 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null) {
|
|
|
|
|
Address[] refto = null;
|
|
|
|
|
if (ref != null) {
|
|
|
|
|
Address[] refto;
|
|
|
|
|
boolean self = ref.replySelf(data.identities, ref.account);
|
|
|
|
|
if (ref.to == null || ref.to.length == 0 || self)
|
|
|
|
|
refto = ref.from;
|
|
|
|
@ -5814,96 +5812,16 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
refto = ref.to;
|
|
|
|
|
Log.i("Ref self=" + self +
|
|
|
|
|
" to=" + MessageHelper.formatAddresses(refto));
|
|
|
|
|
if (refto != null && refto.length > 0) {
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (Address sender : refto)
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.account.equals(aid) &&
|
|
|
|
|
identity.sameAddress(sender)) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected same account/identity");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (Address sender : refto)
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.account.equals(aid) &&
|
|
|
|
|
identity.similarAddress(sender)) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected similar account/identity");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (Address sender : refto)
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.sameAddress(sender)) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected same */identity");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (Address sender : refto)
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.similarAddress(sender)) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected similer */identity");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null && auto_identity)
|
|
|
|
|
Address[] tos = null;
|
|
|
|
|
try {
|
|
|
|
|
Address[] tos = MessageHelper.parseAddresses(context, to);
|
|
|
|
|
if (tos != null && tos.length > 0) {
|
|
|
|
|
String email = ((InternetAddress) tos[0]).getAddress();
|
|
|
|
|
List<Long> identities = null;
|
|
|
|
|
if (suggest_sent)
|
|
|
|
|
identities = db.contact().getIdentities(email, EntityContact.TYPE_TO);
|
|
|
|
|
if (suggest_received && (identities == null || identities.size() == 0))
|
|
|
|
|
identities = db.contact().getIdentities(email, EntityContact.TYPE_FROM);
|
|
|
|
|
if (identities != null && identities.size() == 1) {
|
|
|
|
|
EntityIdentity identity = db.identity().getIdentity(identities.get(0));
|
|
|
|
|
if (identity != null)
|
|
|
|
|
selected = identity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
tos = MessageHelper.parseAddresses(context, to);
|
|
|
|
|
} catch (AddressException ex) {
|
|
|
|
|
Log.i(ex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.account.equals(aid) && identity.primary) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected primary account/identity");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.account.equals(aid)) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected account/identity");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.primary) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected primary */identity");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
|
for (EntityIdentity identity : data.identities) {
|
|
|
|
|
selected = identity;
|
|
|
|
|
EntityLog.log(context, "Selected */identity");
|
|
|
|
|
break;
|
|
|
|
|
selected = getIdentity(context, aid, data.identities, refto, tos);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (selected == null)
|
|
|
|
@ -6585,17 +6503,12 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
|
|
|
|
|
// External draft
|
|
|
|
|
if (data.draft.identity == null) {
|
|
|
|
|
for (EntityIdentity identity : data.identities)
|
|
|
|
|
if (identity.account.equals(data.draft.account))
|
|
|
|
|
if (identity.primary) {
|
|
|
|
|
data.draft.identity = identity.id;
|
|
|
|
|
break;
|
|
|
|
|
} else if (data.draft.identity == null)
|
|
|
|
|
data.draft.identity = identity.id;
|
|
|
|
|
|
|
|
|
|
if (data.draft.identity != null)
|
|
|
|
|
EntityIdentity selected = getIdentity(context, aid, data.identities, data.draft.from, data.draft.to);
|
|
|
|
|
if (selected != null) {
|
|
|
|
|
data.draft.identity = selected.id;
|
|
|
|
|
db.message().setMessageIdentity(data.draft.id, data.draft.identity);
|
|
|
|
|
Log.i("Selected external identity=" + data.draft.identity);
|
|
|
|
|
EntityLog.log(context, "Selected external identity=" + selected.email);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (data.draft.revision == null || data.draft.revisions == null) {
|
|
|
|
@ -7082,6 +6995,86 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
} else
|
|
|
|
|
handleException(ex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private EntityIdentity getIdentity(Context context, long aid, List<TupleIdentityEx> identities, Address[] from, Address[] to) {
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
|
boolean auto_identity = prefs.getBoolean("auto_identity", false);
|
|
|
|
|
boolean suggest_sent = prefs.getBoolean("suggest_sent", true);
|
|
|
|
|
boolean suggest_received = prefs.getBoolean("suggest_received", false);
|
|
|
|
|
|
|
|
|
|
DB db = DB.getInstance(context);
|
|
|
|
|
|
|
|
|
|
if (from != null && from.length > 0) {
|
|
|
|
|
for (Address sender : from)
|
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
|
if (identity.account.equals(aid) &&
|
|
|
|
|
identity.sameAddress(sender)) {
|
|
|
|
|
EntityLog.log(context, "Selected same account/identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (Address sender : from)
|
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
|
if (identity.account.equals(aid) &&
|
|
|
|
|
identity.similarAddress(sender)) {
|
|
|
|
|
EntityLog.log(context, "Selected similar account/identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (Address sender : from)
|
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
|
if (identity.sameAddress(sender)) {
|
|
|
|
|
EntityLog.log(context, "Selected same */identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (Address sender : from)
|
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
|
if (identity.similarAddress(sender)) {
|
|
|
|
|
EntityLog.log(context, "Selected similer */identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (auto_identity && to != null && to.length > 0) {
|
|
|
|
|
String email = ((InternetAddress) to[0]).getAddress();
|
|
|
|
|
List<Long> ids = null;
|
|
|
|
|
if (suggest_sent)
|
|
|
|
|
ids = db.contact().getIdentities(email, EntityContact.TYPE_TO);
|
|
|
|
|
if (suggest_received && (ids == null || ids.size() == 0))
|
|
|
|
|
ids = db.contact().getIdentities(email, EntityContact.TYPE_FROM);
|
|
|
|
|
if (ids != null && ids.size() == 1) {
|
|
|
|
|
EntityIdentity identity = db.identity().getIdentity(ids.get(0));
|
|
|
|
|
if (identity != null)
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
|
if (identity.account.equals(aid) && identity.primary) {
|
|
|
|
|
EntityLog.log(context, "Selected primary account/identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
|
if (identity.account.equals(aid)) {
|
|
|
|
|
EntityLog.log(context, "Selected account/identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
|
if (identity.primary) {
|
|
|
|
|
EntityLog.log(context, "Selected primary */identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (EntityIdentity identity : identities) {
|
|
|
|
|
EntityLog.log(context, "Selected */identity");
|
|
|
|
|
return identity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}.serial();
|
|
|
|
|
|
|
|
|
|
private void handleException(Throwable ex) {
|
|
|
|
|