OSDN Git Service

Fix 6683092: tune GlowPadView wave animation
authorJim Miller <jaggies@google.com>
Tue, 19 Jun 2012 00:04:58 +0000 (17:04 -0700)
committerJim Miller <jaggies@google.com>
Tue, 19 Jun 2012 00:04:58 +0000 (17:04 -0700)
This adds some aesthetic changes to the wave animation for GlowPadView:
- wave shape is no longer symmetric
- disable expand in keyguard
- enable expand in SearchPanelView (when mAlwaysTrackFinger == true)
- if a current wave animation isn't finished yet, don't start a new one
- various timing changes

Change-Id: Ibce96f45eb6a94582c694108b99e243fd57b1955

core/java/com/android/internal/widget/multiwaveview/GlowPadView.java
core/java/com/android/internal/widget/multiwaveview/PointCloud.java
packages/SystemUI/res/layout-land/status_bar_search_panel.xml
packages/SystemUI/res/layout-port/status_bar_search_panel.xml
packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml
packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml

index 837b7b8..adea586 100644 (file)
@@ -76,7 +76,7 @@ public class GlowPadView extends View {
     }
 
     // Tuneable parameters for animation
-    private static final int WAVE_ANIMATION_DURATION = 1200;
+    private static final int WAVE_ANIMATION_DURATION = 1350;
     private static final int RETURN_TO_HOME_DELAY = 1200;
     private static final int RETURN_TO_HOME_DURATION = 200;
     private static final int HIDE_ANIMATION_DELAY = 200;
@@ -361,6 +361,7 @@ public class GlowPadView extends View {
                 mHandleDrawable.setAlpha(0.0f);
                 deactivateTargets();
                 showTargets(true);
+                ping();
                 startBackgroundAnimation(INITIAL_SHOW_HANDLE_DURATION, 1.0f);
                 setGrabbedState(OnTriggerListener.CENTER_HANDLE);
                 if (AccessibilityManager.getInstance(mContext).isEnabled()) {
@@ -484,7 +485,12 @@ public class GlowPadView extends View {
         final int duration = animate ? HIDE_ANIMATION_DURATION : 0;
         final int delay = animate ? HIDE_ANIMATION_DELAY : 0;
 
-        final float targetScale = expanded ? TARGET_SCALE_EXPANDED : TARGET_SCALE_COLLAPSED;
+        // TODO: add an attribute for this. For now we'll show the expand for navbar, but not
+        // keyguard.
+        final boolean expandDisabled = !mAlwaysTrackFinger;
+
+        final float targetScale = (expanded || expandDisabled) ?
+                TARGET_SCALE_EXPANDED : TARGET_SCALE_COLLAPSED;
         final int length = mTargetDrawables.size();
         final TimeInterpolator interpolator = Ease.Cubic.easeOut;
         for (int i = 0; i < length; i++) {
@@ -499,7 +505,8 @@ public class GlowPadView extends View {
                     "onUpdate", mUpdateListener));
         }
 
-        final float ringScaleTarget = expanded ? RING_SCALE_EXPANDED : RING_SCALE_COLLAPSED;
+        final float ringScaleTarget = (expanded || expandDisabled) ?
+                RING_SCALE_EXPANDED : RING_SCALE_COLLAPSED;
         mTargetAnimations.add(Tweener.to(mOuterRing, duration,
                 "ease", interpolator,
                 "alpha", 0.0f,
@@ -663,7 +670,20 @@ public class GlowPadView extends View {
      */
     public void ping() {
         if (mFeedbackCount > 0) {
-            startWaveAnimation();
+            boolean doWaveAnimation = true;
+            final AnimationBundle waveAnimations = mWaveAnimations;
+
+            // Don't do a wave if there's already one in progress
+            if (waveAnimations.size() > 0 && waveAnimations.get(0).animator.isRunning()) {
+                long t = waveAnimations.get(0).animator.getCurrentPlayTime();
+                if (t < WAVE_ANIMATION_DURATION/2) {
+                    doWaveAnimation = false;
+                }
+            }
+
+            if (doWaveAnimation) {
+                startWaveAnimation();
+            }
         }
     }
 
@@ -677,7 +697,7 @@ public class GlowPadView extends View {
         mPointCloud.waveManager.setAlpha(1.0f);
         mPointCloud.waveManager.setRadius(mHandleDrawable.getWidth()/2.0f);
         mWaveAnimations.add(Tweener.to(mPointCloud.waveManager, WAVE_ANIMATION_DURATION,
-                "ease", Ease.Linear.easeNone,
+                "ease", Ease.Quad.easeOut,
                 "delay", 0,
                 "radius", 2.0f * mOuterRadius,
                 "onUpdate", mUpdateListener,
index 1beac16..1a5a9a2 100644 (file)
@@ -186,10 +186,10 @@ public class PointCloud {
 
         // Compute contribution from Wave
         float radius = hypot(point.x, point.y);
-        float distanceToWaveRing = Math.abs(radius - waveManager.radius);
+        float distanceToWaveRing = (radius - waveManager.radius);
         float waveAlpha = 0.0f;
-        if (distanceToWaveRing < waveManager.width * 0.5f) {
-            float cosf = FloatMath.cos(PI * 0.5f * distanceToWaveRing / waveManager.width);
+        if (distanceToWaveRing < waveManager.width * 0.5f && distanceToWaveRing < 0.0f) {
+            float cosf = FloatMath.cos(PI * 0.25f * distanceToWaveRing / waveManager.width);
             waveAlpha = waveManager.alpha * max(0.0f, (float) Math.pow(cosf, 20.0f));
         }
 
index c8a120d..f91e5d6 100644 (file)
@@ -54,7 +54,7 @@
                 prvandroid:outerRadius="@dimen/navbar_search_outerring_radius"
                 prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
                 prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
-                prvandroid:feedbackCount="0"
+                prvandroid:feedbackCount="1"
                 prvandroid:vibrationDuration="@integer/config_vibration_duration"
                 prvandroid:alwaysTrackFinger="true"
                 prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
index 1e4bb57..2556aca 100644 (file)
@@ -54,7 +54,7 @@
                 prvandroid:outerRadius="@dimen/navbar_search_outerring_radius"
                 prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
                 prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
-                prvandroid:feedbackCount="0"
+                prvandroid:feedbackCount="1"
                 prvandroid:vibrationDuration="@integer/config_vibration_duration"
                 prvandroid:alwaysTrackFinger="true"
                 prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
index 3b6c52e..459fac9 100644 (file)
@@ -40,7 +40,7 @@
         prvandroid:outerRadius="@dimen/navbar_search_outerring_radius"
         prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
         prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
-        prvandroid:feedbackCount="0"
+        prvandroid:feedbackCount="1"
         prvandroid:vibrationDuration="@integer/config_vibration_duration"
         prvandroid:alwaysTrackFinger="true"
         prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
index 8c2360e..d2e26db 100644 (file)
@@ -41,7 +41,7 @@
         prvandroid:outerRadius="@dimen/navbar_search_outerring_radius"
         prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
         prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
-        prvandroid:feedbackCount="0"
+        prvandroid:feedbackCount="1"
         prvandroid:vibrationDuration="@integer/config_vibration_duration"
         prvandroid:alwaysTrackFinger="true"
         prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"