Merge "Cleaning up animation code"
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index 062656f..d7b3fee 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -70,6 +70,15 @@
android:id="@+id/qsb_bar"
layout="@layout/qsb_bar" />
+ <com.android.launcher2.DrawableStateProxyView
+ android:id="@+id/voice_button_proxy"
+ android:layout_width="@dimen/qsb_bar_height"
+ android:layout_height="@dimen/qsb_bar_height"
+ android:layout_gravity="right"
+ android:clickable="true"
+ android:onClick="onClickVoiceButton"
+ launcher:sourceViewId="@+id/voice_button" />
+
<include layout="@layout/apps_customize_pane"
android:id="@+id/apps_customize_pane"
android:layout_width="match_parent"
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 1258562..9ed824b 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -27,6 +27,13 @@
<skip />
+ <!-- DrawableStateProxyView specific attributes. These attributes are used to customize
+ a DrawableStateProxyView view in XML files. -->
+ <declare-styleable name="DrawableStateProxyView">
+ <!-- The source view to delegate touch presses events to. -->
+ <attr name="sourceViewId" format="integer" />
+ </declare-styleable>
+
<!-- Cling specific attributes. These attributes are used to customize
the cling in XML files. -->
<declare-styleable name="Cling">
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index e27345b..5df271e 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -903,10 +903,6 @@
return mBackgroundAlpha;
}
- public void setFastBackgroundAlpha(float alpha) {
- mBackgroundAlpha = alpha;
- }
-
public void setBackgroundAlphaMultiplier(float multiplier) {
mBackgroundAlphaMultiplier = multiplier;
}
@@ -936,11 +932,6 @@
super.setAlpha(alpha);
}
- public void setFastAlpha(float alpha) {
- setFastChildrenAlpha(alpha);
- super.setFastAlpha(alpha);
- }
-
private void setChildrenAlpha(float alpha) {
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
@@ -948,13 +939,6 @@
}
}
- private void setFastChildrenAlpha(float alpha) {
- final int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- getChildAt(i).setFastAlpha(alpha);
- }
- }
-
public View getChildAt(int x, int y) {
return mChildren.getChildAt(x, y);
}
diff --git a/src/com/android/launcher2/DrawableStateProxyView.java b/src/com/android/launcher2/DrawableStateProxyView.java
new file mode 100644
index 0000000..498730f
--- /dev/null
+++ b/src/com/android/launcher2/DrawableStateProxyView.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2012 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 com.android.launcher2;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import com.android.launcher.R;
+
+public class DrawableStateProxyView extends LinearLayout {
+
+ private View mView;
+ private int mViewId;
+
+ public DrawableStateProxyView(Context context) {
+ this(context, null);
+ }
+
+ public DrawableStateProxyView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public DrawableStateProxyView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DrawableStateProxyView,
+ defStyle, 0);
+ mViewId = a.getResourceId(R.styleable.DrawableStateProxyView_sourceViewId, -1);
+ a.recycle();
+
+ setFocusable(false);
+ }
+
+ @Override
+ protected void drawableStateChanged() {
+ super.drawableStateChanged();
+
+ if (mView == null) {
+ View parent = (View) getParent();
+ mView = parent.findViewById(mViewId);
+ }
+ mView.setPressed(isPressed());
+ mView.setHovered(isHovered());
+ }
+}
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index f5bd7db..08d3315 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -20,8 +20,6 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
@@ -37,10 +35,9 @@
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.View.MeasureSpec;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.DecelerateInterpolator;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;
diff --git a/src/com/android/launcher2/HandleView.java b/src/com/android/launcher2/HandleView.java
index 13d07e2..d77138b 100644
--- a/src/com/android/launcher2/HandleView.java
+++ b/src/com/android/launcher2/HandleView.java
@@ -17,13 +17,12 @@
package com.android.launcher2;
-import android.widget.ImageView;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.MotionEvent;
-import android.view.KeyEvent;
import android.view.View;
+import android.widget.ImageView;
import com.android.launcher.R;
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 438a5d9..ab25780 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -1051,7 +1051,6 @@
mAppsCustomizeTabHost.onWindowVisible();
if (!mWorkspaceLoading) {
final ViewTreeObserver observer = mWorkspace.getViewTreeObserver();
- final Workspace workspace = mWorkspace;
// We want to let Launcher draw itself at least once before we force it to build
// layers on all the workspace pages, so that transitioning to Launcher from other
// apps is nice and speedy. Usually the first call to preDraw doesn't correspond to
@@ -2304,13 +2303,18 @@
}
if (delayAnim) {
+ final AnimatorSet stateAnimation = mStateAnimation;
final OnGlobalLayoutListener delayedStart = new OnGlobalLayoutListener() {
public void onGlobalLayout() {
mWorkspace.post(new Runnable() {
public void run() {
- // Need to update pivots for zoom if layout changed
- setPivotsForZoom(toView, scale);
- mStateAnimation.start();
+ // Check that mStateAnimation hasn't changed while
+ // we waited for a layout pass
+ if (mStateAnimation == stateAnimation) {
+ // Need to update pivots for zoom if layout changed
+ setPivotsForZoom(toView, scale);
+ mStateAnimation.start();
+ }
}
});
observer.removeGlobalOnLayoutListener(this);
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index c72fdcc..939b7fd 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -624,8 +624,7 @@
if (child != null) {
float scrollProgress = getScrollProgress(screenCenter, child, i);
float alpha = 1 - Math.abs(scrollProgress);
- child.setFastAlpha(alpha);
- child.fastInvalidate();
+ child.setAlpha(alpha);
}
}
invalidate();
diff --git a/src/com/android/launcher2/PagedViewIcon.java b/src/com/android/launcher2/PagedViewIcon.java
index b0288dc..331bc14 100644
--- a/src/com/android/launcher2/PagedViewIcon.java
+++ b/src/com/android/launcher2/PagedViewIcon.java
@@ -16,17 +16,11 @@
package com.android.launcher2;
-import android.animation.ObjectAnimator;
import android.content.Context;
-import android.content.res.Resources;
import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;
-import com.android.launcher.R;
-
/**
* An icon on a PagedView, specifically for items in the launcher's paged view (with compound
* drawables on the top).
diff --git a/src/com/android/launcher2/PagedViewWidget.java b/src/com/android/launcher2/PagedViewWidget.java
index e2b02a3..12e9c46 100644
--- a/src/com/android/launcher2/PagedViewWidget.java
+++ b/src/com/android/launcher2/PagedViewWidget.java
@@ -16,18 +16,12 @@
package com.android.launcher2;
-import android.animation.ObjectAnimator;
import android.appwidget.AppWidgetProviderInfo;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.RectF;
import android.util.AttributeSet;
-import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -43,9 +37,7 @@
private static boolean sDeletePreviewsWhenDetachedFromWindow = true;
- private final Paint mPaint = new Paint();
private ImageView mPreviewImageView;
- private final RectF mTmpScaleRect = new RectF();
private String mDimensionsFormatString;
@@ -146,16 +138,4 @@
// we just always mark the touch event as handled.
return super.onTouchEvent(event) || true;
}
-
- @Override
- protected boolean onSetAlpha(int alpha) {
- return true;
- }
-
- private void setChildrenAlpha(float alpha) {
- final int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- getChildAt(i).setAlpha(alpha);
- }
- }
}
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 7d61f62..74ab607 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -854,7 +854,7 @@
}
}
if (keepUpdating) {
- fastInvalidate();
+ invalidate();
}
}
@@ -1166,13 +1166,12 @@
backgroundAlphaInterpolator(Math.abs(scrollProgress)));
}
}
- cl.setFastTranslationX(translationX);
- cl.setFastRotationY(rotation);
+ cl.setTranslationX(translationX);
+ cl.setRotationY(rotation);
if (mFadeInAdjacentScreens && !isSmall()) {
float alpha = 1 - Math.abs(scrollProgress);
- cl.setFastAlpha(alpha);
+ cl.setAlpha(alpha);
}
- cl.fastInvalidate();
}
}
if (!isSwitchingState() && !isInOverscroll) {
@@ -1652,16 +1651,15 @@
for (int index = 0; index < getChildCount(); index++) {
final int i = index;
final CellLayout cl = (CellLayout) getChildAt(i);
- invalidate();
if (mOldAlphas[i] == 0 && mNewAlphas[i] == 0) {
- cl.fastInvalidate();
- cl.setFastTranslationX(mNewTranslationXs[i]);
- cl.setFastTranslationY(mNewTranslationYs[i]);
- cl.setFastScaleX(mNewScaleXs[i]);
- cl.setFastScaleY(mNewScaleYs[i]);
- cl.setFastBackgroundAlpha(mNewBackgroundAlphas[i]);
+ cl.setTranslationX(mNewTranslationXs[i]);
+ cl.setTranslationY(mNewTranslationYs[i]);
+ cl.setScaleX(mNewScaleXs[i]);
+ cl.setScaleY(mNewScaleYs[i]);
+ cl.setBackgroundAlpha(mNewBackgroundAlphas[i]);
cl.setBackgroundAlphaMultiplier(mNewBackgroundAlphaMultipliers[i]);
- cl.setFastAlpha(mNewAlphas[i]);
+ cl.setAlpha(mNewAlphas[i]);
+ cl.setRotationY(mNewRotationYs[i]);
} else {
LauncherViewPropertyAnimator a = new LauncherViewPropertyAnimator(cl);
a.translationX(mNewTranslationXs[i])
@@ -1692,7 +1690,7 @@
bgAnim.setInterpolator(mZoomInInterpolator);
bgAnim.addUpdateListener(new LauncherAnimatorUpdateListener() {
public void onAnimationUpdate(float a, float b) {
- cl.setFastBackgroundAlpha(
+ cl.setBackgroundAlpha(
a * mOldBackgroundAlphas[i] +
b * mNewBackgroundAlphas[i]);
cl.setBackgroundAlphaMultiplier(