From 86c7fcfbc7feed9b3363be4c2d119732e5712b78 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 4 Oct 2019 18:59:37 +0200 Subject: [PATCH] Set web view scroll position --- .../eu/faircode/email/AdapterMessage.java | 18 +++++++++++ .../eu/faircode/email/FragmentMessages.java | 32 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 48f4312586..aace34a7e9 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -64,6 +64,7 @@ import android.text.style.DynamicDrawableSpan; import android.text.style.ImageSpan; import android.text.style.QuoteSpan; import android.text.style.URLSpan; +import android.util.Pair; import android.util.TypedValue; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -1248,6 +1249,7 @@ public class AdapterMessage extends RecyclerView.Adapter position = properties.getPosition(message.id); Log.i("Bind size=" + size + " height=" + height); if (show_full) { @@ -1315,6 +1317,14 @@ public class AdapterMessage extends RecyclerView.Adapter= Build.VERSION_CODES.M) + webView.setOnScrollChangeListener(new View.OnScrollChangeListener() { + @Override + public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { + properties.setPosition(message.id, new Pair(scrollX, scrollY)); + } + }); + webView.setDownloadListener(new DownloadListener() { public void onDownloadStart( String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { @@ -1376,6 +1386,10 @@ public class AdapterMessage extends RecyclerView.Adapter position); + + Pair getPosition(long id); + void setAttachments(long id, List attachments); List getAttachments(long id); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 9e8abf2af3..5d8d60ff34 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -51,6 +51,7 @@ import android.print.PrintManager; import android.text.TextUtils; import android.text.format.DateUtils; import android.util.LongSparseArray; +import android.util.Pair; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.Menu; @@ -232,6 +233,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. private Map> values = new HashMap<>(); private LongSparseArray sizes = new LongSparseArray<>(); private LongSparseArray heights = new LongSparseArray<>(); + private LongSparseArray> positions = new LongSparseArray<>(); private LongSparseArray> attachments = new LongSparseArray<>(); private LongSparseArray accountSwipes = new LongSparseArray<>(); @@ -1260,6 +1262,15 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. return heights.get(id, defaultHeight); } + public void setPosition(long id, Pair position) { + Log.i("Position=" + position); + positions.put(id, position); + } + + public Pair getPosition(long id) { + return positions.get(id); + } + @Override public void setAttachments(long id, List list) { attachments.put(id, list); @@ -2181,6 +2192,19 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. outState.putLongArray("fair:heights:keys", hkeys); outState.putIntArray("fair:heights:values", hvalues); + long[] pkeys = new long[positions.size()]; + int[] xvalues = new int[positions.size()]; + int[] yvalues = new int[positions.size()]; + for (int i = 0; i < positions.size(); i++) { + pkeys[i] = positions.keyAt(i); + Pair position = positions.valueAt(i); + xvalues[i] = position.first; + yvalues[i] = position.second; + } + outState.putLongArray("fair:pos:keys", pkeys); + outState.putIntArray("fair:posx:values", xvalues); + outState.putIntArray("fair:posy:values", yvalues); + if (rvMessage != null) { Parcelable rv = rvMessage.getLayoutManager().onSaveInstanceState(); outState.putParcelable("fair:rv", rv); @@ -2221,6 +2245,13 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. for (int i = 0; i < hkeys.length; i++) heights.put(hkeys[i], hvalues[i]); + long[] pkeys = savedInstanceState.getLongArray("fair:pos:keys"); + int[] xvalues = savedInstanceState.getIntArray("fair:posx:values"); + int[] yvalues = savedInstanceState.getIntArray("fair:posy:values"); + + for (int i = 0; i < pkeys.length; i++) + positions.put(pkeys[i], new Pair(xvalues[i], yvalues[i])); + if (rvMessage != null) { Parcelable rv = savedInstanceState.getBundle("fair:rv"); rvMessage.getLayoutManager().onRestoreInstanceState(rv); @@ -2340,6 +2371,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. values.get(key).remove(id); sizes.remove(id); heights.remove(id); + positions.remove(id); attachments.remove(id); } updateExpanded();