From 1c058a68e9d2831ac4c607916dca3494b9fbd911 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Sun, 13 Oct 2013 19:35:47 -0700 Subject: [PATCH] Don't move clock when warping in PagedView This fixes a bug where the clock would appear to move when flinging the camera widget while warping. To accomplish this, it no longer scrolls while warping but rather updates the warp view's translationX. When the finger is released or a fling happens, we either smoothly animate the view back (without scrolling) or update the scroll position and let the scroller take over the animation. Fixes bug 11191094 Change-Id: I33f087cf4fb2ec31db11d69d11055b513604b1d1 --- .../src/com/android/keyguard/PagedView.java | 30 ++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/PagedView.java b/packages/Keyguard/src/com/android/keyguard/PagedView.java index 23488d44a6e3..814ac9827251 100644 --- a/packages/Keyguard/src/com/android/keyguard/PagedView.java +++ b/packages/Keyguard/src/com/android/keyguard/PagedView.java @@ -1427,7 +1427,10 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc if (Math.abs(deltaX) >= 1.0f) { mTouchX += deltaX; mSmoothingTime = System.nanoTime() / NANOTIME_DIV; - if (!mDeferScrollUpdate) { + if (isWarping()) { + KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(mPageWarpIndex); + v.setTranslationX(v.getTranslationX() - deltaX); + } else if (!mDeferScrollUpdate) { scrollBy((int) deltaX, 0); if (DEBUG) Log.d(TAG, "onTouchEvent().Scrolling: " + deltaX); } else { @@ -1806,10 +1809,11 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } protected void snapToDestination() { + final int newPage = getPageNearestToCenterOfScreen(); if (isWarping()) { - cancelWarpAnimation("snapToDestination"); + cancelWarpAnimation("snapToDestination", mCurrentPage != newPage); } - snapToPage(getPageNearestToCenterOfScreen(), getPageSnapDuration()); + snapToPage(newPage, getPageSnapDuration()); } private int getPageSnapDuration() { @@ -1841,7 +1845,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc int halfScreenSize = getViewportWidth() / 2; if (isWarping()) { - cancelWarpAnimation("snapToPageWithVelocity"); + cancelWarpAnimation("snapToPageWithVelocity", mCurrentPage != whichPage); } if (DEBUG) Log.d(TAG, "snapToPage.getChildOffset(): " + getChildOffset(whichPage)); @@ -2699,13 +2703,19 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } }; - private void cancelWarpAnimation(String msg) { + private void cancelWarpAnimation(String msg, boolean abortAnimation) { if (DEBUG_WARP) Log.v(TAG, "cancelWarpAnimation(" + msg + ")"); - // We're done with the animation, let the scroller take over the positioning - KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(mPageWarpIndex); - v.animate().cancel(); - v.setTranslationX(0f); - scrollBy((int) Math.round(v.getTranslationX() - mWarpPeekAmount), 0); + if (abortAnimation) { + // We're done with the animation and moving to a new page. Let the scroller + // take over the animation. + KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(mPageWarpIndex); + v.animate().cancel(); + // Make the scroll amount match the current warp position. + scrollBy(Math.round(-v.getTranslationX()), 0); + v.setTranslationX(0); + } else { + animateWarpPageOffScreen("canceled", true); + } } private boolean isAnimatingWarpPage() { -- 2.11.0