diff options
Diffstat (limited to 'src/com/android/launcher3/Launcher.java')
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 337 |
1 files changed, 125 insertions, 212 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0ab665d74..75ba8fd99 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -92,7 +92,9 @@ import android.view.Window; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; +import android.view.animation.LinearInterpolator; import android.view.inputmethod.InputMethodManager; import android.widget.Advanceable; import android.widget.FrameLayout; @@ -3065,16 +3067,6 @@ public class Launcher extends Activity return (mState == State.APPS_CUSTOMIZE) || (mOnResumeState == State.APPS_CUSTOMIZE); } - /** - * Helper method for the cameraZoomIn/cameraZoomOut animations - * @param view The view being animated - * @param scaleFactor The scale factor used for the zoom - */ - private void setPivotsForZoom(View view, float scaleFactor) { - view.setPivotX(view.getWidth() / 2.0f); - view.setPivotY(view.getHeight() / 2.0f); - } - private void setWorkspaceBackground(boolean workspace) { mLauncherView.setBackground(workspace ? mWorkspaceBackgroundDrawable : null); @@ -3185,6 +3177,8 @@ public class Launcher extends Activity final int duration = res.getInteger(R.integer.config_appsCustomizeZoomInTime); final int fadeDuration = res.getInteger(R.integer.config_appsCustomizeFadeInTime); final int revealDuration = res.getInteger(R.integer.config_appsCustomizeRevealTime); + final int itemsAlphaStagger = + res.getInteger(R.integer.config_appsCustomizeItemsAlphaStagger); final float scale = (float) res.getInteger(R.integer.config_appsCustomizeZoomScaleFactor); final View fromView = mWorkspace; @@ -3192,8 +3186,6 @@ public class Launcher extends Activity final int startDelay = res.getInteger(R.integer.config_workspaceAppsCustomizeAnimationStagger); - setPivotsForZoom(toView, scale); - Workspace.State workspaceState = contentType == AppsCustomizePagedView.ContentType.Widgets ? Workspace.State.OVERVIEW_HIDDEN : Workspace.State.NORMAL_HIDDEN; Animator workspaceAnim = @@ -3205,146 +3197,92 @@ public class Launcher extends Activity } if (animated) { - if (!material) { - toView.setScaleX(scale); - toView.setScaleY(scale); - final LauncherViewPropertyAnimator scaleAnim = - new LauncherViewPropertyAnimator(toView); - scaleAnim. - scaleX(1f).scaleY(1f). - setDuration(duration). - setInterpolator(new Workspace.ZoomOutInterpolator()); + mStateAnimation = LauncherAnimUtils.createAnimatorSet(); - toView.setVisibility(View.VISIBLE); - toView.setAlpha(0f); - final ObjectAnimator alphaAnim = LauncherAnimUtils - .ofFloat(toView, "alpha", 0f, 1f) - .setDuration(fadeDuration); - alphaAnim.setInterpolator(new DecelerateInterpolator(1.5f)); - alphaAnim.addUpdateListener(new AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - if (animation == null) { - throw new RuntimeException("animation is null"); - } - float t = (Float) animation.getAnimatedValue(); - dispatchOnLauncherTransitionStep(fromView, t); - dispatchOnLauncherTransitionStep(toView, t); - } - }); + final AppsCustomizePagedView content = (AppsCustomizePagedView) + toView.findViewById(R.id.apps_customize_pane_content); - // toView should appear right at the end of the workspace shrink - // animation - mStateAnimation = LauncherAnimUtils.createAnimatorSet(); - mStateAnimation.play(scaleAnim).after(startDelay); - mStateAnimation.play(alphaAnim).after(startDelay); + final View page = content.getPageAt(content.getCurrentPage()); + final View revealView = toView.findViewById(R.id.fake_page); - mStateAnimation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - // Prepare the position - toView.setTranslationX(0.0f); - toView.setTranslationY(0.0f); - toView.setVisibility(View.VISIBLE); - toView.bringToFront(); - } - @Override - public void onAnimationEnd(Animator animation) { - dispatchOnLauncherTransitionEnd(fromView, animated, false); - dispatchOnLauncherTransitionEnd(toView, animated, false); + // Hide the real page background, and swap in the fake one + revealView.setVisibility(View.VISIBLE); + content.setPageBackgroundsVisible(false); - // Hide the search bar - if (mSearchDropTargetBar != null) { - mSearchDropTargetBar.hideSearchBar(false); - } - } - }); - } else { - int width = toView.getMeasuredWidth(); - int height = toView.getMeasuredHeight(); - float revealRadius = (float) Math.sqrt((width * width) / 4 + height * height); - - mStateAnimation = LauncherAnimUtils.createAnimatorSet(); - - AppsCustomizePagedView content = (AppsCustomizePagedView) - toView.findViewById(R.id.apps_customize_pane_content); + int width = revealView.getMeasuredWidth(); + int height = revealView.getMeasuredHeight(); - View page = content.getPageAt(content.getCurrentPage()); - View revealView = content; + float revealRadius = (float) Math.sqrt((width * width) / 4 + (height * height) / 4); + float yDrift = height / 2f; - float yDrift = height / 2f - 400; + revealView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + PropertyValuesHolder panelAlpha = PropertyValuesHolder.ofFloat("alpha", 0.4f, 1f); + PropertyValuesHolder panelDrift = + PropertyValuesHolder.ofFloat("translationY", yDrift, 0f); - LauncherViewPropertyAnimator panelAlphaAndDrift = - new LauncherViewPropertyAnimator(revealView); - revealView.setTranslationY(yDrift); - revealView.setAlpha(0.3f); - panelAlphaAndDrift.alpha(1) - .translationY(0) - .setDuration(revealDuration) - .setInterpolator(new LogDecelerateInterpolator(100, 0)); + ObjectAnimator panelAlphaAndDrift = + ObjectAnimator.ofPropertyValuesHolder(revealView, panelAlpha, panelDrift); + panelAlphaAndDrift.setDuration(revealDuration); + panelAlphaAndDrift.setInterpolator(new LogDecelerateInterpolator(100, 0)); - mStateAnimation.play(panelAlphaAndDrift); + mStateAnimation.play(panelAlphaAndDrift); - if (page instanceof CellLayout) { - CellLayout cellLayout = (CellLayout) page; - cellLayout.enableHardwareLayer(true); + page.setVisibility(View.VISIBLE); + page.setLayerType(View.LAYER_TYPE_HARDWARE, null); - View iconsView = cellLayout.getShortcutsAndWidgets(); - iconsView.setAlpha(0f); + ObjectAnimator pageDrift = ObjectAnimator.ofFloat(page, "translationY", yDrift, 0); + pageDrift.setDuration(revealDuration); + pageDrift.setInterpolator(new LogDecelerateInterpolator(100, 0)); + mStateAnimation.play(pageDrift); - LauncherViewPropertyAnimator iconsAlpha = - new LauncherViewPropertyAnimator(iconsView); - iconsAlpha.alpha(1f) - .setDuration(revealDuration - 100) - .setInterpolator(new LogDecelerateInterpolator(100, 0)); - mStateAnimation.play(iconsAlpha); - } - - View pageIndicators = toView.findViewById(R.id.apps_customize_page_indicator); - pageIndicators.setAlpha(0f); - final LauncherViewPropertyAnimator indicatorsAlpha = - new LauncherViewPropertyAnimator(pageIndicators); - indicatorsAlpha.alpha(1f); - indicatorsAlpha.setDuration(revealDuration); - mStateAnimation.play(indicatorsAlpha); + // TODO (adamcohen): remove this 0.01f hack once fw is fixed + // it's there to work around a framework bug (16918357) + page.setAlpha(0.01f); + ObjectAnimator itemsAlpha = ObjectAnimator.ofFloat(page, "alpha", 0.01f, 1f); + itemsAlpha.setDuration(revealDuration); + itemsAlpha.setInterpolator(new AccelerateInterpolator(1.5f)); + itemsAlpha.setStartDelay(itemsAlphaStagger); + mStateAnimation.play(itemsAlpha); - width = revealView.getMeasuredWidth(); + View pageIndicators = fromView.findViewById(R.id.apps_customize_page_indicator); + ObjectAnimator indicatorsAlpha = + ObjectAnimator.ofFloat(pageIndicators, "alpha", 1f); + indicatorsAlpha.setDuration(revealDuration); + mStateAnimation.play(indicatorsAlpha); - Animator reveal = + if (material) { + ValueAnimator reveal = (ValueAnimator) ViewAnimationUtils.createCircularReveal(revealView, width / 2, - height / 2 + 100, 0f, revealRadius); + height / 2, 0f, revealRadius); reveal.setDuration(revealDuration); reveal.setInterpolator(new LogDecelerateInterpolator(100, 0)); - - toView.setTranslationX(0); - toView.setTranslationY(0); - toView.setAlpha(1f); - // toView should appear right at the end of the workspace shrink - // animation mStateAnimation.play(reveal); + } - reveal.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - // Prepare the position - toView.bringToFront(); - toView.setVisibility(View.VISIBLE); - } - }); + mStateAnimation.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + dispatchOnLauncherTransitionEnd(fromView, animated, false); + dispatchOnLauncherTransitionEnd(toView, animated, false); - mStateAnimation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - dispatchOnLauncherTransitionEnd(fromView, animated, false); - dispatchOnLauncherTransitionEnd(toView, animated, false); + revealView.setVisibility(View.INVISIBLE); + revealView.setLayerType(View.LAYER_TYPE_NONE, null); + page.setLayerType(View.LAYER_TYPE_NONE, null); + content.setPageBackgroundsVisible(true); - // Hide the search bar - if (mSearchDropTargetBar != null) { - mSearchDropTargetBar.hideSearchBar(false); - } + // Hide the search bar + if (mSearchDropTargetBar != null) { + mSearchDropTargetBar.hideSearchBar(false); } - }); - } + } + + @Override + public void onAnimationStart(Animator animation) { + // Prepare the position + toView.bringToFront(); + toView.setVisibility(View.VISIBLE); + } + }); boolean delayAnim = false; if (workspaceAnim != null) { @@ -3368,13 +3306,14 @@ public class Launcher extends Activity // we waited for a layout/draw pass if (mStateAnimation != stateAnimation) return; - setPivotsForZoom(toView, scale); dispatchOnLauncherTransitionStart(fromView, animated, false); dispatchOnLauncherTransitionStart(toView, animated, false); LauncherAnimUtils.startAnimationAfterNextDraw(mStateAnimation, toView); } }; if (delayAnim) { + toView.bringToFront(); + toView.setVisibility(View.VISIBLE); final ViewTreeObserver observer = toView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { @@ -3429,6 +3368,8 @@ public class Launcher extends Activity final int duration = res.getInteger(R.integer.config_appsCustomizeZoomOutTime); final int fadeOutDuration = res.getInteger(R.integer.config_appsCustomizeFadeOutTime); final int revealDuration = res.getInteger(R.integer.config_appsCustomizeRevealTime); + final int itemsAlphaStagger = + res.getInteger(R.integer.config_appsCustomizeItemsAlphaStagger); final float scaleFactor = (float) res.getInteger(R.integer.config_appsCustomizeZoomScaleFactor); @@ -3445,116 +3386,84 @@ public class Launcher extends Activity toState, animated); } - setPivotsForZoom(fromView, scaleFactor); showHotseat(animated); if (animated) { - if (!material) { - final LauncherViewPropertyAnimator scaleAnim = - new LauncherViewPropertyAnimator(fromView); - scaleAnim. - scaleX(scaleFactor).scaleY(scaleFactor). - setDuration(duration). - setInterpolator(new Workspace.ZoomInInterpolator()); - - final ObjectAnimator alphaAnim = LauncherAnimUtils - .ofFloat(fromView, "alpha", 1f, 0f) - .setDuration(fadeOutDuration); - alphaAnim.setInterpolator(new AccelerateDecelerateInterpolator()); - alphaAnim.addUpdateListener(new AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - float t = 1f - (Float) animation.getAnimatedValue(); - dispatchOnLauncherTransitionStep(fromView, t); - dispatchOnLauncherTransitionStep(toView, t); - } - }); - - mStateAnimation = LauncherAnimUtils.createAnimatorSet(); + mStateAnimation = LauncherAnimUtils.createAnimatorSet(); - dispatchOnLauncherTransitionPrepare(fromView, animated, true); - dispatchOnLauncherTransitionPrepare(toView, animated, true); - mAppsCustomizeContent.stopScrolling(); - - mStateAnimation.playTogether(scaleAnim, alphaAnim); - } else { - mStateAnimation = LauncherAnimUtils.createAnimatorSet(); + final AppsCustomizePagedView content = (AppsCustomizePagedView) + fromView.findViewById(R.id.apps_customize_pane_content); - int width = fromView.getMeasuredWidth(); - int height = fromView.getMeasuredHeight(); - float revealRadius = (float) Math.sqrt((width * width) / 4 + height * height); + final View page = content.getPageAt(content.getNextPage()); + final View revealView = fromView.findViewById(R.id.fake_page); - AppsCustomizePagedView content = (AppsCustomizePagedView) - fromView.findViewById(R.id.apps_customize_pane_content); + int width = revealView.getMeasuredWidth(); + int height = revealView.getMeasuredHeight(); + float revealRadius = (float) Math.sqrt((width * width) / 4 + (height * height) / 4); - final View page = content.getPageAt(content.getNextPage()); - View revealView = page; + // Hide the real page background, and swap in the fake one + revealView.setVisibility(View.VISIBLE); + content.setPageBackgroundsVisible(false); - float yDrift = height / 2f - 400; + float yDrift = height / 2f; - LauncherViewPropertyAnimator panelAlphaAndDrift = - new LauncherViewPropertyAnimator(revealView); - revealView.setTranslationY(0); - revealView.setAlpha(1); - panelAlphaAndDrift.alpha(0) - .translationY(yDrift) - .setDuration(revealDuration) - .setInterpolator(new LogDecelerateInterpolator(100, 0)); + revealView.setLayerType(View.LAYER_TYPE_HARDWARE, null); - mStateAnimation.play(panelAlphaAndDrift); + PropertyValuesHolder panelAlpha = PropertyValuesHolder.ofFloat(View.ALPHA, 1f, 0f); + PropertyValuesHolder panelDrift = + PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, 0, yDrift); + ObjectAnimator panelAlphaAndDrift = + ObjectAnimator.ofPropertyValuesHolder(revealView, panelAlpha, panelDrift); + panelAlphaAndDrift.setDuration(revealDuration); - if (page instanceof CellLayout) { - final CellLayout cellLayout = (CellLayout) page; - cellLayout.enableHardwareLayer(true); + panelAlphaAndDrift.setInterpolator(new LogDecelerateInterpolator(100, 0)); + panelAlphaAndDrift.setStartDelay(itemsAlphaStagger); - final View iconsView = cellLayout.getShortcutsAndWidgets(); + mStateAnimation.play(panelAlphaAndDrift); - LauncherViewPropertyAnimator iconsAlpha = - new LauncherViewPropertyAnimator(iconsView); - iconsAlpha.alpha(0f) - .setDuration(revealDuration - 100) - .setInterpolator(new LogDecelerateInterpolator(100, 0)); + page.setLayerType(View.LAYER_TYPE_HARDWARE, null); - mStateAnimation.play(iconsAlpha); + ObjectAnimator pageDrift = ObjectAnimator.ofFloat(page, View.TRANSLATION_Y, 0, yDrift); + pageDrift.setDuration(revealDuration); + pageDrift.setInterpolator(new LogDecelerateInterpolator(100, 0)); + pageDrift.setStartDelay(itemsAlphaStagger); + mStateAnimation.play(pageDrift); - mStateAnimation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - cellLayout.setTranslationY(0); - cellLayout.setAlpha(1f); - iconsView.setAlpha(1f); - } - }); - } + page.setAlpha(1f); + ObjectAnimator itemsAlpha = ObjectAnimator.ofFloat(page, View.ALPHA, 1f, 0f); + itemsAlpha.setDuration(revealDuration); + itemsAlpha.setInterpolator(new LogDecelerateInterpolator(100, 0)); + mStateAnimation.play(itemsAlpha); - View pageIndicators = fromView.findViewById(R.id.apps_customize_page_indicator); - final LauncherViewPropertyAnimator indicatorsAlpha = - new LauncherViewPropertyAnimator(pageIndicators); - indicatorsAlpha.alpha(0f); - indicatorsAlpha.setDuration(revealDuration); - indicatorsAlpha.setInterpolator(new DecelerateInterpolator(1.5f)); - mStateAnimation.play(indicatorsAlpha); + View pageIndicators = fromView.findViewById(R.id.apps_customize_page_indicator); + ObjectAnimator indicatorsAlpha = + ObjectAnimator.ofFloat(pageIndicators, View.ALPHA, 0f); + indicatorsAlpha.setDuration(revealDuration); + indicatorsAlpha.setInterpolator(new DecelerateInterpolator(1.5f)); + mStateAnimation.play(indicatorsAlpha); - width = revealView.getMeasuredWidth(); + width = revealView.getMeasuredWidth(); + if (material) { Animator reveal = ViewAnimationUtils.createCircularReveal(revealView, width / 2, height / 2 + 100, revealRadius, 0f); reveal.setInterpolator(new LogDecelerateInterpolator(100, 0)); reveal.setDuration(revealDuration); + reveal.setStartDelay(itemsAlphaStagger); reveal.addListener(new AnimatorListenerAdapter() { - @Override public void onAnimationEnd(Animator animation) { - fromView.setVisibility(View.GONE); + revealView.setVisibility(View.INVISIBLE); } }); - dispatchOnLauncherTransitionPrepare(fromView, animated, true); - dispatchOnLauncherTransitionPrepare(toView, animated, true); - mAppsCustomizeContent.stopScrolling(); - mStateAnimation.play(reveal); } + + dispatchOnLauncherTransitionPrepare(fromView, animated, true); + dispatchOnLauncherTransitionPrepare(toView, animated, true); + mAppsCustomizeContent.stopScrolling(); + if (workspaceAnim != null) { mStateAnimation.play(workspaceAnim); } @@ -3568,6 +3477,10 @@ public class Launcher extends Activity if (onCompleteRunnable != null) { onCompleteRunnable.run(); } + + revealView.setLayerType(View.LAYER_TYPE_NONE, null); + page.setLayerType(View.LAYER_TYPE_NONE, null); + content.setPageBackgroundsVisible(true); mAppsCustomizeContent.updateCurrentPageScroll(); } }); |