diff options
Diffstat (limited to 'src/com/android/launcher3/Workspace.java')
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 38275b696..1d5b5ac90 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -17,6 +17,7 @@ package com.android.launcher3; import android.animation.Animator; +import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.LayoutTransition; @@ -441,6 +442,13 @@ public class Workspace extends SmoothPagedView setLayoutTransition(mLayoutTransition); } + void enableLayoutTransitions() { + setLayoutTransition(mLayoutTransition); + } + void disableLayoutTransitions() { + setLayoutTransition(null); + } + @Override protected int getScrollMode() { return SmoothPagedView.X_LARGE_MODE; @@ -488,10 +496,24 @@ public class Workspace extends SmoothPagedView } public void removeAllWorkspaceScreens() { + // Disable all layout transitions before removing all pages to ensure that we don't get the + // transition animations competing with us changing the scroll when we add pages or the + // custom content screen + disableLayoutTransitions(); + + // Since we increment the current page when we call addCustomContentPage via bindScreens + // (and other places), we need to adjust the current page back when we clear the pages + if (hasCustomContent()) { + removeCustomContentPage(); + } + // Remove the pages and clear the screen models removeAllViews(); mScreenOrder.clear(); mWorkspaceScreens.clear(); + + // Re-enable the layout transitions + enableLayoutTransitions(); } public long insertNewWorkspaceScreenBeforeEmptyScreen(long screenId) { @@ -1409,11 +1431,11 @@ public class Workspace extends SmoothPagedView if (hasCustomContent()) { int index = mScreenOrder.indexOf(CUSTOM_CONTENT_SCREEN_ID); - int scrollDelta = getScrollForPage(index + 1) - getScrollX() + - getLayoutTransitionOffsetForPage(index + 1); - translationX = scrollDelta; - progress = (1.0f * scrollDelta) / - (getScrollForPage(index + 1) - getScrollForPage(index)); + int scrollDelta = getScrollX() - getScrollForPage(index) - + getLayoutTransitionOffsetForPage(index); + float scrollRange = getScrollForPage(index + 1) - getScrollForPage(index); + translationX = scrollRange - scrollDelta; + progress = (scrollRange - scrollDelta) / scrollRange; if (isLayoutRtl()) { translationX = Math.min(0, translationX); @@ -1821,7 +1843,7 @@ public class Workspace extends SmoothPagedView super.onStartReordering(); showOutlines(); // Reordering handles its own animations, disable the automatic ones. - setLayoutTransition(null); + disableLayoutTransitions(); } protected void onEndReordering() { @@ -1838,7 +1860,7 @@ public class Workspace extends SmoothPagedView mLauncher.getModel().updateWorkspaceScreenOrder(mLauncher, mScreenOrder); // Re-enable auto layout transitions for page deletion. - setLayoutTransition(mLayoutTransition); + enableLayoutTransitions(); } public boolean isInOverviewMode() { @@ -2067,9 +2089,9 @@ public class Workspace extends SmoothPagedView ObjectAnimator overviewPanelAlpha = ObjectAnimator.ofFloat(overviewPanel, "alpha", finalOverviewPanelAlpha); - overviewPanelAlpha.addUpdateListener(new AlphaUpdateListener(overviewPanel)); - hotseatAlpha.addUpdateListener(new AlphaUpdateListener(hotseat)); - searchBarAlpha.addUpdateListener(new AlphaUpdateListener(searchBar)); + overviewPanelAlpha.addListener(new AlphaUpdateListener(overviewPanel)); + hotseatAlpha.addListener(new AlphaUpdateListener(hotseat)); + searchBarAlpha.addListener(new AlphaUpdateListener(searchBar)); if (workspaceToOverview) { hotseatAlpha.setInterpolator(new DecelerateInterpolator(2)); @@ -2078,7 +2100,7 @@ public class Workspace extends SmoothPagedView } if (getPageIndicator() != null) { - pageIndicatorAlpha.addUpdateListener(new AlphaUpdateListener(getPageIndicator())); + pageIndicatorAlpha.addListener(new AlphaUpdateListener(getPageIndicator())); } anim.play(overviewPanelAlpha); @@ -2120,7 +2142,7 @@ public class Workspace extends SmoothPagedView return anim; } - static class AlphaUpdateListener implements AnimatorUpdateListener { + static class AlphaUpdateListener implements AnimatorUpdateListener, AnimatorListener { View view; public AlphaUpdateListener(View v) { view = v; @@ -2142,6 +2164,25 @@ public class Workspace extends SmoothPagedView view.setVisibility(VISIBLE); } } + + @Override + public void onAnimationCancel(Animator arg0) { + } + + @Override + public void onAnimationEnd(Animator arg0) { + updateVisibility(view); + } + + @Override + public void onAnimationRepeat(Animator arg0) { + } + + @Override + public void onAnimationStart(Animator arg0) { + // We want the views to be visible for animation, so fade-in/out is visible + view.setVisibility(VISIBLE); + } } @Override |