summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-06-29 01:20:00 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-06-29 01:20:00 +0000
commit138b23bd71543e74247af908e97058b5424afedf (patch)
tree0619da0b2fdb99deab570a2e13bb83abdaaa3f69 /src
parent26def23702881867208bfc465af27a4f9afc26f6 (diff)
parent6d64d88b0f222c951f406a7e2195f8f3c0be208f (diff)
downloadandroid_packages_apps_Trebuchet-138b23bd71543e74247af908e97058b5424afedf.tar.gz
android_packages_apps_Trebuchet-138b23bd71543e74247af908e97058b5424afedf.tar.bz2
android_packages_apps_Trebuchet-138b23bd71543e74247af908e97058b5424afedf.zip
Merge "Fixing alpha of workspace components being changed at too many places" into ub-launcher3-calgary
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/Workspace.java55
-rw-r--r--src/com/android/launcher3/WorkspaceStateTransitionAnimation.java111
2 files changed, 72 insertions, 94 deletions
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 416da3abb..65fc94c0e 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -22,6 +22,8 @@ import android.animation.AnimatorSet;
import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.WallpaperManager;
@@ -211,8 +213,18 @@ public class Workspace extends PagedView
}
}
+ private static final int HOTSEAT_STATE_ALPHA_INDEX = 2;
+
+ /**
+ * These values correspond to {@link Direction#X} & {@link Direction#Y}
+ */
private float[] mPageAlpha = new float[] {1, 1};
- private float[] mHotseatAlpha = new float[] {1, 1};
+ /**
+ * Hotseat alpha can be changed when moving horizontally, vertically, changing states.
+ * The values correspond to {@link Direction#X}, {@link Direction#Y} &
+ * {@link #HOTSEAT_STATE_ALPHA_INDEX} respectively.
+ */
+ private float[] mHotseatAlpha = new float[] {1, 1, 1};
@ViewDebug.ExportedProperty(category = "launcher")
private State mState = State.NORMAL;
@@ -1448,16 +1460,43 @@ public class Workspace extends PagedView
*/
public void setHotseatTranslation(Direction direction, float translation, float alpha) {
Property<View, Float> property = direction.viewProperty;
- mHotseatAlpha[direction.ordinal()] = alpha;
- float finalAlpha = mHotseatAlpha[0] * mHotseatAlpha[1];
+ property.set(mPageIndicator, translation);
+ property.set(mLauncher.getHotseat(), translation);
+ setHotseatAlphaAtIndex(alpha, direction.ordinal());
+ }
- if (mPageIndicator != null) {
- property.set(mPageIndicator, translation);
- mPageIndicator.setAlpha(alpha);
- }
+ private void setHotseatAlphaAtIndex(float alpha, int index) {
+ mHotseatAlpha[index] = alpha;
+ float finalAlpha = mHotseatAlpha[0] * mHotseatAlpha[1] * mHotseatAlpha[2];
- property.set(mLauncher.getHotseat(), translation);
mLauncher.getHotseat().setAlpha(finalAlpha);
+ mPageIndicator.setAlpha(finalAlpha);
+ }
+
+ public ValueAnimator createHotseatAlphaAnimator(float finalValue) {
+ if (Float.compare(finalValue, mHotseatAlpha[HOTSEAT_STATE_ALPHA_INDEX]) == 0) {
+ // Return a dummy animator to avoid null checks.
+ return ValueAnimator.ofFloat(0, 0);
+ } else {
+ ValueAnimator animator = ValueAnimator
+ .ofFloat(mHotseatAlpha[HOTSEAT_STATE_ALPHA_INDEX], finalValue);
+ animator.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator valueAnimator) {
+ float value = (Float) valueAnimator.getAnimatedValue();
+ setHotseatAlphaAtIndex(value, HOTSEAT_STATE_ALPHA_INDEX);
+ }
+ });
+
+ AccessibilityManager am = (AccessibilityManager)
+ mLauncher.getSystemService(Context.ACCESSIBILITY_SERVICE);
+ final boolean accessibilityEnabled = am.isEnabled();
+ animator.addUpdateListener(
+ new AlphaUpdateListener(mLauncher.getHotseat(), accessibilityEnabled));
+ animator.addUpdateListener(
+ new AlphaUpdateListener(mPageIndicator, accessibilityEnabled));
+ return animator;
+ }
}
@Override
diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
index 888cc5783..ab4cd8da7 100644
--- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
+++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
@@ -189,11 +189,6 @@ public class WorkspaceStateTransitionAnimation {
final @Thunk Workspace mWorkspace;
@Thunk AnimatorSet mStateAnimator;
- @Thunk float[] mOldBackgroundAlphas;
- @Thunk float[] mOldAlphas;
- @Thunk float[] mNewBackgroundAlphas;
- @Thunk float[] mNewAlphas;
- @Thunk int mLastChildCount = -1;
@Thunk float mCurrentScale;
@Thunk float mNewScale;
@@ -248,19 +243,6 @@ public class WorkspaceStateTransitionAnimation {
}
/**
- * Reinitializes the arrays that we need for the animations on each page.
- */
- private void reinitializeAnimationArrays() {
- final int childCount = mWorkspace.getChildCount();
- if (mLastChildCount == childCount) return;
-
- mOldBackgroundAlphas = new float[childCount];
- mOldAlphas = new float[childCount];
- mNewBackgroundAlphas = new float[childCount];
- mNewAlphas = new float[childCount];
- }
-
- /**
* Returns the proper animation duration for a transition.
*/
private int getAnimationDuration(TransitionStates states) {
@@ -282,9 +264,6 @@ public class WorkspaceStateTransitionAnimation {
private void animateWorkspace(final TransitionStates states, final boolean animated,
final int duration, final HashMap<View, Integer> layerViews,
final boolean accessibilityEnabled) {
- // Reinitialize animation arrays for the current workspace state
- reinitializeAnimationArrays();
-
// Cancel existing workspace animations and create a new animator set if requested
cancelAnimation();
if (animated) {
@@ -295,7 +274,6 @@ public class WorkspaceStateTransitionAnimation {
float finalBackgroundAlpha = (states.stateIsSpringLoaded || states.stateIsOverview) ?
1.0f : 0f;
float finalHotseatAlpha = (states.stateIsNormal || states.stateIsSpringLoaded) ? 1f : 0f;
- float finalPageIndicatorAlpha = finalHotseatAlpha;
float finalOverviewPanelAlpha = states.stateIsOverview ? 1f : 0f;
float finalWorkspaceTranslationY = 0;
@@ -325,9 +303,9 @@ public class WorkspaceStateTransitionAnimation {
}
int toPage = mWorkspace.getPageNearestToCenterOfScreen();
+ // TODO: Animate the celllayout alpha instead of the pages.
for (int i = 0; i < childCount; i++) {
final CellLayout cl = (CellLayout) mWorkspace.getChildAt(i);
- boolean isCurrentPage = (i == toPage);
float initialAlpha = cl.getShortcutsAndWidgets().getAlpha();
float finalAlpha;
if (states.stateIsOverviewHidden) {
@@ -342,8 +320,9 @@ public class WorkspaceStateTransitionAnimation {
// If we are animating to/from the small state, then hide the side pages and fade the
// current page in
- if (!mWorkspace.isSwitchingState()) {
+ if (!FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP && !mWorkspace.isSwitchingState()) {
if (states.workspaceToAllApps || states.allAppsToWorkspace) {
+ boolean isCurrentPage = (i == toPage);
if (states.allAppsToWorkspace && isCurrentPage) {
initialAlpha = 0f;
} else if (!isCurrentPage) {
@@ -353,11 +332,23 @@ public class WorkspaceStateTransitionAnimation {
}
}
- mOldAlphas[i] = initialAlpha;
- mNewAlphas[i] = finalAlpha;
if (animated) {
- mOldBackgroundAlphas[i] = cl.getBackgroundAlpha();
- mNewBackgroundAlphas[i] = finalBackgroundAlpha;
+ float oldBackgroundAlpha = cl.getBackgroundAlpha();
+ if (initialAlpha != finalAlpha) {
+ LauncherViewPropertyAnimator alphaAnim =
+ new LauncherViewPropertyAnimator(cl.getShortcutsAndWidgets());
+ alphaAnim.alpha(finalAlpha)
+ .setDuration(duration)
+ .setInterpolator(mZoomInInterpolator);
+ mStateAnimator.play(alphaAnim);
+ }
+ if (oldBackgroundAlpha != 0 || finalBackgroundAlpha != 0) {
+ ValueAnimator bgAnim = ObjectAnimator.ofFloat(cl, "backgroundAlpha",
+ oldBackgroundAlpha, finalBackgroundAlpha);
+ bgAnim.setInterpolator(mZoomInInterpolator);
+ bgAnim.setDuration(duration);
+ mStateAnimator.play(bgAnim);
+ }
} else {
cl.setBackgroundAlpha(finalBackgroundAlpha);
cl.setShortcutAndWidgetAlpha(finalAlpha);
@@ -365,8 +356,6 @@ public class WorkspaceStateTransitionAnimation {
}
final ViewGroup overviewPanel = mLauncher.getOverviewPanel();
- final View hotseat = mLauncher.getHotseat();
- final View pageIndicator = mWorkspace.getPageIndicator();
if (animated) {
LauncherViewPropertyAnimator scale = new LauncherViewPropertyAnimator(mWorkspace);
scale.scaleX(mNewScale)
@@ -375,49 +364,7 @@ public class WorkspaceStateTransitionAnimation {
.setDuration(duration)
.setInterpolator(mZoomInInterpolator);
mStateAnimator.play(scale);
- for (int index = 0; index < childCount; index++) {
- final int i = index;
- final CellLayout cl = (CellLayout) mWorkspace.getChildAt(i);
- float currentAlpha = cl.getShortcutsAndWidgets().getAlpha();
- if (mOldAlphas[i] == 0 && mNewAlphas[i] == 0) {
- cl.setBackgroundAlpha(mNewBackgroundAlphas[i]);
- cl.setShortcutAndWidgetAlpha(mNewAlphas[i]);
- } else {
- if (layerViews != null) {
- layerViews.put(cl, LauncherStateTransitionAnimation.BUILD_LAYER);
- }
- if (mOldAlphas[i] != mNewAlphas[i] || currentAlpha != mNewAlphas[i]) {
- LauncherViewPropertyAnimator alphaAnim =
- new LauncherViewPropertyAnimator(cl.getShortcutsAndWidgets());
- alphaAnim.alpha(mNewAlphas[i])
- .setDuration(duration)
- .setInterpolator(mZoomInInterpolator);
- mStateAnimator.play(alphaAnim);
- }
- if (mOldBackgroundAlphas[i] != 0 ||
- mNewBackgroundAlphas[i] != 0) {
- ValueAnimator bgAnim = ObjectAnimator.ofFloat(cl, "backgroundAlpha",
- mOldBackgroundAlphas[i], mNewBackgroundAlphas[i]);
- bgAnim.setInterpolator(mZoomInInterpolator);
- bgAnim.setDuration(duration);
- mStateAnimator.play(bgAnim);
- }
- }
- }
- Animator pageIndicatorAlpha;
- if (pageIndicator != null) {
- pageIndicatorAlpha = new LauncherViewPropertyAnimator(pageIndicator)
- .alpha(finalPageIndicatorAlpha).withLayer();
- pageIndicatorAlpha.addListener(new AlphaUpdateListener(pageIndicator,
- accessibilityEnabled));
- } else {
- // create a dummy animation so we don't need to do null checks later
- pageIndicatorAlpha = ValueAnimator.ofFloat(0, 0);
- }
-
- LauncherViewPropertyAnimator hotseatAlpha = new LauncherViewPropertyAnimator(hotseat)
- .alpha(finalHotseatAlpha);
- hotseatAlpha.addListener(new AlphaUpdateListener(hotseat, accessibilityEnabled));
+ Animator hotseatAlpha = mWorkspace.createHotseatAlphaAnimator(finalHotseatAlpha);
LauncherViewPropertyAnimator overviewPanelAlpha =
new LauncherViewPropertyAnimator(overviewPanel).alpha(finalOverviewPanelAlpha);
@@ -426,36 +373,33 @@ public class WorkspaceStateTransitionAnimation {
// For animation optimations, we may need to provide the Launcher transition
// with a set of views on which to force build layers in certain scenarios.
- hotseat.setLayerType(View.LAYER_TYPE_HARDWARE, null);
overviewPanel.setLayerType(View.LAYER_TYPE_HARDWARE, null);
if (layerViews != null) {
// If layerViews is not null, we add these views, and indicate that
// the caller can manage layer state.
- layerViews.put(hotseat, LauncherStateTransitionAnimation.BUILD_AND_SET_LAYER);
layerViews.put(overviewPanel, LauncherStateTransitionAnimation.BUILD_AND_SET_LAYER);
+ layerViews.put(mLauncher.getHotseat(),
+ LauncherStateTransitionAnimation.BUILD_AND_SET_LAYER);
+ layerViews.put(mWorkspace.getPageIndicator(),
+ LauncherStateTransitionAnimation.BUILD_AND_SET_LAYER);
} else {
// Otherwise let the animator handle layer management.
- hotseatAlpha.withLayer();
overviewPanelAlpha.withLayer();
}
if (states.workspaceToOverview) {
- pageIndicatorAlpha.setInterpolator(new DecelerateInterpolator(2));
hotseatAlpha.setInterpolator(new DecelerateInterpolator(2));
overviewPanelAlpha.setInterpolator(null);
} else if (states.overviewToWorkspace) {
- pageIndicatorAlpha.setInterpolator(null);
hotseatAlpha.setInterpolator(null);
overviewPanelAlpha.setInterpolator(new DecelerateInterpolator(2));
}
overviewPanelAlpha.setDuration(duration);
- pageIndicatorAlpha.setDuration(duration);
hotseatAlpha.setDuration(duration);
mStateAnimator.play(overviewPanelAlpha);
mStateAnimator.play(hotseatAlpha);
- mStateAnimator.play(pageIndicatorAlpha);
mStateAnimator.addListener(new AnimatorListenerAdapter() {
boolean canceled = false;
@Override
@@ -476,12 +420,7 @@ public class WorkspaceStateTransitionAnimation {
} else {
overviewPanel.setAlpha(finalOverviewPanelAlpha);
AlphaUpdateListener.updateVisibility(overviewPanel, accessibilityEnabled);
- hotseat.setAlpha(finalHotseatAlpha);
- AlphaUpdateListener.updateVisibility(hotseat, accessibilityEnabled);
- if (pageIndicator != null) {
- pageIndicator.setAlpha(finalPageIndicatorAlpha);
- AlphaUpdateListener.updateVisibility(pageIndicator, accessibilityEnabled);
- }
+ mWorkspace.createHotseatAlphaAnimator(finalHotseatAlpha).end();
mWorkspace.updateCustomContentVisibility();
mWorkspace.setScaleX(mNewScale);
mWorkspace.setScaleY(mNewScale);