summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/Workspace.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2017-10-16 11:46:41 -0700
committerSunny Goyal <sunnygoyal@google.com>2017-10-17 12:42:08 -0700
commitaeb1643ec61af93453c862e84b158d3b0ebcb1c7 (patch)
treeb57dcdc0892a153cb83333a2dab55547e7d87665 /src/com/android/launcher3/Workspace.java
parent1797af41d162413dc98c33fab8ba19f96b63874b (diff)
downloadandroid_packages_apps_Trebuchet-aeb1643ec61af93453c862e84b158d3b0ebcb1c7.tar.gz
android_packages_apps_Trebuchet-aeb1643ec61af93453c862e84b158d3b0ebcb1c7.tar.bz2
android_packages_apps_Trebuchet-aeb1643ec61af93453c862e84b158d3b0ebcb1c7.zip
Launcher state management cleanup
> Removing Widgets and related states > Fixing different durations being used when opening/closing all-apps > Removing some unnecessary object allocations when changing state without animation > Differentiating widget bootm sheel and full sheet in logs Bug: 67678570 Change-Id: Ic169528736d04ee0b38564b4f96595ba066eabda
Diffstat (limited to 'src/com/android/launcher3/Workspace.java')
-rw-r--r--src/com/android/launcher3/Workspace.java148
1 files changed, 88 insertions, 60 deletions
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 1525e41d2..b57ce6375 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -16,6 +16,12 @@
package com.android.launcher3;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_NEXT_FRAME;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_SHORT_TIMEOUT;
+import static com.android.launcher3.LauncherAnimUtils.ALL_APPS_TRANSITION_MS;
+import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_TRANSITION_MS;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
@@ -49,12 +55,14 @@ import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.Toast;
import com.android.launcher3.Launcher.LauncherOverlay;
import com.android.launcher3.LauncherAppWidgetHost.ProviderChangedListener;
+import com.android.launcher3.LauncherStateTransitionAnimation.AnimationConfig;
import com.android.launcher3.accessibility.AccessibleDragListenerAdapter;
import com.android.launcher3.accessibility.OverviewAccessibilityDelegate;
import com.android.launcher3.accessibility.OverviewScreenAccessibilityDelegate;
@@ -181,20 +189,26 @@ public class Workspace extends PagedView
// in all apps or customize mode)
public enum State {
- NORMAL (false, false, ContainerType.WORKSPACE),
- NORMAL_HIDDEN (false, false, ContainerType.ALLAPPS),
- SPRING_LOADED (false, true, ContainerType.WORKSPACE),
- OVERVIEW (true, true, ContainerType.OVERVIEW),
- OVERVIEW_HIDDEN (true, false, ContainerType.WIDGETS);
+ NORMAL (false, ContainerType.WORKSPACE, false, 1, 0),
+ NORMAL_HIDDEN (false, ContainerType.ALLAPPS, false, 1, ALL_APPS_TRANSITION_MS),
+ SPRING_LOADED (true, ContainerType.WORKSPACE, true, 1, SPRING_LOADED_TRANSITION_MS),
+ OVERVIEW (true, ContainerType.OVERVIEW, true, 0, OVERVIEW_TRANSITION_MS);
- public final boolean shouldUpdateWidget;
public final boolean hasMultipleVisiblePages;
public final int containerType;
- State(boolean shouldUpdateWidget, boolean hasMultipleVisiblePages, int containerType) {
- this.shouldUpdateWidget = shouldUpdateWidget;
+ // Properties related to state transition animation.
+ public final boolean hasScrim;
+ public final float hotseatAlpha;
+ public final int transitionDuration;
+
+ State(boolean hasMultipleVisiblePages, int containerType,
+ boolean hasScrim, float hotseatAlpha, int transitionDuration) {
this.hasMultipleVisiblePages = hasMultipleVisiblePages;
this.containerType = containerType;
+ this.hasScrim = hasScrim;
+ this.hotseatAlpha = hotseatAlpha;
+ this.transitionDuration = transitionDuration;
}
}
@@ -1296,9 +1310,7 @@ public class Workspace extends PagedView
}
});
- AccessibilityManager am = (AccessibilityManager)
- mLauncher.getSystemService(Context.ACCESSIBILITY_SERVICE);
- final boolean accessibilityEnabled = am.isEnabled();
+ final boolean accessibilityEnabled = isAccessibilityEnabled();
animator.addUpdateListener(
new AlphaUpdateListener(mLauncher.getHotseat(), accessibilityEnabled));
animator.addUpdateListener(
@@ -1307,6 +1319,12 @@ public class Workspace extends PagedView
}
}
+ protected boolean isAccessibilityEnabled() {
+ AccessibilityManager am = (AccessibilityManager)
+ mLauncher.getSystemService(Context.ACCESSIBILITY_SERVICE);
+ return am.isEnabled();
+ }
+
@Override
protected void notifyPageSwitchListener(int prevPage) {
super.notifyPageSwitchListener(prevPage);
@@ -1562,7 +1580,7 @@ public class Workspace extends PagedView
}
public void snapToPageFromOverView(int whichPage) {
- mStateTransitionAnimation.snapToPageFromOverView(whichPage);
+ snapToPage(whichPage, OVERVIEW_TRANSITION_MS, new ZoomInInterpolator());
}
int getOverviewModeTranslationY() {
@@ -1606,45 +1624,42 @@ public class Workspace extends PagedView
return mOverviewModeShrinkFactor;
}
+
/**
- * Sets the current workspace {@link State}, returning an animation transitioning the workspace
- * to that new state.
+ * Sets the current workspace {@link State} and updates the UI without any animations
*/
- public Animator setStateWithAnimation(State toState, boolean animated,
- AnimationLayerSet layerViews) {
- final State fromState = mState;
-
+ public void setState(State toState) {
// Update the current state
mState = toState;
-
- // Create the animation to the new state
- AnimatorSet workspaceAnim = mStateTransitionAnimation.getAnimationToState(fromState,
- toState, animated, layerViews);
-
- boolean shouldNotifyWidgetChange = !fromState.shouldUpdateWidget
- && toState.shouldUpdateWidget;
+ mStateTransitionAnimation.setState(mState);
updateAccessibilityFlags();
+ onPrepareStateTransition(mState.hasMultipleVisiblePages);
+ onStartStateTransition();
+ onEndStateTransition();
+ }
- if (shouldNotifyWidgetChange) {
- mLauncher.notifyWidgetProvidersChanged();
- }
+ /**
+ * Sets the current workspace {@link State}, while animating the UI
+ */
+ public void setStateWithAnimation(State toState, AnimationLayerSet layerViews, AnimatorSet anim,
+ AnimationConfig config) {
+ final State fromState = mState;
+ // Update the current state
+ mState = toState;
+ mStateTransitionAnimation.setStateWithAnimation(
+ fromState, toState, anim, layerViews, config);
+
+ updateAccessibilityFlags();
onPrepareStateTransition(mState.hasMultipleVisiblePages);
StateTransitionListener listener = new StateTransitionListener();
- if (animated) {
- ValueAnimator stepAnimator = ValueAnimator.ofFloat(0, 1);
- stepAnimator.addUpdateListener(listener);
-
- workspaceAnim.play(stepAnimator);
- workspaceAnim.addListener(listener);
- } else {
- listener.onAnimationStart(null);
- listener.onAnimationEnd(null);
- }
+ ValueAnimator stepAnimator = ValueAnimator.ofFloat(0, 1);
+ stepAnimator.addUpdateListener(listener);
- return workspaceAnim;
+ anim.play(stepAnimator);
+ anim.addListener(listener);
}
public State getState() {
@@ -1701,11 +1716,31 @@ public class Workspace extends PagedView
updateChildrenLayersEnabled();
}
+ private void onStartStateTransition() {
+ if (mState == State.SPRING_LOADED) {
+ // Show the page indicator at the same time as the rest of the transition.
+ showPageIndicatorAtCurrentScroll();
+ }
+ getPageIndicator().setShouldAutoHide(mState != State.SPRING_LOADED);
+ }
+
public void onEndStateTransition() {
mIsSwitchingState = false;
updateChildrenLayersEnabled();
mForceDrawAdjacentPages = false;
mTransitionProgress = 1;
+
+ if (mState == State.OVERVIEW) {
+ enableFreeScroll();
+ } else {
+ disableFreeScroll();
+ }
+
+ ViewGroup overviewPanel = mLauncher.getOverviewPanel();
+ if (isAccessibilityEnabled() && overviewPanel.getVisibility() == View.VISIBLE) {
+ overviewPanel.getChildAt(0).performAccessibilityAction(
+ AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
+ }
}
public void startDrag(CellLayout.CellInfo cellInfo, DragOptions options) {
@@ -2076,8 +2111,7 @@ public class Workspace extends PagedView
dropTargetLayout, mTargetCell, distance, false, d.dragView) ||
addToExistingFolderIfNecessary(cell, dropTargetLayout, mTargetCell,
distance, d, false)) {
- mLauncher.exitSpringLoadedDragMode(true,
- Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT);
+ mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
return;
}
@@ -2191,9 +2225,8 @@ public class Workspace extends PagedView
// Animate the item to its original position, while simultaneously exiting
// spring-loaded mode so the page meets the icon where it was picked up.
mLauncher.getDragController().animateDragViewToOriginalPosition(
- onCompleteRunnable, cell,
- mStateTransitionAnimation.mSpringLoadedTransitionTime);
- mLauncher.exitSpringLoadedDragMode(false, 0);
+ onCompleteRunnable, cell, SPRING_LOADED_TRANSITION_MS);
+ mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_NEXT_FRAME);
mLauncher.getDropTargetBar().onDragEnd();
parent.onDropChild(cell);
return;
@@ -2216,8 +2249,8 @@ public class Workspace extends PagedView
}
parent.onDropChild(cell);
- mLauncher.exitSpringLoadedDragMode(true,
- Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT, onCompleteRunnable);
+ mLauncher.exitSpringLoadedDragMode(
+ SPRING_LOADED_EXIT_SHORT_TIMEOUT, onCompleteRunnable);
}
if (d.stateAnnouncer != null && !droppedOnOriginalCell) {
@@ -2824,8 +2857,7 @@ public class Workspace extends PagedView
animationStyle, finalView, true);
} else {
// This is for other drag/drop cases, like dragging from All Apps
- mLauncher.exitSpringLoadedDragMode(true,
- Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT);
+ mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
View view;
@@ -2887,10 +2919,9 @@ public class Workspace extends PagedView
// We wrap the animation call in the temporary set and reset of the current
// cellLayout to its final transform -- this means we animate the drag view to
// the correct final location.
- setFinalTransitionTransform(cellLayout);
- mLauncher.getDragLayer().animateViewIntoPosition(d.dragView, view,
- this);
- resetTransitionTransform(cellLayout);
+ setFinalTransitionTransform();
+ mLauncher.getDragLayer().animateViewIntoPosition(d.dragView, view, this);
+ resetTransitionTransform();
}
}
}
@@ -2926,10 +2957,10 @@ public class Workspace extends PagedView
loc[0] = r.left;
loc[1] = r.top;
- setFinalTransitionTransform(layout);
+ setFinalTransitionTransform();
float cellLayoutScale =
mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(layout, loc, true);
- resetTransitionTransform(layout);
+ resetTransitionTransform();
if (scale) {
float dragViewScaleX = (1.0f * r.width()) / dragView.getMeasuredWidth();
@@ -3013,14 +3044,14 @@ public class Workspace extends PagedView
}
}
- public void setFinalTransitionTransform(CellLayout layout) {
+ public void setFinalTransitionTransform() {
if (isSwitchingState()) {
mCurrentScale = getScaleX();
setScaleX(mStateTransitionAnimation.getFinalScale());
setScaleY(mStateTransitionAnimation.getFinalScale());
}
}
- public void resetTransitionTransform(CellLayout layout) {
+ public void resetTransitionTransform() {
if (isSwitchingState()) {
setScaleX(mCurrentScale);
setScaleY(mCurrentScale);
@@ -3641,11 +3672,8 @@ public class Workspace extends PagedView
@Override
public void onAnimationStart(Animator animation) {
- if (mState == State.SPRING_LOADED) {
- // Show the page indicator at the same time as the rest of the transition.
- showPageIndicatorAtCurrentScroll();
- }
mTransitionProgress = 0;
+ onStartStateTransition();
}
@Override