Added identity display name and default bcc

pull/147/head
M66B 6 years ago
parent bb9068aa0d
commit d5dc15884e

File diff suppressed because it is too large Load Diff

@ -87,7 +87,7 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
itemView.setActivated(identity.tbd != null);
vwColor.setBackgroundColor(identity.color == null ? Color.TRANSPARENT : identity.color);
ivPrimary.setVisibility(identity.primary ? View.VISIBLE : View.INVISIBLE);
tvName.setText(identity.name);
tvName.setText(identity.getDisplayName());
ivSync.setImageResource(identity.synchronize ? R.drawable.baseline_sync_24 : R.drawable.baseline_sync_disabled_24);
tvUser.setText(identity.email);
tvHost.setText(String.format("%s:%d", identity.host, identity.port));

@ -46,7 +46,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 20,
version = 21,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -284,6 +284,14 @@ public abstract class DB extends RoomDatabase {
db.execSQL("UPDATE `folder` SET notify = unified");
}
})
.addMigrations(new Migration(20, 21) {
@Override
public void migrate(SupportSQLiteDatabase db) {
Log.i(Helper.TAG, "DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("ALTER TABLE `identity` ADD COLUMN `display` TEXT");
db.execSQL("ALTER TABLE `identity` ADD COLUMN `bcc` TEXT");
}
})
.build();
}

