From ea4297f7292d657b8548448f592a02633fd664c8 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 24 Apr 2023 17:37:33 +0200 Subject: [PATCH] Fixed overscoll invalid zero offset --- .../eu/faircode/email/FragmentMessages.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index cd2c8f33d9..a50f2815b2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -239,6 +239,8 @@ import biweekly.Biweekly; import biweekly.ICalendar; import biweekly.component.VEvent; import me.everything.android.ui.overscroll.IOverScrollDecor; +import me.everything.android.ui.overscroll.IOverScrollState; +import me.everything.android.ui.overscroll.IOverScrollStateListener; import me.everything.android.ui.overscroll.IOverScrollUpdateListener; import me.everything.android.ui.overscroll.VerticalOverScrollBounceEffectDecorator; import me.everything.android.ui.overscroll.adapters.RecyclerViewOverScrollDecorAdapter; @@ -2093,26 +2095,25 @@ public class FragmentMessages extends FragmentBase DEFAULT_TOUCH_DRAG_MOVE_RATIO_BCK, DEFAULT_DECELERATE_FACTOR ); - decor.setOverScrollUpdateListener(new IOverScrollUpdateListener() { - private boolean triggered = false; + ObjectHolder otriggered = new ObjectHolder<>(false); + + decor.setOverScrollUpdateListener(new IOverScrollUpdateListener() { @Override public void onOverScrollUpdate(IOverScrollDecor decor, int state, float offset) { float height = decor.getView().getHeight(); if (height == 0) return; - if (offset == 0) - triggered = false; - else if (!triggered) { + if (!otriggered.value) { float dx = Math.abs(offset * DEFAULT_TOUCH_DRAG_MOVE_RATIO_FWD); if (offset > 0 && dx > height / 4) { - triggered = true; + otriggered.value = true; handleAutoClose(); } if (offset < 0 && dx > height / 8) { - triggered = true; + otriggered.value = true; Bundle args = new Bundle(); args.putInt("icon", R.drawable.twotone_drive_file_move_24); @@ -2131,6 +2132,15 @@ public class FragmentMessages extends FragmentBase } } }); + + decor.setOverScrollStateListener(new IOverScrollStateListener() { + @Override + public void onOverScrollStateChange(IOverScrollDecor decor, int oldState, int newState) { + // offset is unreliable + if (newState == IOverScrollState.STATE_IDLE) + otriggered.value = false; + } + }); } catch (Throwable ex) { /* java.lang.NoClassDefFoundError: Failed resolution of: Lme/a/a/a/a/a/b$1;