diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java index f4d16291cf..c18a0fdebb 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java @@ -136,10 +136,13 @@ final class AppToOverviewAnimationProvider> extend new SyncRtSurfaceTransactionApplierCompat(mActivity.getRootView())); AnimatedFloat recentsAlpha = new AnimatedFloat(() -> { }); - params.setBaseAlphaCallback((t, a) -> recentsAlpha.value); + params.setBaseBuilderProxy((builder, app, p) + -> builder.withAlpha(recentsAlpha.value)); Interpolator taskInterpolator; if (targets.isAnimatingHome()) { + params.setHomeBuilderProxy((builder, app, p) -> builder.withAlpha(1 - p.getProgress())); + taskInterpolator = TOUCH_RESPONSE_INTERPOLATOR; pa.addFloat(recentsAlpha, AnimatedFloat.VALUE, 0, 1, TOUCH_RESPONSE_INTERPOLATOR); } else { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java index 23cc6d5431..46799ff272 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java @@ -73,7 +73,6 @@ import com.android.quickstep.util.ActiveGestureLog; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.ShelfPeekAnim; import com.android.quickstep.util.ShelfPeekAnim.ShelfAnimState; -import com.android.quickstep.util.TransformParams.TargetAlphaProvider; import com.android.quickstep.views.LiveTileOverlay; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; @@ -671,10 +670,6 @@ public abstract class BaseSwipeUpHandlerV2, Q exte protected InputConsumer createNewInputProxyHandler() { endRunningWindowAnim(mGestureState.getEndTarget() == HOME /* cancel */); endLauncherTransitionController(); - if (!ENABLE_QUICKSTEP_LIVE_TILE.get()) { - // Hide the task view, if not already hidden - setTargetAlphaProvider(BaseSwipeUpHandlerV2::getHiddenTargetAlpha); - } StatefulActivity activity = mActivityInterface.getCreatedActivity(); return activity == null ? InputConsumer.NO_OP @@ -1257,11 +1252,6 @@ public abstract class BaseSwipeUpHandlerV2, Q exte reset(); } - private void setTargetAlphaProvider(TargetAlphaProvider provider) { - mTransformParams.setTaskAlphaCallback(provider); - updateFinalShift(); - } - private void addLiveTileOverlay() { if (LiveTileOverlay.INSTANCE.attach(mActivity.getRootView().getOverlay())) { mRecentsView.setLiveTileOverlayAttached(true); @@ -1273,13 +1263,6 @@ public abstract class BaseSwipeUpHandlerV2, Q exte mRecentsView.setLiveTileOverlayAttached(false); } - public static float getHiddenTargetAlpha(RemoteAnimationTargetCompat app, float expectedAlpha) { - if (!isNotInRecents(app)) { - return 0; - } - return expectedAlpha; - } - private static boolean isNotInRecents(RemoteAnimationTargetCompat app) { return app.isNotInRecents || app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME; diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java index 7b614c24bc..96913c651c 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java @@ -15,23 +15,29 @@ */ package com.android.quickstep; -import static com.android.launcher3.anim.Interpolators.LINEAR; +import static com.android.launcher3.anim.Interpolators.ACCEL; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME; +import android.animation.ObjectAnimator; import android.app.ActivityOptions; import android.content.Context; import android.content.Intent; +import android.graphics.Matrix; import androidx.annotation.NonNull; +import com.android.launcher3.DeviceProfile; +import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; +import com.android.launcher3.anim.SpringAnimationBuilder; import com.android.quickstep.fallback.FallbackRecentsView; import com.android.quickstep.util.TransformParams; +import com.android.quickstep.util.TransformParams.BuilderProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; -import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams.Builder; +import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams; /** * Handles the navigation gestures when a 3rd party launcher is the default home activity. @@ -42,6 +48,9 @@ public class FallbackSwipeHandler extends private FallbackHomeAnimationFactory mActiveAnimationFactory; private final boolean mRunningOverHome; + private final Matrix mTmpMatrix = new Matrix(); + private float mMaxLauncherScale = 1; + public FallbackSwipeHandler(Context context, RecentsAnimationDeviceState deviceState, TaskAnimationManager taskAnimationManager, GestureState gestureState, long touchTimeMs, boolean continuingLastGesture, InputConsumerController inputConsumer) { @@ -49,6 +58,31 @@ public class FallbackSwipeHandler extends continuingLastGesture, inputConsumer); mRunningOverHome = ActivityManagerWrapper.isHomeTask(mGestureState.getRunningTask()); + if (mRunningOverHome) { + mTransformParams.setHomeBuilderProxy(this::updateHomeActivityTransformDuringSwipeUp); + } + } + + @Override + protected void initTransitionEndpoints(DeviceProfile dp) { + super.initTransitionEndpoints(dp); + if (mRunningOverHome) { + mMaxLauncherScale = 1 / mTaskViewSimulator.getFullScreenScale(); + } + } + + private void updateHomeActivityTransformDuringSwipeUp(SurfaceParams.Builder builder, + RemoteAnimationTargetCompat app, TransformParams params) { + setHomeScaleAndAlpha(builder, app, mCurrentShift.value, + Utilities.boundToRange(1 - mCurrentShift.value, 0, 1)); + } + + private void setHomeScaleAndAlpha(SurfaceParams.Builder builder, + RemoteAnimationTargetCompat app, float verticalShift, float alpha) { + float scale = Utilities.mapRange(verticalShift, 1, mMaxLauncherScale); + mTmpMatrix.setScale(scale, scale, + app.localBounds.exactCenterX(), app.localBounds.exactCenterY()); + builder.withMatrix(mTmpMatrix).withAlpha(alpha); } @Override @@ -85,30 +119,61 @@ public class FallbackSwipeHandler extends } } - private class FallbackHomeAnimationFactory extends HomeAnimationFactory - implements TransformParams.BuilderProxy { + private class FallbackHomeAnimationFactory extends HomeAnimationFactory { private final TransformParams mHomeAlphaParams = new TransformParams(); - private final AnimatedFloat mHomeAlpha = new AnimatedFloat(this::updateHomeAlpha); + private final AnimatedFloat mHomeAlpha; + + private final AnimatedFloat mVerticalShiftForScale = new AnimatedFloat(); + + private final AnimatedFloat mRecentsAlpha = new AnimatedFloat(); private final long mDuration; FallbackHomeAnimationFactory(long duration) { super(null); mDuration = duration; + + if (mRunningOverHome) { + mHomeAlpha = new AnimatedFloat(); + mHomeAlpha.value = Utilities.boundToRange(1 - mCurrentShift.value, 0, 1); + mVerticalShiftForScale.value = mCurrentShift.value; + mTransformParams.setHomeBuilderProxy( + this::updateHomeActivityTransformDuringHomeAnim); + } else { + mHomeAlpha = new AnimatedFloat(this::updateHomeAlpha); + mHomeAlpha.value = 0; + + mHomeAlphaParams.setHomeBuilderProxy( + this::updateHomeActivityTransformDuringHomeAnim); + } + + mRecentsAlpha.value = 1; + mTransformParams.setBaseBuilderProxy( + this::updateRecentsActivityTransformDuringHomeAnim); + } + + private void updateRecentsActivityTransformDuringHomeAnim(SurfaceParams.Builder builder, + RemoteAnimationTargetCompat app, TransformParams params) { + builder.withAlpha(mRecentsAlpha.value); + } + + private void updateHomeActivityTransformDuringHomeAnim(SurfaceParams.Builder builder, + RemoteAnimationTargetCompat app, TransformParams params) { + setHomeScaleAndAlpha(builder, app, mVerticalShiftForScale.value, mHomeAlpha.value); } @NonNull @Override public AnimatorPlaybackController createActivityAnimationToHome() { PendingAnimation pa = new PendingAnimation(mDuration); - pa.setFloat(mHomeAlpha, AnimatedFloat.VALUE, 1, LINEAR); + pa.setFloat(mRecentsAlpha, AnimatedFloat.VALUE, 0, ACCEL); return pa.createPlaybackController(); } private void updateHomeAlpha() { - mHomeAlphaParams.setProgress(mHomeAlpha.value); if (mHomeAlphaParams.getTargetSet() != null) { - mHomeAlphaParams.applySurfaceParams(mHomeAlphaParams.createSurfaceParams(this)); + mHomeAlphaParams.applySurfaceParams( + mHomeAlphaParams.createSurfaceParams(BuilderProxy.NO_OP)); } } @@ -125,7 +190,23 @@ public class FallbackSwipeHandler extends } @Override - public void onBuildParams(Builder builder, RemoteAnimationTargetCompat app, int targetMode, - TransformParams params) { } + public void playAtomicAnimation(float velocity) { + ObjectAnimator alphaAnim = mHomeAlpha.animateToValue(mHomeAlpha.value, 1); + alphaAnim.setDuration(mDuration).setInterpolator(ACCEL); + alphaAnim.start(); + + if (mRunningOverHome) { + // Spring back launcher scale + new SpringAnimationBuilder(mContext) + .setStartValue(mVerticalShiftForScale.value) + .setEndValue(0) + .setStartVelocity(-velocity / mTransitionDragLength) + .setMinimumVisibleChange(1f / mDp.heightPx) + .setDampingRatio(0.6f) + .setStiffness(800) + .build(mVerticalShiftForScale, AnimatedFloat.VALUE) + .start(); + } + } } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java index b441490d3f..852a51a9ce 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java @@ -34,7 +34,6 @@ import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; -import android.os.IBinder; import android.os.Looper; import android.view.View; @@ -51,7 +50,6 @@ import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory; import com.android.launcher3.statemanager.StateManager.StateHandler; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.util.ActivityTracker; -import com.android.launcher3.util.ObjectWrapper; import com.android.launcher3.util.SystemUiController; import com.android.launcher3.util.Themes; import com.android.launcher3.views.BaseDragLayer; @@ -62,7 +60,6 @@ import com.android.quickstep.fallback.RecentsState; import com.android.quickstep.util.RecentsAtomicAnimationFactory; import com.android.quickstep.views.OverviewActionsView; import com.android.quickstep.views.TaskView; -import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityOptionsCompat; import com.android.systemui.shared.system.RemoteAnimationAdapterCompat; import com.android.systemui.shared.system.RemoteAnimationRunnerCompat; @@ -77,8 +74,6 @@ import java.io.PrintWriter; */ public final class RecentsActivity extends StatefulActivity { - public static final String EXTRA_THUMBNAIL = "thumbnailData"; - public static final String EXTRA_TASK_ID = "taskID"; public static final ActivityTracker ACTIVITY_TRACKER = new ActivityTracker<>(); @@ -118,21 +113,6 @@ public final class RecentsActivity extends StatefulActivity { @Override protected void onNewIntent(Intent intent) { - if (intent.getExtras() != null) { - int taskID = intent.getIntExtra(EXTRA_TASK_ID, 0); - IBinder thumbnail = intent.getExtras().getBinder(EXTRA_THUMBNAIL); - if (taskID != 0 && thumbnail instanceof ObjectWrapper) { - ObjectWrapper obj = (ObjectWrapper) thumbnail; - ThumbnailData thumbnailData = obj.get(); - mFallbackRecentsView.showCurrentTask(taskID); - mFallbackRecentsView.updateThumbnail(taskID, thumbnailData); - // Clear the ref since any reference to the extras on the system side will still - // hold a reference to the wrapper - obj.clear(); - } - } - intent.removeExtra(EXTRA_TASK_ID); - intent.removeExtra(EXTRA_THUMBNAIL); super.onNewIntent(intent); ACTIVITY_TRACKER.handleNewIntent(this, intent); } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java index c81afac178..c68d6e2e0d 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java @@ -143,9 +143,6 @@ public final class TaskViewUtils { boolean parallaxCenterAndAdjacentTask = taskIndex != recentsView.getCurrentPage(); int startScroll = recentsView.getScrollOffset(taskIndex); - params.setProgress(1); - out.setFloat(params, TransformParams.PROGRESS, 0, TOUCH_RESPONSE_INTERPOLATOR); - Context context = v.getContext(); DeviceProfile dp = BaseActivity.fromContext(context).getDeviceProfile(); // RecentsView never updates the display rotation until swipe-up so the value may be stale. @@ -173,9 +170,7 @@ public final class TaskViewUtils { } // Fade in the task during the initial 20% of the animation - AnimatedFloat taskAlpha = new AnimatedFloat(() -> { }); - params.setTaskAlphaCallback((t, alpha) -> taskAlpha.value); - out.addFloat(taskAlpha, AnimatedFloat.VALUE, 0, 1, clampToProgress(LINEAR, 0, 0.2f)); + out.addFloat(params, TransformParams.TARGET_ALPHA, 0, 1, clampToProgress(LINEAR, 0, 0.2f)); if (!skipViewChanges && parallaxCenterAndAdjacentTask && topMostSimulator != null) { out.addFloat(v, VIEW_ALPHA, 1, 0, clampToProgress(LINEAR, 0.2f, 0.4f)); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java index 4e1d84922f..3b08675885 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java @@ -87,8 +87,8 @@ public class TaskViewSimulator implements TransformParams.BuilderProxy { private float mCurveScale = 1; // RecentsView properties - public final AnimatedFloat recentsViewScale = new AnimatedFloat(() -> { }); - public final AnimatedFloat fullScreenProgress = new AnimatedFloat(() -> { }); + public final AnimatedFloat recentsViewScale = new AnimatedFloat(); + public final AnimatedFloat fullScreenProgress = new AnimatedFloat(); private final ScrollState mScrollState = new ScrollState(); private final int mPageSpacing; diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java index b929f26528..9bb508eb37 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java @@ -40,14 +40,27 @@ public class TransformParams { } }; + public static FloatProperty TARGET_ALPHA = + new FloatProperty("targetAlpha") { + @Override + public void setValue(TransformParams params, float v) { + params.setTargetAlpha(v); + } + + @Override + public Float get(TransformParams params) { + return params.getTargetAlpha(); + } + }; + private float mProgress; private float mTargetAlpha; private float mCornerRadius; private RemoteAnimationTargets mTargetSet; private SyncRtSurfaceTransactionApplierCompat mSyncTransactionApplier; - private TargetAlphaProvider mTaskAlphaCallback = (t, a) -> a; - private TargetAlphaProvider mBaseAlphaCallback = (t, a) -> 1; + private BuilderProxy mHomeBuilderProxy = BuilderProxy.ALWAYS_VISIBLE; + private BuilderProxy mBaseBuilderProxy = BuilderProxy.ALWAYS_VISIBLE; public TransformParams() { mProgress = 0; @@ -105,18 +118,20 @@ public class TransformParams { } /** - * Sets an alternate function which can be used to control the alpha of target app + * Sets an alternate function to control transform for non-target apps. The default + * implementation keeps the targets visible with alpha=1 */ - public TransformParams setTaskAlphaCallback(TargetAlphaProvider callback) { - mTaskAlphaCallback = callback; + public TransformParams setBaseBuilderProxy(BuilderProxy proxy) { + mBaseBuilderProxy = proxy; return this; } /** - * Sets an alternate function which can be used to control the alpha of non-target app + * Sets an alternate function to control transform for home target. The default + * implementation keeps the targets visible with alpha=1 */ - public TransformParams setBaseAlphaCallback(TargetAlphaProvider callback) { - mBaseAlphaCallback = callback; + public TransformParams setHomeBuilderProxy(BuilderProxy proxy) { + mHomeBuilderProxy = proxy; return this; } @@ -127,25 +142,24 @@ public class TransformParams { RemoteAnimationTargetCompat app = targets.unfilteredApps[i]; SurfaceParams.Builder builder = new SurfaceParams.Builder(app.leash); - float progress = Utilities.boundToRange(getProgress(), 0, 1); - float alpha; if (app.mode == targets.targetMode) { - alpha = mTaskAlphaCallback.getAlpha(app, getTargetAlpha()); - if (app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) { + if (app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) { + mHomeBuilderProxy.onBuildTargetParams(builder, app, this); + } else { // Fade out Assistant overlay. if (app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_ASSISTANT && app.isNotInRecents) { - alpha = 1 - Interpolators.DEACCEL_2_5.getInterpolation(progress); + float progress = Utilities.boundToRange(getProgress(), 0, 1); + builder.withAlpha(1 - Interpolators.DEACCEL_2_5.getInterpolation(progress)); + } else { + builder.withAlpha(getTargetAlpha()); } - } else if (targets.hasRecents) { - // If home has a different target then recents, reverse anim the - // home target. - alpha = 1 - (progress * getTargetAlpha()); + + proxy.onBuildTargetParams(builder, app, this); } } else { - alpha = mBaseAlphaCallback.getAlpha(app, progress); + mBaseBuilderProxy.onBuildTargetParams(builder, app, this); } - proxy.onBuildParams(builder.withAlpha(alpha), app, targets.targetMode, this); surfaceParams[i] = builder.build(); } return surfaceParams; @@ -182,21 +196,13 @@ public class TransformParams { } } - public interface TargetAlphaProvider { - float getAlpha(RemoteAnimationTargetCompat target, float expectedAlpha); - } - + @FunctionalInterface public interface BuilderProxy { - default void onBuildParams(SurfaceParams.Builder builder, - RemoteAnimationTargetCompat app, int targetMode, TransformParams params) { - if (app.mode == targetMode - && app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) { - onBuildTargetParams(builder, app, params); - } - } + BuilderProxy NO_OP = (builder, app, params) -> { }; + BuilderProxy ALWAYS_VISIBLE = (builder, app, params) ->builder.withAlpha(1); - default void onBuildTargetParams(SurfaceParams.Builder builder, - RemoteAnimationTargetCompat app, TransformParams params) { } + void onBuildTargetParams(SurfaceParams.Builder builder, + RemoteAnimationTargetCompat app, TransformParams params); } } diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java index e718598872..25c07f15b8 100644 --- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java @@ -32,6 +32,7 @@ import static com.android.launcher3.anim.Interpolators.DEACCEL_1_7; import static com.android.launcher3.anim.Interpolators.EXAGGERATED_EASE; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.KEYGUARD_ANIMATION; +import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY; import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS; import static com.android.launcher3.statehandlers.DepthController.DEPTH; import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION; @@ -647,6 +648,9 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans */ @Override public void registerRemoteAnimations() { + if (SEPARATE_RECENTS_ACTIVITY.get()) { + return; + } if (hasControlRemoteAppTransitionPermission()) { mWallpaperOpenRunner = createWallpaperOpenRunner(false /* fromUnlock */); @@ -677,6 +681,9 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans */ @Override public void unregisterRemoteAnimations() { + if (SEPARATE_RECENTS_ACTIVITY.get()) { + return; + } if (hasControlRemoteAppTransitionPermission()) { new ActivityCompat(mLauncher).unregisterRemoteAnimations(); diff --git a/quickstep/src/com/android/quickstep/AnimatedFloat.java b/quickstep/src/com/android/quickstep/AnimatedFloat.java index c3b90e3e87..f7e8781573 100644 --- a/quickstep/src/com/android/quickstep/AnimatedFloat.java +++ b/quickstep/src/com/android/quickstep/AnimatedFloat.java @@ -38,11 +38,17 @@ public class AnimatedFloat { } }; + private static final Runnable NO_OP = () -> { }; + private final Runnable mUpdateCallback; private ObjectAnimator mValueAnimator; public float value; + public AnimatedFloat() { + this(NO_OP); + } + public AnimatedFloat(Runnable updateCallback) { mUpdateCallback = updateCallback; } diff --git a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java index 0449d0ca2a..07f838b1bb 100644 --- a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java +++ b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java @@ -20,6 +20,7 @@ import static android.content.Intent.ACTION_PACKAGE_ADDED; import static android.content.Intent.ACTION_PACKAGE_CHANGED; import static android.content.Intent.ACTION_PACKAGE_REMOVED; +import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY; import static com.android.launcher3.util.PackageManagerHelper.getPackageFilter; import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED; @@ -138,6 +139,13 @@ public final class OverviewComponentObserver { mActivityInterface.onAssistantVisibilityChanged(0.f); } + if (SEPARATE_RECENTS_ACTIVITY.get()) { + mIsDefaultHome = false; + if (defaultHome == null) { + defaultHome = mMyHomeIntent.getComponent(); + } + } + if (!mDeviceState.isHomeDisabled() && (defaultHome == null || mIsDefaultHome)) { // User default home is same as out home app. Use Overview integrated in Launcher. mActivityInterface = LauncherActivityInterface.INSTANCE; diff --git a/src/com/android/launcher3/LauncherRootView.java b/src/com/android/launcher3/LauncherRootView.java index 226a92493b..9ac370f830 100644 --- a/src/com/android/launcher3/LauncherRootView.java +++ b/src/com/android/launcher3/LauncherRootView.java @@ -1,5 +1,6 @@ package com.android.launcher3; +import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY; import static com.android.launcher3.util.SystemUiController.FLAG_DARK_NAV; import static com.android.launcher3.util.SystemUiController.UI_STATE_ROOT_VIEW; @@ -177,7 +178,7 @@ public class LauncherRootView extends InsettableFrameLayout { @TargetApi(Build.VERSION_CODES.Q) public void setDisallowBackGesture(boolean disallowBackGesture) { - if (!Utilities.ATLEAST_Q) { + if (!Utilities.ATLEAST_Q || SEPARATE_RECENTS_ACTIVITY.get()) { return; } mDisallowBackGesture = disallowBackGesture; diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 869dbbc9ab..376b531128 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -36,8 +36,6 @@ public final class FeatureFlags { private static final List sDebugFlags = new ArrayList<>(); public static final String FLAGS_PREF_NAME = "featureFlags"; - public static final String FLAG_ENABLE_FIXED_ROTATION_TRANSFORM = - "ENABLE_FIXED_ROTATION_TRANSFORM"; private FeatureFlags() { } @@ -168,6 +166,10 @@ public final class FeatureFlags { "ENABLE_ALL_APPS_EDU", true, "Shows user a tutorial on how to get to All Apps after X amount of attempts."); + public static final BooleanFlag SEPARATE_RECENTS_ACTIVITY = getDebugFlag( + "SEPARATE_RECENTS_ACTIVITY", false, + "Uses a separate recents activity instead of using the integrated recents+Launcher UI"); + public static void initialize(Context context) { synchronized (sDebugFlags) { for (DebugFlag flag : sDebugFlags) {