diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2018-05-11 15:43:10 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-05-11 15:43:10 +0000 |
commit | 08cf36ea546a65c15ca7651042f3dc48805fdab0 (patch) | |
tree | 8994a78d25214cd0dcbc90d29e84b1153cb34bbc | |
parent | 80a269b8ecc39b1ff6f3109486fe4642a6925a02 (diff) | |
parent | 973622e8ecfd8457e7520eb9897f4eb4fccef794 (diff) | |
download | android_packages_apps_Trebuchet-08cf36ea546a65c15ca7651042f3dc48805fdab0.tar.gz android_packages_apps_Trebuchet-08cf36ea546a65c15ca7651042f3dc48805fdab0.tar.bz2 android_packages_apps_Trebuchet-08cf36ea546a65c15ca7651042f3dc48805fdab0.zip |
Merge "Tweak and fix bugs with new app close transition." into ub-launcher3-edmonton
-rw-r--r-- | quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java | 95 | ||||
-rw-r--r-- | src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java | 16 |
2 files changed, 61 insertions, 50 deletions
diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index fc02f7242..1e81ef907 100644 --- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -127,16 +127,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag } }; - private final Runnable mDragLayerResetRunnable = new Runnable() { - @Override - public void run() { - mDragLayer.setLayerType(View.LAYER_TYPE_NONE, null); - mDragLayer.setAlpha(1); - mDragLayer.setTranslationY(0); - mLauncher.getWorkspace().getPageIndicator().skipAnimationsToEnd(); - } - }; - private final AnimatorListenerAdapter mForceInvisibleListener = new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { @@ -297,14 +287,14 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag AnimatorSet launcherAnimator = new AnimatorSet(); Runnable endListener; - if (mLauncher.isInState(ALL_APPS)) { - float[] alphas = isAppOpening - ? new float[] {1, 0} - : new float[] {0, 1}; - float[] trans = isAppOpening - ? new float[] {0, mContentTransY} - : new float[] {-mContentTransY, 0}; + float[] alphas = isAppOpening + ? new float[] {1, 0} + : new float[] {0, 1}; + float[] trans = isAppOpening + ? new float[] {0, mContentTransY} + : new float[] {-mContentTransY, 0}; + if (mLauncher.isInState(ALL_APPS)) { // All Apps in portrait mode is full screen, so we only animate AllAppsContainerView. final View appsView = mLauncher.getAppsView(); final float startAlpha = appsView.getAlpha(); @@ -335,27 +325,28 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag appsView.setLayerType(View.LAYER_TYPE_NONE, null); }; } else { - float[] alphas = new float[] {1, 0}; - float[] trans = new float[] {0, mContentTransY}; + View contentView = mLauncher.getDragLayer(); + contentView.setAlpha(alphas[0]); + contentView.setTranslationY(trans[0]); - mDragLayer.setAlpha(alphas[0]); - mDragLayer.setTranslationY(trans[0]); - - ObjectAnimator dragLayerAlpha = ObjectAnimator.ofFloat(mDragLayer, View.ALPHA, alphas); - dragLayerAlpha.setDuration(217); - dragLayerAlpha.setInterpolator(LINEAR); - ObjectAnimator dragLayerTransY = ObjectAnimator.ofFloat(mDragLayer, View.TRANSLATION_Y, - trans); - dragLayerTransY.setInterpolator(AGGRESSIVE_EASE); - dragLayerTransY.setDuration(350); + ObjectAnimator alpha = ObjectAnimator.ofFloat(contentView, View.ALPHA, alphas); + alpha.setDuration(217); + alpha.setInterpolator(LINEAR); + launcherAnimator.play(alpha); - launcherAnimator.play(dragLayerAlpha); - launcherAnimator.play(dragLayerTransY); - mDragLayer.setLayerType(View.LAYER_TYPE_HARDWARE, null); + ObjectAnimator transY = ObjectAnimator.ofFloat(contentView, View.TRANSLATION_Y, trans); + transY.setInterpolator(AGGRESSIVE_EASE); + transY.setDuration(350); + launcherAnimator.play(transY); + mDragLayer.getScrim().hideSysUiScrim(true); // Pause page indicator animations as they lead to layer trashing. mLauncher.getWorkspace().getPageIndicator().pauseAnimations(); - endListener = mDragLayerResetRunnable; + contentView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + + endListener = () -> { + resetContentView(contentView); + }; } return new Pair<>(launcherAnimator, endListener); } @@ -656,11 +647,10 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag ValueAnimator closingAnimator = ValueAnimator.ofFloat(0, 1); int duration = CLOSING_TRANSITION_DURATION_MS; closingAnimator.setDuration(duration); - Rect crop = new Rect(); closingAnimator.addUpdateListener(new MultiValueUpdateListener() { FloatProp mDy = new FloatProp(0, mClosingWindowTransY, 0, duration, DEACCEL_1_7); - FloatProp mScale = new FloatProp(1f, 1.075f, 0, duration, DEACCEL_1_7); - FloatProp mAlpha = new FloatProp(1f, 0f, 0, duration, DEACCEL_1_7); + FloatProp mScale = new FloatProp(1f, 1f, 0, duration, DEACCEL_1_7); + FloatProp mAlpha = new FloatProp(1f, 0f, 25, 125, LINEAR); boolean isFirstFrame = true; @@ -672,8 +662,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag isFirstFrame = false; } for (RemoteAnimationTargetCompat app : targets) { - crop.set(app.clipRect); - crop.top = mDeviceProfile.getInsets().top; if (app.mode == RemoteAnimationTargetCompat.MODE_CLOSING) { t.setAlpha(app.leash, mAlpha.value); matrix.setScale(mScale.value, mScale.value, @@ -681,7 +669,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag app.sourceContainerBounds.centerY()); matrix.postTranslate(0, mDy.value); matrix.postTranslate(app.position.x, app.position.y); - t.setWindowCrop(app.leash, crop); t.setMatrix(app.leash, matrix); } } @@ -699,8 +686,7 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag * Creates an animator that modifies Launcher as a result from {@link #getWallpaperOpenRunner}. */ private void createLauncherResumeAnimation(AnimatorSet anim) { - if (mLauncher.isInState(LauncherState.ALL_APPS) - || mLauncher.getDeviceProfile().isVerticalBarLayout()) { + if (mLauncher.isInState(LauncherState.ALL_APPS)) { Pair<AnimatorSet, Runnable> contentAnimator = getLauncherContentAnimator(false /* isAppOpening */); contentAnimator.first.setStartDelay(LAUNCHER_RESUME_START_DELAY); @@ -714,29 +700,44 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag } else { AnimatorSet workspaceAnimator = new AnimatorSet(); - mDragLayer.setTranslationY(-mWorkspaceTransY); - workspaceAnimator.play(ObjectAnimator.ofFloat(mDragLayer, View.TRANSLATION_Y, + View contentView = mLauncher.getRootView(); + + contentView.setTranslationY(-mWorkspaceTransY);; + workspaceAnimator.play(ObjectAnimator.ofFloat(contentView, View.TRANSLATION_Y, -mWorkspaceTransY, 0)); - mDragLayer.setAlpha(0); - workspaceAnimator.play(ObjectAnimator.ofFloat(mDragLayer, View.ALPHA, 0, 1f)); + contentView.setAlpha(0); + workspaceAnimator.play(ObjectAnimator.ofFloat(contentView, View.ALPHA, 0, 1f)); workspaceAnimator.setStartDelay(LAUNCHER_RESUME_START_DELAY); workspaceAnimator.setDuration(333); workspaceAnimator.setInterpolator(Interpolators.DEACCEL_1_7); + mDragLayer.getScrim().hideSysUiScrim(true); + // Pause page indicator animations as they lead to layer trashing. mLauncher.getWorkspace().getPageIndicator().pauseAnimations(); - mDragLayer.setLayerType(View.LAYER_TYPE_HARDWARE, null); + contentView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + workspaceAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - mDragLayerResetRunnable.run(); + resetContentView(contentView); } }); anim.play(workspaceAnimator); } } + + private void resetContentView(View v) { + v.setLayerType(View.LAYER_TYPE_NONE, null); + + mLauncher.getWorkspace().getPageIndicator().skipAnimationsToEnd(); + v.setAlpha(1f); + v.setTranslationY(0f); + mLauncher.getDragLayer().getScrim().hideSysUiScrim(false); + } + private boolean hasControlRemoteAppTransitionPermission() { return mLauncher.checkSelfPermission(CONTROL_REMOTE_APP_TRANSITION_PERMISSION) == PackageManager.PERMISSION_GRANTED; diff --git a/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java b/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java index 9d847d6da..bc4a06d5e 100644 --- a/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java +++ b/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java @@ -36,7 +36,6 @@ import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.support.v4.graphics.ColorUtils; import android.util.DisplayMetrics; -import android.util.Log; import android.util.Property; import android.view.View; @@ -137,6 +136,7 @@ public class WorkspaceAndHotseatScrim implements private int mScrimAlpha = 0; private float mSysUiProgress = 1; + private boolean mHideSysUiScrim; private boolean mAnimateScrimOnNextDraw = false; private float mSysUiAnimMultiplier = 1; @@ -184,7 +184,7 @@ public class WorkspaceAndHotseatScrim implements canvas.restore(); } - if (mHasSysUiScrim) { + if (!mHideSysUiScrim && mHasSysUiScrim) { if (mSysUiProgress <= 0) { mAnimateScrimOnNextDraw = false; return; @@ -264,6 +264,14 @@ public class WorkspaceAndHotseatScrim implements } } + public void hideSysUiScrim(boolean hideSysUiScrim) { + mHideSysUiScrim = hideSysUiScrim; + if (!hideSysUiScrim) { + mAnimateScrimOnNextDraw = true; + } + invalidate(); + } + private void setSysUiProgress(float progress) { if (progress != mSysUiProgress) { mSysUiProgress = progress; @@ -274,7 +282,9 @@ public class WorkspaceAndHotseatScrim implements private void reapplySysUiAlpha() { if (mHasSysUiScrim) { reapplySysUiAlphaNoInvalidate(); - invalidate(); + if (!mHideSysUiScrim) { + invalidate(); + } } } |