Scroll after setting text

This commit is contained in:
M66B 2020-03-21 17:12:15 +01:00
parent c0cc107d14
commit f24de3d25f
1 changed files with 47 additions and 45 deletions

View File

@ -815,7 +815,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
@SuppressLint("WrongConstant") @SuppressLint("WrongConstant")
private void bindTo(final TupleMessageEx message) { private void bindTo(final TupleMessageEx message, boolean scroll) {
boolean inbox = EntityFolder.INBOX.equals(message.folderType); boolean inbox = EntityFolder.INBOX.equals(message.folderType);
boolean outbox = EntityFolder.OUTBOX.equals(message.folderType); boolean outbox = EntityFolder.OUTBOX.equals(message.folderType);
boolean outgoing = isOutgoing(message); boolean outgoing = isOutgoing(message);
@ -1098,7 +1098,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
if (viewType == ViewType.THREAD) if (viewType == ViewType.THREAD)
if (expanded) if (expanded)
bindExpanded(message); bindExpanded(message, scroll);
else else
clearExpanded(message); clearExpanded(message);
@ -1311,7 +1311,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
} }
private void bindExpanded(final TupleMessageEx message) { private void bindExpanded(final TupleMessageEx message, final boolean scroll) {
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
cowner.recreate(); cowner.recreate();
@ -1496,7 +1496,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
lastInlineImages++; lastInlineImages++;
if (inlineImages != lastInlineImages) if (inlineImages != lastInlineImages)
bindBody(message); bindBody(message, false);
properties.setAttachments(message.id, attachments); properties.setAttachments(message.id, attachments);
} }
@ -1568,7 +1568,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibTrash.setVisibility(trash ? View.VISIBLE : View.GONE); ibTrash.setVisibility(trash ? View.VISIBLE : View.GONE);
ibJunk.setVisibility(junk || unjunk ? View.VISIBLE : View.GONE); ibJunk.setVisibility(junk || unjunk ? View.VISIBLE : View.GONE);
bindBody(message); bindBody(message, scroll);
} }
@Override @Override
@ -1578,7 +1578,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
}.setLog(false).execute(context, owner, sargs, "message:more"); }.setLog(false).execute(context, owner, sargs, "message:more");
} }
private void bindBody(TupleMessageEx message) { private void bindBody(TupleMessageEx message, final boolean scroll) {
tvBody.setText(null); tvBody.setText(null);
ibSeen.setImageResource(message.ui_seen ibSeen.setImageResource(message.ui_seen
@ -1591,8 +1591,11 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibSeen.setVisibility(message.folderReadOnly || message.uid == null ibSeen.setVisibility(message.folderReadOnly || message.uid == null
? View.GONE : View.VISIBLE); ? View.GONE : View.VISIBLE);
if (!message.content) if (!message.content) {
if (scroll)
properties.scrollTo(getAdapterPosition(), 0);
return; return;
}
if (message.from != null) if (message.from != null)
for (Address sender : message.from) { for (Address sender : message.from) {
@ -1929,6 +1932,31 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
return; return;
boolean has_images = args.getBoolean("has_images"); boolean has_images = args.getBoolean("has_images");
boolean show_full = properties.getValue("full", message.id);
boolean always_images = prefs.getBoolean("html_always_images", false);
// Show images
ibImages.setVisibility(has_images && !(show_full && always_images) ? View.VISIBLE : View.GONE);
// Show encrypt actions
ibVerify.setVisibility(false ||
EntityMessage.PGP_SIGNONLY.equals(message.encrypt) ||
EntityMessage.SMIME_SIGNONLY.equals(message.encrypt)
? View.VISIBLE : View.GONE);
ibDecrypt.setImageResource(false ||
(EntityMessage.PGP_SIGNENCRYPT.equals(message.ui_encrypt) &&
!EntityMessage.PGP_SIGNENCRYPT.equals(message.encrypt)) ||
(EntityMessage.SMIME_SIGNENCRYPT.equals(message.ui_encrypt) &&
!EntityMessage.SMIME_SIGNENCRYPT.equals(message.encrypt))
? R.drawable.baseline_lock_24 : R.drawable.baseline_lock_open_24
);
ibDecrypt.setVisibility(args.getBoolean("inline_encrypted") ||
EntityMessage.PGP_SIGNENCRYPT.equals(message.ui_encrypt) ||
EntityMessage.SMIME_SIGNENCRYPT.equals(message.ui_encrypt)
? View.VISIBLE : View.GONE);
boolean signed_data = args.getBoolean("signed_data");
tvSignedData.setVisibility(signed_data ? View.VISIBLE : View.GONE);
if (result instanceof Spanned) { if (result instanceof Spanned) {
tvBody.setText((Spanned) result); tvBody.setText((Spanned) result);
@ -1938,7 +1966,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} else if (result instanceof String) } else if (result instanceof String)
((WebView) wvBody).loadDataWithBaseURL(null, (String) result, "text/html", StandardCharsets.UTF_8.name(), null); ((WebView) wvBody).loadDataWithBaseURL(null, (String) result, "text/html", StandardCharsets.UTF_8.name(), null);
else if (result == null) { else if (result == null) {
boolean show_full = args.getBoolean("show_full");
if (show_full) if (show_full)
((WebView) wvBody).loadDataWithBaseURL(null, "", "text/html", StandardCharsets.UTF_8.name(), null); ((WebView) wvBody).loadDataWithBaseURL(null, "", "text/html", StandardCharsets.UTF_8.name(), null);
else else
@ -1990,6 +2017,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
} }
if (scroll)
properties.scrollTo(getAdapterPosition(), 0);
// Show attachments // Show attachments
cowner.start(); cowner.start();
@ -1998,32 +2028,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
(EntityMessage.PGP_SIGNENCRYPT.equals(message.encrypt) || (EntityMessage.PGP_SIGNENCRYPT.equals(message.encrypt) ||
EntityMessage.SMIME_SIGNENCRYPT.equals(message.encrypt))) EntityMessage.SMIME_SIGNENCRYPT.equals(message.encrypt)))
onActionDecrypt(message, true); onActionDecrypt(message, true);
boolean show_full = properties.getValue("full", message.id);
boolean always_images = prefs.getBoolean("html_always_images", false);
// Show images
ibImages.setVisibility(has_images && !(show_full && always_images) ? View.VISIBLE : View.GONE);
// Show encrypt actions
ibVerify.setVisibility(false ||
EntityMessage.PGP_SIGNONLY.equals(message.encrypt) ||
EntityMessage.SMIME_SIGNONLY.equals(message.encrypt)
? View.VISIBLE : View.GONE);
ibDecrypt.setImageResource(false ||
(EntityMessage.PGP_SIGNENCRYPT.equals(message.ui_encrypt) &&
!EntityMessage.PGP_SIGNENCRYPT.equals(message.encrypt)) ||
(EntityMessage.SMIME_SIGNENCRYPT.equals(message.ui_encrypt) &&
!EntityMessage.SMIME_SIGNENCRYPT.equals(message.encrypt))
? R.drawable.baseline_lock_24 : R.drawable.baseline_lock_open_24
);
ibDecrypt.setVisibility(args.getBoolean("inline_encrypted") ||
EntityMessage.PGP_SIGNENCRYPT.equals(message.ui_encrypt) ||
EntityMessage.SMIME_SIGNENCRYPT.equals(message.ui_encrypt)
? View.VISIBLE : View.GONE);
boolean signed_data = args.getBoolean("signed_data");
tvSignedData.setVisibility(signed_data ? View.VISIBLE : View.GONE);
} }
@Override @Override
@ -2631,7 +2635,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} else { } else {
message.ui_seen = !message.ui_seen; message.ui_seen = !message.ui_seen;
message.unseen = (message.ui_seen ? 0 : message.count); message.unseen = (message.ui_seen ? 0 : message.count);
bindTo(message); bindTo(message, false);
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("id", message.id); args.putLong("id", message.id);
@ -3007,16 +3011,14 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
else { else {
boolean expanded = !properties.getValue("expanded", message.id); boolean expanded = !properties.getValue("expanded", message.id);
properties.setExpanded(message, expanded); properties.setExpanded(message, expanded);
bindTo(message); bindTo(message, expanded);
if (expanded)
properties.scrollTo(getAdapterPosition(), 0);
} }
} }
private void onToggleAddresses(TupleMessageEx message) { private void onToggleAddresses(TupleMessageEx message) {
boolean addresses = !properties.getValue("addresses", message.id); boolean addresses = !properties.getValue("addresses", message.id);
properties.setValue("addresses", message.id, addresses); properties.setValue("addresses", message.id, addresses);
bindExpanded(message); bindExpanded(message, false);
} }
private void onDownloadAttachments(final TupleMessageEx message) { private void onDownloadAttachments(final TupleMessageEx message) {
@ -3177,11 +3179,11 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
properties.setHeight(message.id, null); properties.setHeight(message.id, null);
properties.setPosition(message.id, null); properties.setPosition(message.id, null);
bindBody(message); bindBody(message, false);
} }
private void onShowImagesConfirmed(TupleMessageEx message) { private void onShowImagesConfirmed(TupleMessageEx message) {
bindBody(message); bindBody(message, false);
} }
private void onActionUnsubscribe(TupleMessageEx message) { private void onActionUnsubscribe(TupleMessageEx message) {
@ -3517,7 +3519,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
DynamicDrawableSpan[] ddss = buffer.getSpans(off, off, DynamicDrawableSpan.class); DynamicDrawableSpan[] ddss = buffer.getSpans(off, off, DynamicDrawableSpan.class);
if (ddss.length > 0) { if (ddss.length > 0) {
properties.setValue("quotes", message.id, true); properties.setValue("quotes", message.id, true);
bindBody(message); bindBody(message, false);
} }
} }
@ -3618,7 +3620,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
properties.setExpanded(message, false); properties.setExpanded(message, false);
message.ui_seen = args.getBoolean("seen"); message.ui_seen = args.getBoolean("seen");
message.unseen = (message.ui_seen ? 0 : message.count); message.unseen = (message.ui_seen ? 0 : message.count);
bindTo(message); bindTo(message, false);
} }
@Override @Override
@ -4023,7 +4025,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
}.execute(context, owner, args, "message:headers"); }.execute(context, owner, args, "message:headers");
} else } else
bindExpanded(message); bindExpanded(message, false);
} }
private void onMenuRawSave(TupleMessageEx message) { private void onMenuRawSave(TupleMessageEx message) {
@ -4883,7 +4885,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
holder.unwire(); holder.unwire();
holder.bindTo(message); holder.bindTo(message, false);
holder.wire(); holder.wire();
} }