diff --git a/src/cheogram/java/com/cheogram/android/SafeViewPager.java b/src/cheogram/java/com/cheogram/android/SafeViewPager.java new file mode 100644 index 0000000000000000000000000000000000000000..218e669844431ccf5ba0a561834b4b306a610991 --- /dev/null +++ b/src/cheogram/java/com/cheogram/android/SafeViewPager.java @@ -0,0 +1,39 @@ +package com.cheogram.android; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +// Works around a long-standing Android bug where ViewPager's onInterceptTouchEvent / +// onTouchEvent can trip over a stale mActivePointerId: a MOVE arrives whose pointer +// set no longer contains the id cached from the earlier DOWN, so findPointerIndex +// returns -1 and getX(-1) throws IllegalArgumentException from native code. Returning +// false means "not intercepting / not consuming", which lets children handle the +// event and lets the pager recover on the next clean DOWN. +public class SafeViewPager extends androidx.viewpager.widget.ViewPager { + public SafeViewPager(Context context) { + super(context); + } + + public SafeViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + try { + return super.onInterceptTouchEvent(ev); + } catch (IllegalArgumentException e) { + return false; + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + try { + return super.onTouchEvent(ev); + } catch (IllegalArgumentException e) { + return false; + } + } +} diff --git a/src/cheogram/java/com/cheogram/android/WebviewAwareViewPager.java b/src/cheogram/java/com/cheogram/android/WebviewAwareViewPager.java index 1d261541ca09aebd7d0229fe3b84e7ef8784523b..f60479eef71548864c92c41605342f670cf57969 100644 --- a/src/cheogram/java/com/cheogram/android/WebviewAwareViewPager.java +++ b/src/cheogram/java/com/cheogram/android/WebviewAwareViewPager.java @@ -5,7 +5,7 @@ import android.util.AttributeSet; import android.view.View; import android.webkit.WebView; -public class WebviewAwareViewPager extends androidx.viewpager.widget.ViewPager { +public class WebviewAwareViewPager extends SafeViewPager { public WebviewAwareViewPager(Context context) { super(context); } diff --git a/src/cheogram/res/layout/activity_welcome.xml b/src/cheogram/res/layout/activity_welcome.xml index a12023f683f1c4d5337448157a992f5a7458315e..7ac0fabcea76d996c880f53c5604dc413eab5b68 100644 --- a/src/cheogram/res/layout/activity_welcome.xml +++ b/src/cheogram/res/layout/activity_welcome.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + - - +