diff options
4 files changed, 35 insertions, 14 deletions
diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index 0674c6119..114f96a6e 100644 --- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -18,6 +18,8 @@ package com.android.launcher3; import static com.android.launcher3.BaseActivity.INVISIBLE_ALL; import static com.android.launcher3.BaseActivity.INVISIBLE_BY_APP_TRANSITIONS; +import static com.android.launcher3.BaseActivity.INVISIBLE_BY_PENDING_FLAGS; +import static com.android.launcher3.BaseActivity.PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; @@ -31,8 +33,6 @@ import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS; import static com.android.quickstep.TaskUtils.findTaskViewToLaunch; import static com.android.quickstep.TaskUtils.getRecentsWindowAnimator; import static com.android.quickstep.TaskUtils.taskIsATargetWithMode; -import static com.android.systemui.shared.recents.utilities.Utilities.getNextFrameNumber; -import static com.android.systemui.shared.recents.utilities.Utilities.getSurface; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING; @@ -53,9 +53,7 @@ import android.os.Build; import android.os.CancellationSignal; import android.os.Handler; import android.os.Looper; -import android.util.Log; import android.util.Pair; -import android.view.Surface; import android.view.View; import android.view.ViewGroup; @@ -672,6 +670,10 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag return; } + if (mLauncher.hasSomeInvisibleFlag(PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION)) { + mLauncher.addForceInvisibleFlag(INVISIBLE_BY_PENDING_FLAGS); + } + AnimatorSet anim = null; RemoteAnimationProvider provider = mRemoteAnimationProvider; if (provider != null) { diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java index c94174b35..b7542ce0d 100644 --- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -16,6 +16,7 @@ package com.android.quickstep; import static com.android.launcher3.BaseActivity.INVISIBLE_BY_STATE_HANDLER; +import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS; import static com.android.launcher3.Utilities.SINGLE_FRAME_MS; import static com.android.launcher3.Utilities.postAsyncCallback; import static com.android.launcher3.anim.Interpolators.DEACCEL; @@ -356,9 +357,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> { // Override the visibility of the activity until the gesture actually starts and we swipe // up, or until we transition home and the home animation is composed if (alreadyOnHome) { - mActivity.clearForceInvisibleFlag(INVISIBLE_BY_STATE_HANDLER); + mActivity.clearForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS); } else { - mActivity.addForceInvisibleFlag(INVISIBLE_BY_STATE_HANDLER); + mActivity.addForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS); } mRecentsView = activity.getOverviewPanel(); @@ -632,7 +633,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> { if (curActivity != null) { // Once the gesture starts, we can no longer transition home through the button, so // reset the force override of the activity visibility - mActivity.clearForceInvisibleFlag(INVISIBLE_BY_STATE_HANDLER); + mActivity.clearForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS); } } @@ -769,6 +770,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> { private void resetStateForAnimationCancel() { boolean wasVisible = mWasLauncherAlreadyVisible || mGestureStarted; mActivityControlHelper.onTransitionCancelled(mActivity, wasVisible); + + // Leave the pending invisible flag, as it may be used by wallpaper open animation. + mActivity.clearForceInvisibleFlag(INVISIBLE_BY_STATE_HANDLER); } public void layoutListenerClosed() { diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index d550edcd3..fccebf3d9 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -16,7 +16,7 @@ package com.android.quickstep.views; -import static com.android.launcher3.BaseActivity.INVISIBLE_BY_STATE_HANDLER; +import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS; import static com.android.launcher3.anim.Interpolators.ACCEL; import static com.android.launcher3.anim.Interpolators.ACCEL_2; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; @@ -199,7 +199,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl public void onPinnedStackAnimationStarted() { // Needed for activities that auto-enter PiP, which will not trigger a remote // animation to be created - mActivity.clearForceInvisibleFlag(INVISIBLE_BY_STATE_HANDLER); + mActivity.clearForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS); } }; diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java index e117deb81..a4b6f5b05 100644 --- a/src/com/android/launcher3/BaseActivity.java +++ b/src/com/android/launcher3/BaseActivity.java @@ -44,13 +44,25 @@ public abstract class BaseActivity extends Activity implements UserEventDelegate public static final int INVISIBLE_BY_STATE_HANDLER = 1 << 0; public static final int INVISIBLE_BY_APP_TRANSITIONS = 1 << 1; + public static final int INVISIBLE_BY_PENDING_FLAGS = 1 << 2; + + // This is not treated as invisibility flag, but adds as a hint for an incomplete transition. + // When the wallpaper animation runs, it replaces this flag with a proper invisibility + // flag, INVISIBLE_BY_PENDING_FLAGS only for the duration of that animation. + public static final int PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION = 1 << 3; + + private static final int INVISIBLE_FLAGS = + INVISIBLE_BY_STATE_HANDLER | INVISIBLE_BY_APP_TRANSITIONS | INVISIBLE_BY_PENDING_FLAGS; + public static final int STATE_HANDLER_INVISIBILITY_FLAGS = + INVISIBLE_BY_STATE_HANDLER | PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION; public static final int INVISIBLE_ALL = - INVISIBLE_BY_STATE_HANDLER | INVISIBLE_BY_APP_TRANSITIONS; + INVISIBLE_FLAGS | PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION; @Retention(SOURCE) @IntDef( flag = true, - value = {INVISIBLE_BY_STATE_HANDLER, INVISIBLE_BY_APP_TRANSITIONS}) + value = {INVISIBLE_BY_STATE_HANDLER, INVISIBLE_BY_APP_TRANSITIONS, + INVISIBLE_BY_PENDING_FLAGS, PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION}) public @interface InvisibilityFlags{} private final ArrayList<OnDeviceProfileChangeListener> mDPChangeListeners = new ArrayList<>(); @@ -208,7 +220,7 @@ public abstract class BaseActivity extends Activity implements UserEventDelegate /** * Used to set the override visibility state, used only to handle the transition home with the * recents animation. - * @see LauncherAppTransitionManagerImpl.getWallpaperOpenRunner() + * @see LauncherAppTransitionManagerImpl#getWallpaperOpenRunner() */ public void addForceInvisibleFlag(@InvisibilityFlags int flag) { mForceInvisible |= flag; @@ -218,12 +230,15 @@ public abstract class BaseActivity extends Activity implements UserEventDelegate mForceInvisible &= ~flag; } - /** * @return Wether this activity should be considered invisible regardless of actual visibility. */ public boolean isForceInvisible() { - return mForceInvisible != 0; + return hasSomeInvisibleFlag(INVISIBLE_FLAGS); + } + + public boolean hasSomeInvisibleFlag(int mask) { + return (mForceInvisible & mask) != 0; } public interface MultiWindowModeChangedListener { |