diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java index 2be0da8f28..65b346a590 100644 --- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java @@ -508,7 +508,7 @@ public abstract class BaseQuickstepLauncher extends Launcher ActivityOptionsCompat.setLauncherSourceInfo( activityOptions.options, mLastTouchUpTime); } - activityOptions.options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); + activityOptions.options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); addLaunchCookie(item, activityOptions.options); return activityOptions; } diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index c85b2566a7..0eaea83801 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -29,12 +29,9 @@ import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW; import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET; import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS; import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY; -import static com.android.quickstep.views.RecentsView.TASK_PRIMARY_SPLIT_TRANSLATION; -import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_SPLIT_TRANSLATION; import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_TRANSLATION; import android.util.FloatProperty; -import android.util.Pair; import androidx.annotation.NonNull; @@ -43,7 +40,6 @@ import com.android.launcher3.LauncherState; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.statemanager.StateManager.StateHandler; import com.android.launcher3.states.StateAnimationConfig; -import com.android.launcher3.touch.PagedOrientationHandler; import com.android.quickstep.views.RecentsView; /** @@ -100,15 +96,6 @@ public abstract class BaseRecentsViewStateController config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_X, LINEAR)); setter.setFloat(mRecentsView, TASK_SECONDARY_TRANSLATION, 0f, config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, LINEAR)); - PagedOrientationHandler orientationHandler = - ((RecentsView) mLauncher.getOverviewPanel()).getPagedOrientationHandler(); - Pair taskViewsFloat = - orientationHandler.getSplitSelectTaskOffset( - TASK_PRIMARY_SPLIT_TRANSLATION, TASK_SECONDARY_SPLIT_TRANSLATION, - mLauncher.getDeviceProfile()); - setter.setFloat(mRecentsView, taskViewsFloat.first, - toState.getSplitSelectTranslation(mLauncher), LINEAR); - setter.setFloat(mRecentsView, taskViewsFloat.second, 0, LINEAR); setter.setFloat(mRecentsView, getContentAlphaProperty(), toState.overviewUi ? 1 : 0, config.getInterpolator(ANIM_OVERVIEW_FADE, AGGRESSIVE_EASE_IN_OUT)); diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java index 1cf50f7f64..c058aa7bba 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java @@ -71,7 +71,7 @@ class QuickstepInteractionHandler implements RemoteViews.InteractionHandler { } } activityOptions.options.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - activityOptions.options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_EMPTY); + activityOptions.options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_EMPTY); Object itemInfo = hostView.getTag(); if (itemInfo instanceof ItemInfo) { mLauncher.addLaunchCookie((ItemInfo) itemInfo, activityOptions.options); diff --git a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java index 19897a1bf8..32ce1c40d7 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java @@ -23,13 +23,17 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_AC import static com.android.quickstep.views.RecentsView.CONTENT_ALPHA; import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS; import static com.android.quickstep.views.RecentsView.TASK_MODALNESS; +import static com.android.quickstep.views.RecentsView.TASK_PRIMARY_SPLIT_TRANSLATION; +import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_SPLIT_TRANSLATION; import static com.android.quickstep.views.TaskView.FLAG_UPDATE_ALL; import android.annotation.TargetApi; import android.os.Build; import android.util.FloatProperty; +import android.util.Pair; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.android.launcher3.BaseQuickstepLauncher; import com.android.launcher3.LauncherState; @@ -37,6 +41,7 @@ import com.android.launcher3.anim.AnimatorListeners; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.states.StateAnimationConfig; +import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.MultiValueAlpha; import com.android.quickstep.views.ClearAllButton; import com.android.quickstep.views.LauncherRecentsView; @@ -67,11 +72,7 @@ public final class RecentsViewStateController extends // DepthController to prevent optimizations which might occlude the layers behind mLauncher.getDepthController().setHasContentBehindLauncher(state.overviewUi); - if (isSplitSelectionState(state)) { - mRecentsView.applySplitPrimaryScrollOffset(); - } else { - mRecentsView.resetSplitPrimaryScrollOffset(); - } + handleSplitSelectionState(state, null); } @Override @@ -92,16 +93,7 @@ public final class RecentsViewStateController extends builder.addListener(AnimatorListeners.forSuccessCallback(() -> mLauncher.getDepthController().setHasContentBehindLauncher(toState.overviewUi))); - // Create or dismiss split screen select animations - LauncherState currentState = mLauncher.getStateManager().getState(); - if (isSplitSelectionState(toState) && !isSplitSelectionState(currentState)) { - builder.add(mRecentsView.createSplitSelectInitAnimation().buildAnim()); - } - if (isSplitSelectionState(toState)) { - mRecentsView.applySplitPrimaryScrollOffset(); - } else { - mRecentsView.resetSplitPrimaryScrollOffset(); - } + handleSplitSelectionState(toState, builder); setAlphas(builder, config, toState); builder.setFloat(mRecentsView, FULLSCREEN_PROGRESS, @@ -109,10 +101,52 @@ public final class RecentsViewStateController extends } /** - * @return true if {@param toState} is {@link LauncherState#OVERVIEW_SPLIT_SELECT} + * Create or dismiss split screen select animations. + * @param builder if null then this will run the split select animations right away, otherwise + * will add animations to builder. */ - private boolean isSplitSelectionState(@NonNull LauncherState toState) { - return toState == OVERVIEW_SPLIT_SELECT; + private void handleSplitSelectionState(@NonNull LauncherState toState, + @Nullable PendingAnimation builder) { + LauncherState currentState = mLauncher.getStateManager().getState(); + boolean animate = builder != null; + PagedOrientationHandler orientationHandler = + ((RecentsView) mLauncher.getOverviewPanel()).getPagedOrientationHandler(); + Pair taskViewsFloat = + orientationHandler.getSplitSelectTaskOffset( + TASK_PRIMARY_SPLIT_TRANSLATION, TASK_SECONDARY_SPLIT_TRANSLATION, + mLauncher.getDeviceProfile()); + + if (isSplitSelectionState(currentState, toState)) { + // Animation to "dismiss" selected taskView + PendingAnimation splitSelectInitAnimation = + mRecentsView.createSplitSelectInitAnimation(); + // Add properties to shift remaining taskViews to get out of placeholder view + splitSelectInitAnimation.setFloat(mRecentsView, taskViewsFloat.first, + toState.getSplitSelectTranslation(mLauncher), LINEAR); + splitSelectInitAnimation.setFloat(mRecentsView, taskViewsFloat.second, 0, LINEAR); + + if (!animate && isSplitSelectionState(currentState, toState)) { + splitSelectInitAnimation.buildAnim().start(); + } else if (animate && + isSplitSelectionState(currentState, toState)) { + builder.add(splitSelectInitAnimation.buildAnim()); + } + } + + if (isSplitSelectionState(currentState, toState)) { + mRecentsView.applySplitPrimaryScrollOffset(); + } else { + mRecentsView.resetSplitPrimaryScrollOffset(); + } + } + + /** + * @return true if {@param toState} is {@link LauncherState#OVERVIEW_SPLIT_SELECT} + * and {@param fromState} is not {@link LauncherState#OVERVIEW_SPLIT_SELECT} + */ + private boolean isSplitSelectionState(@NonNull LauncherState fromState, + @NonNull LauncherState toState) { + return fromState != OVERVIEW_SPLIT_SELECT && toState == OVERVIEW_SPLIT_SELECT; } private void setAlphas(PropertySetter propertySetter, StateAnimationConfig config, diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index c7f1edd292..9f1e47f15a 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1001,7 +1001,7 @@ public abstract class AbsSwipeUpHandler, } if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, - true /*shown*/, true /*animate*/); + true /*shown*/, false /*animate*/); } break; } @@ -1654,7 +1654,7 @@ public abstract class AbsSwipeUpHandler, if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, - true /*shown*/, true /*animate*/); + true /*shown*/, false /*animate*/); } // Leave the pending invisible flag, as it may be used by wallpaper open animation. diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index 103f350c0f..306e864372 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -255,7 +255,7 @@ public final class RecentsActivity extends StatefulActivity { final ActivityOptionsWrapper activityOptions = new ActivityOptionsWrapper( ActivityOptionsCompat.makeRemoteAnimation(adapterCompat), onEndCallback); - activityOptions.options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); + activityOptions.options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); return activityOptions; } diff --git a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java index cbdbdb5571..ecb30e52f1 100644 --- a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java +++ b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java @@ -190,7 +190,7 @@ public interface TaskShortcutFactory { ActivityOptions options = mFactory.makeLaunchOptions(mTarget); if (options != null) { - options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); + options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); } if (options != null && ActivityManagerWrapper.getInstance().startActivityFromRecents(taskId, @@ -242,6 +242,7 @@ public interface TaskShortcutFactory { } } + /** @Deprecated */ TaskShortcutFactory SPLIT_SCREEN = new MultiWindowFactory(R.drawable.ic_split_screen, R.string.recent_task_option_split_screen, LAUNCHER_SYSTEM_SHORTCUT_SPLIT_SCREEN_TAP) { diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java index 14f3ec453c..5d9a537165 100644 --- a/quickstep/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java @@ -84,6 +84,7 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams; import java.util.ArrayList; +import java.util.List; /** * Utility class for helpful methods related to {@link TaskView} objects and their tasks. @@ -606,13 +607,13 @@ public final class TaskViewUtils { } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); - SurfaceControl[] auxiliarySurfaces = new SurfaceControl[nonApps.length]; + List auxiliarySurfaces = new ArrayList<>(nonApps.length); boolean hasSurfaceToAnimate = false; for (int i = 0; i < nonApps.length; ++i) { final RemoteAnimationTargetCompat targ = nonApps[i]; final SurfaceControl leash = targ.leash.getSurfaceControl(); if (targ.windowType == TYPE_DOCK_DIVIDER && leash != null) { - auxiliarySurfaces[i] = leash; + auxiliarySurfaces.add(leash); hasSurfaceToAnimate = true; } } diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java index d3108936e7..5253e8c657 100644 --- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java +++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java @@ -64,7 +64,6 @@ public class SplitSelectStateController { private @StagePosition int mStagePosition; private Task mInitialTask; private Task mSecondTask; - private Rect mInitialBounds; private boolean mRecentsAnimationRunning; /** If not null, this is the TaskView we want to launch from */ @Nullable @@ -86,7 +85,6 @@ public class SplitSelectStateController { Rect initialBounds) { mInitialTask = task; mStagePosition = stagePosition; - mInitialBounds = initialBounds; } /** @@ -229,7 +227,6 @@ public class SplitSelectStateController { mInitialTask = null; mSecondTask = null; mStagePosition = SplitConfigurationOptions.STAGE_POSITION_UNDEFINED; - mInitialBounds = null; mRecentsAnimationRunning = false; mLaunchingTaskView = null; } @@ -241,8 +238,4 @@ public class SplitSelectStateController { public boolean isSplitSelectActive() { return mInitialTask != null && mSecondTask == null; } - - public Rect getInitialBounds() { - return mInitialBounds; - } } diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 10efa3ecbf..f0e57c9932 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -3994,7 +3994,7 @@ public abstract class RecentsView