From bc64230a654b8339df28a01cf0d142ffbbe60b1b Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Thu, 18 Jan 2018 10:16:35 -0800 Subject: [PATCH] Switch to HackyViewPager for media preview Fixes #7344 Fixes #7335 --- res/layout/media_preview_activity.xml | 2 +- .../components/viewpager/HackyViewPager.java | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java diff --git a/res/layout/media_preview_activity.xml b/res/layout/media_preview_activity.xml index b9128ce4a0..b151df949a 100644 --- a/res/layout/media_preview_activity.xml +++ b/res/layout/media_preview_activity.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="@color/gray95"> - diff --git a/src/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java b/src/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java new file mode 100644 index 0000000000..dc44010413 --- /dev/null +++ b/src/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java @@ -0,0 +1,43 @@ +package org.thoughtcrime.securesms.components.viewpager; + + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; + +/** + * Hacky fix for http://code.google.com/p/android/issues/detail?id=18990 + *

+ * ScaleGestureDetector seems to mess up the touch events, which means that + * ViewGroups which make use of onInterceptTouchEvent throw a lot of + * IllegalArgumentException: pointerIndex out of range. + *

+ * There's not much I can do in my code for now, but we can mask the result by + * just catching the problem and ignoring it. + * + * @author Chris Banes + */ +public class HackyViewPager extends ViewPager { + + private static final String TAG = HackyViewPager.class.getSimpleName(); + + public HackyViewPager(Context context) { + super(context); + } + + public HackyViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + try { + return super.onInterceptTouchEvent(ev); + } catch (IllegalArgumentException e) { + Log.w(TAG, e); + return false; + } + } +} \ No newline at end of file