@ -47,9 +47,11 @@ public class EntityIdentity {
public Long id;
@NonNull
public String name;
public String display;
@NonNull
public String email;
public String replyto;
public String bcc;
@NonNull
public Boolean delivery_receipt;
@NonNull
@ -86,8 +88,10 @@ public class EntityIdentity {
public JSONObject toJSON() throws JSONException {
JSONObject json = new JSONObject();
json.put("name", name);
json.put("display", display);
json.put("email", email);
json.put("replyto", replyto);
json.put("bcc", bcc);
json.put("delivery_receipt", delivery_receipt);
json.put("read_receipt", read_receipt);
// not account
@ -114,11 +118,18 @@ public class EntityIdentity {
public static EntityIdentity fromJSON(JSONObject json) throws JSONException {
EntityIdentity identity = new EntityIdentity();
identity.name = json.getString("name");
if (json.has("display"))
identity.display = json.getString("display");
identity.email = json.getString("email");
if (json.has("replyto"))
identity.replyto = json.getString("replyto");
if (json.has("bcc"))
identity.replyto = json.getString("bcc");
if (json.has("delivery_receipt"))
identity.delivery_receipt = json.getBoolean("delivery_receipt");
else
@ -179,8 +190,12 @@ public class EntityIdentity {
return false;
}
String getDisplayName() {
return (display == null ? name : display);
}
@Override
public String toString() {
return name + (primary ? " ★" : "");
return getDisplayName() + (primary ? " ★" : "");
}
}

@ -1397,7 +1397,7 @@ public class FragmentCompose extends FragmentEx {
Collections.sort(identities, new Comparator<EntityIdentity>() {
@Override
public int compare(EntityIdentity i1, EntityIdentity i2) {
return i1.name.compareTo(i2.name);
return i1.toString().compareTo(i2.toString());
}
});
@ -1819,7 +1819,7 @@ public class FragmentCompose extends FragmentEx {
EntityIdentity identity = identities.get(position);
TextView text1 = view.findViewById(android.R.id.text1);
text1.setText(identity.name);
text1.setText(identity.toString());
TextView text2 = view.findViewById(android.R.id.text2);
text2.setText(identity.email);

@ -75,11 +75,13 @@ import androidx.fragment.app.FragmentTransaction;
public class FragmentIdentity extends FragmentEx {
private ViewGroup view;
private EditText etName;
private EditText etDisplay;
private Spinner spAccount;
private Button btnAdvanced;
private TextView tvEmail;
private EditText etEmail;
private EditText etReplyTo;
private EditText etBcc;
private CheckBox cbDeliveryReceipt;
private CheckBox cbReadReceipt;
private Spinner spProvider;
@ -136,9 +138,11 @@ public class FragmentIdentity extends FragmentEx {
spAccount = view.findViewById(R.id.spAccount);
btnAdvanced = view.findViewById(R.id.btnAdvanced);
etDisplay = view.findViewById(R.id.etDisplay);
tvEmail = view.findViewById(R.id.tvEmail);
etEmail = view.findViewById(R.id.etEmail);
etReplyTo = view.findViewById(R.id.etReplyTo);
etBcc = view.findViewById(R.id.etBcc);
cbDeliveryReceipt = view.findViewById(R.id.cbDeliveryReceipt);
cbReadReceipt = view.findViewById(R.id.cbReadReceipt);
@ -307,7 +311,7 @@ public class FragmentIdentity extends FragmentEx {
new Handler().post(new Runnable() {
@Override
public void run() {
((ScrollView) view).smoothScrollTo(0, tvEmail.getTop());
((ScrollView) view).smoothScrollTo(0, etDisplay.getTop());
}
});
}
@ -380,8 +384,10 @@ public class FragmentIdentity extends FragmentEx {
Bundle args = new Bundle();
args.putLong("id", id);
args.putString("name", etName.getText().toString());
args.putString("display", etDisplay.getText().toString());
args.putString("email", etEmail.getText().toString());
args.putString("replyto", etReplyTo.getText().toString());
args.putString("bcc", etBcc.getText().toString());
args.putBoolean("delivery_receipt", cbDeliveryReceipt.isChecked());
args.putBoolean("read_receipt", cbReadReceipt.isChecked());
args.putLong("account", account == null ? -1 : account.id);
@ -404,8 +410,10 @@ public class FragmentIdentity extends FragmentEx {
long id = args.getLong("id");
String name = args.getString("name");
long account = args.getLong("account");
String display = args.getString("display");
String email = args.getString("email");
String replyto = args.getString("replyto");
String bcc = args.getString("bcc");
boolean delivery_receipt = args.getBoolean("delivery_receipt");
boolean read_receipt = args.getBoolean("read_receipt");
String host = args.getString("host");
@ -435,10 +443,20 @@ public class FragmentIdentity extends FragmentEx {
throw new IllegalArgumentException(getContext().getString(R.string.title_no_password));
email = email.toLowerCase();
if (TextUtils.isEmpty(display))
display = null;
if (TextUtils.isEmpty(replyto))
replyto = null;
else
replyto = replyto.toLowerCase();
if (TextUtils.isEmpty(bcc))
bcc = null;
else
bcc = bcc.toLowerCase();
if (Color.TRANSPARENT == color)
color = null;
@ -479,8 +497,10 @@ public class FragmentIdentity extends FragmentEx {
identity = new EntityIdentity();
identity.name = name;
identity.account = account;
identity.display = display;
identity.email = email;
identity.replyto = replyto;
identity.bcc = bcc;
identity.delivery_receipt = delivery_receipt;
identity.read_receipt = read_receipt;
identity.host = host;
@ -584,8 +604,10 @@ public class FragmentIdentity extends FragmentEx {
protected void onLoaded(Bundle args, final EntityIdentity identity) {
if (savedInstanceState == null) {
etName.setText(identity == null ? null : identity.name);
etDisplay.setText(identity == null ? null : identity.display);
etEmail.setText(identity == null ? null : identity.email);
etReplyTo.setText(identity == null ? null : identity.replyto);
etBcc.setText(identity == null ? null : identity.bcc);
cbDeliveryReceipt.setChecked(identity == null ? false : identity.delivery_receipt);
cbReadReceipt.setChecked(identity == null ? false : identity.read_receipt);
etHost.setText(identity == null ? null : identity.host);

@ -1698,9 +1698,20 @@ public class ServiceSynchronize extends LifecycleService {
// Create message
MimeMessage imessage = MessageHelper.from(this, message, isession);
// Add reply to
if (ident.replyto != null)
imessage.setReplyTo(new Address[]{new InternetAddress(ident.replyto)});
// Add bcc
if (ident.bcc != null) {
List<Address> bcc = new ArrayList<>();
Address[] existing = imessage.getRecipients(Message.RecipientType.BCC);
if (existing != null)
bcc.addAll(Arrays.asList(existing));
bcc.add(new InternetAddress(ident.bcc));
imessage.setRecipients(Message.RecipientType.BCC, bcc.toArray(new Address[0]));
}
// defacto standard
if (ident.delivery_receipt)
imessage.addHeader("Return-Receipt-To", ident.replyto == null ? ident.email : ident.replyto);

@ -66,6 +66,27 @@
<!-- email -->
<TextView
android:id="@+id/tvDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:autofillHints="name"
android:text="@string/title_display_name"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnAdvanced" />
<EditText
android:id="@+id/etDisplay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapSentences"
android:text="@string/title_optional"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvDisplay" />
<TextView
android:id="@+id/tvEmail"
android:layout_width="wrap_content"
@ -74,7 +95,7 @@
android:text="@string/title_identity_email"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnAdvanced" />
app:layout_constraintTop_toBottomOf="@id/etDisplay" />
<EditText
android:id="@+id/etEmail"
@ -109,6 +130,27 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvReplyTo" />
<TextView
android:id="@+id/tvBcc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_bcc"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etReplyTo" />
<EditText
android:id="@+id/etBcc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="emailAddress"
android:hint="@string/title_optional"
android:inputType="textEmailAddress"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvBcc" />
<CheckBox
android:id="@+id/cbDeliveryReceipt"
android:layout_width="wrap_content"
@ -116,7 +158,7 @@
android:layout_marginTop="12dp"
android:text="@string/title_identity_delivery_receipt"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etReplyTo" />
app:layout_constraintTop_toBottomOf="@id/etBcc" />
<CheckBox
android:id="@+id/cbReadReceipt"
@ -453,6 +495,6 @@
android:id="@+id/grpAdvanced"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvEmail,etEmail,tvReplyTo,etReplyTo,cbDeliveryReceipt,cbReadReceipt,tvProvider,spProvider,tvDomain,etDomain,btnAutoConfig,tvSmtp,tvInsecure,tvHost,etHost,cbStartTls,tvPort,etPort,tvUser,etUser,tvPassword,tilPassword,btnColor,vwColor,ibColorDefault,tvSignature,etSignature,ibPro,cbSynchronize,cbPrimary,tvSent,spSent" />
app:constraint_referenced_ids="tvDisplay,etDisplay,tvEmail,etEmail,tvReplyTo,etReplyTo,tvBcc,etBcc,cbDeliveryReceipt,cbReadReceipt,tvProvider,spProvider,tvDomain,etDomain,btnAutoConfig,tvSmtp,tvInsecure,tvHost,etHost,cbStartTls,tvPort,etPort,tvUser,etUser,tvPassword,tilPassword,btnColor,vwColor,ibColorDefault,tvSignature,etSignature,ibPro,cbSynchronize,cbPrimary,tvSent,spSent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</ScrollView>

Loading…
Cancel
Save