From f0c5f6fedd5708d8738f0fd5d4f46cd6a8325427 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 24 Aug 2018 07:12:37 +0000 Subject: [PATCH] Load body when needed only --- .../eu/faircode/email/FragmentMessage.java | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessage.java b/app/src/main/java/eu/faircode/email/FragmentMessage.java index 2887875a0e..31fb793bfd 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessage.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessage.java @@ -338,6 +338,7 @@ public class FragmentMessage extends FragmentEx { tvBcc.setText(message.bcc == null ? null : MessageHelper.getFormattedAddresses(message.bcc, true)); tvError.setText(message.error); + } else { free = savedInstanceState.getBoolean("free"); if (free) { @@ -350,27 +351,31 @@ public class FragmentMessage extends FragmentEx { getActivity().invalidateOptionsMenu(); - Bundle args = new Bundle(); - args.putLong("id", message.id); + if (tvBody.getTag() == null) { + // Spanned text needs to be loaded after recreation too + Bundle args = new Bundle(); + args.putLong("id", message.id); - pbBody.setVisibility(View.VISIBLE); - new SimpleTask() { - @Override - protected Spanned onLoad(Context context, Bundle args) throws Throwable { - String body = EntityMessage.read(context, args.getLong("id")); - args.putInt("size", body.length()); - return Html.fromHtml(HtmlHelper.sanitize(getContext(), body, false)); - } + pbBody.setVisibility(View.VISIBLE); + new SimpleTask() { + @Override + protected Spanned onLoad(Context context, Bundle args) throws Throwable { + String body = EntityMessage.read(context, args.getLong("id")); + args.putInt("size", body.length()); + return Html.fromHtml(HtmlHelper.sanitize(getContext(), body, false)); + } - @Override - protected void onLoaded(Bundle args, Spanned body) { - tvSize.setText(Helper.humanReadableByteCount(args.getInt("size"), false)); - tvBody.setText(body); - grpMessage.setVisibility(View.VISIBLE); - fab.setVisibility(free ? View.GONE : View.VISIBLE); - pbBody.setVisibility(View.GONE); - } - }.load(FragmentMessage.this, args); + @Override + protected void onLoaded(Bundle args, Spanned body) { + tvSize.setText(Helper.humanReadableByteCount(args.getInt("size"), false)); + tvBody.setText(body); + tvBody.setTag(true); + grpMessage.setVisibility(View.VISIBLE); + fab.setVisibility(free ? View.GONE : View.VISIBLE); + pbBody.setVisibility(View.GONE); + } + }.load(FragmentMessage.this, args); + } int typeface = (message.ui_seen ? Typeface.NORMAL : Typeface.BOLD); tvFrom.setTypeface(null, typeface); @@ -411,6 +416,7 @@ public class FragmentMessage extends FragmentEx { } }); + // Observe folders db.folder().liveFolders(message.account).removeObservers(getViewLifecycleOwner()); db.folder().liveFolders(message.account).observe(getViewLifecycleOwner(), new Observer>() { @Override