From 9bc11ac168d63900589158074028e6c480579421 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Fri, 12 Dec 2014 13:38:10 -0800 Subject: Move ripple to end state on jump when hardware exit is pending BUG: 18734676 Change-Id: Ie063e1eec0b4f28f936ea27822afacfd1b72a0e9 --- .../java/android/graphics/drawable/Ripple.java | 25 +++++++++++++++++----- .../graphics/drawable/RippleBackground.java | 22 ++++++++++++++----- 2 files changed, 37 insertions(+), 10 deletions(-) (limited to 'graphics') diff --git a/graphics/java/android/graphics/drawable/Ripple.java b/graphics/java/android/graphics/drawable/Ripple.java index a3a220c..ba1e86c 100644 --- a/graphics/java/android/graphics/drawable/Ripple.java +++ b/graphics/java/android/graphics/drawable/Ripple.java @@ -214,7 +214,7 @@ class Ripple { final boolean canUseHardware = c.isHardwareAccelerated(); if (mCanUseHardware != canUseHardware && mCanUseHardware) { // We've switched from hardware to non-hardware mode. Panic. - cancelHardwareAnimations(true); + cancelHardwareAnimations(false); } mCanUseHardware = canUseHardware; @@ -493,7 +493,7 @@ class Ripple { public void cancel() { mCanceled = true; cancelSoftwareAnimations(); - cancelHardwareAnimations(true); + cancelHardwareAnimations(false); mCanceled = false; } @@ -522,15 +522,30 @@ class Ripple { /** * Cancels any running hardware animations. */ - private void cancelHardwareAnimations(boolean cancelPending) { + private void cancelHardwareAnimations(boolean jumpToEnd) { final ArrayList runningAnimations = mRunningAnimations; final int N = runningAnimations.size(); for (int i = 0; i < N; i++) { - runningAnimations.get(i).cancel(); + if (jumpToEnd) { + runningAnimations.get(i).end(); + } else { + runningAnimations.get(i).cancel(); + } } runningAnimations.clear(); - mHasPendingHardwareExit = false; + if (mHasPendingHardwareExit) { + // If we had a pending hardware exit, jump to the end state. + mHasPendingHardwareExit = false; + + if (jumpToEnd) { + mOpacity = 0; + mTweenX = 1; + mTweenY = 1; + mTweenRadius = 1; + } + } + mHardwareAnimating = false; } diff --git a/graphics/java/android/graphics/drawable/RippleBackground.java b/graphics/java/android/graphics/drawable/RippleBackground.java index 665d736..cc42aac 100644 --- a/graphics/java/android/graphics/drawable/RippleBackground.java +++ b/graphics/java/android/graphics/drawable/RippleBackground.java @@ -148,7 +148,7 @@ class RippleBackground { final boolean canUseHardware = c.isHardwareAccelerated(); if (mCanUseHardware != canUseHardware && mCanUseHardware) { // We've switched from hardware to non-hardware mode. Panic. - cancelHardwareAnimations(true); + cancelHardwareAnimations(false); } mCanUseHardware = canUseHardware; @@ -399,7 +399,7 @@ class RippleBackground { */ public void cancel() { cancelSoftwareAnimations(); - cancelHardwareAnimations(true); + cancelHardwareAnimations(false); } private void cancelSoftwareAnimations() { @@ -412,15 +412,27 @@ class RippleBackground { /** * Cancels any running hardware animations. */ - private void cancelHardwareAnimations(boolean cancelPending) { + private void cancelHardwareAnimations(boolean jumpToEnd) { final ArrayList runningAnimations = mRunningAnimations; final int N = runningAnimations.size(); for (int i = 0; i < N; i++) { - runningAnimations.get(i).cancel(); + if (jumpToEnd) { + runningAnimations.get(i).end(); + } else { + runningAnimations.get(i).cancel(); + } } runningAnimations.clear(); - mHasPendingHardwareExit = false; + if (mHasPendingHardwareExit) { + // If we had a pending hardware exit, jump to the end state. + mHasPendingHardwareExit = false; + + if (jumpToEnd) { + mOuterOpacity = 0; + } + } + mHardwareAnimating = false; } -- cgit v1.1