From 5589f9eebc0be31a6c45f235cf08b8e6f528b4b1 Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sat, 5 Dec 2015 12:20:18 +0100 Subject: [PATCH] Fix ViewPager for API Level 15 (pre JB) --- src/android/support/v4/view/ViewPager.java | 14 ++--- .../support/v4/view/ViewPagerIcsCompat.java | 54 +++++++++++++++++++ 2 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 src/android/support/v4/view/ViewPagerIcsCompat.java diff --git a/src/android/support/v4/view/ViewPager.java b/src/android/support/v4/view/ViewPager.java index 32b02107..8825c0a5 100644 --- a/src/android/support/v4/view/ViewPager.java +++ b/src/android/support/v4/view/ViewPager.java @@ -377,7 +377,7 @@ public class ViewPager extends ViewGroup { this.setAccessibilityDelegate(new MyAccessibilityDelegate()); - if (this.getImportantForAccessibility() + if (ViewPagerIcsCompat.getImportantForAccessibility(this) == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) { this.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); } @@ -859,7 +859,7 @@ public class ViewPager extends ViewGroup { duration = Math.min(duration, MAX_SETTLE_DURATION); mScroller.startScroll(sx, sy, dx, dy, duration); - this.postInvalidateOnAnimation(); + ViewPagerIcsCompat.postInvalidateOnAnimation(this); } ItemInfo addNewItem(int position, int index) { @@ -1651,7 +1651,7 @@ public class ViewPager extends ViewGroup { } // Keep on drawing until the animation has finished. - this.postInvalidateOnAnimation(); + ViewPagerIcsCompat.postInvalidateOnAnimation(this); return; } @@ -1837,7 +1837,7 @@ public class ViewPager extends ViewGroup { } if (needPopulate) { if (postEvents) { - this.postOnAnimation(mEndScrollRunnable); + ViewPagerIcsCompat.postOnAnimation(this, mEndScrollRunnable); } else { mEndScrollRunnable.run(); } @@ -1947,7 +1947,7 @@ public class ViewPager extends ViewGroup { if (mIsBeingDragged) { // Scroll to follow the motion event if (performDrag(x)) { - this.postInvalidateOnAnimation(); + ViewPagerIcsCompat.postInvalidateOnAnimation(this); } } break; @@ -2119,7 +2119,7 @@ public class ViewPager extends ViewGroup { break; } if (needsInvalidate) { - this.postInvalidateOnAnimation(); + ViewPagerIcsCompat.postInvalidateOnAnimation(this); } return true; } @@ -2290,7 +2290,7 @@ public class ViewPager extends ViewGroup { if (needsInvalidate) { // Keep animating - this.postInvalidateOnAnimation(); + ViewPagerIcsCompat.postInvalidateOnAnimation(this); } } diff --git a/src/android/support/v4/view/ViewPagerIcsCompat.java b/src/android/support/v4/view/ViewPagerIcsCompat.java new file mode 100644 index 00000000..b6b8698d --- /dev/null +++ b/src/android/support/v4/view/ViewPagerIcsCompat.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.os.Build; +import android.view.View; + + +/** + * Bare bones compat library to support ICS (API level 15) + * for Vanilla Music + */ +public class ViewPagerIcsCompat { + // From ViewPagerCompat + private static final long FAKE_FRAME_TIME = 10; + + public static int getImportantForAccessibility(View view) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + return view.getImportantForAccessibility(); + } else { + return -1; // never returned by real implementation + } + } + + public static void postInvalidateOnAnimation(View view) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + view.postInvalidateOnAnimation(); + } else { + view.postInvalidateDelayed(FAKE_FRAME_TIME); + } + } + + public static void postOnAnimation(View view, Runnable action) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + view.postOnAnimation(action); + } else { + view.postDelayed(action, FAKE_FRAME_TIME); + } + } +}