Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3809c0a2 authored by Tony Wickham's avatar Tony Wickham Committed by Automerger Merge Worker
Browse files

Merge "Fix gestures for exclude-from-recents + translucent tasks" into udc-qpr-dev am: cf596d41

parents 2fbb34fc cf596d41
Loading
Loading
Loading
Loading
+18 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.quickstep;
package com.android.quickstep;


import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;

import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.quickstep.views.DesktopTaskView.DESKTOP_IS_PROTO2_ENABLED;
import static com.android.quickstep.views.DesktopTaskView.DESKTOP_IS_PROTO2_ENABLED;
import static com.android.wm.shell.util.GroupedRecentTaskInfo.TYPE_FREEFORM;
import static com.android.wm.shell.util.GroupedRecentTaskInfo.TYPE_FREEFORM;
@@ -269,6 +271,7 @@ public class RecentTasksList {


        TaskLoadResult allTasks = new TaskLoadResult(requestId, loadKeysOnly, rawTasks.size());
        TaskLoadResult allTasks = new TaskLoadResult(requestId, loadKeysOnly, rawTasks.size());


        int numVisibleTasks = 0;
        for (GroupedRecentTaskInfo rawTask : rawTasks) {
        for (GroupedRecentTaskInfo rawTask : rawTasks) {
            if (DESKTOP_IS_PROTO2_ENABLED && rawTask.getType() == TYPE_FREEFORM) {
            if (DESKTOP_IS_PROTO2_ENABLED && rawTask.getType() == TYPE_FREEFORM) {
                GroupTask desktopTask = createDesktopTask(rawTask);
                GroupTask desktopTask = createDesktopTask(rawTask);
@@ -285,12 +288,27 @@ public class RecentTasksList {
            task1.setLastSnapshotData(taskInfo1);
            task1.setLastSnapshotData(taskInfo1);
            Task task2 = null;
            Task task2 = null;
            if (taskInfo2 != null) {
            if (taskInfo2 != null) {
                // Is split task
                Task.TaskKey task2Key = new Task.TaskKey(taskInfo2);
                Task.TaskKey task2Key = new Task.TaskKey(taskInfo2);
                task2 = loadKeysOnly
                task2 = loadKeysOnly
                        ? new Task(task2Key)
                        ? new Task(task2Key)
                        : Task.from(task2Key, taskInfo2,
                        : Task.from(task2Key, taskInfo2,
                                tmpLockedUsers.get(task2Key.userId) /* isLocked */);
                                tmpLockedUsers.get(task2Key.userId) /* isLocked */);
                task2.setLastSnapshotData(taskInfo2);
                task2.setLastSnapshotData(taskInfo2);
            } else {
                // Is fullscreen task
                if (numVisibleTasks > 0) {
                    boolean isExcluded = (taskInfo1.baseIntent.getFlags()
                            & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0;
                    if (taskInfo1.isTopActivityTransparent && isExcluded) {
                        // If there are already visible tasks, then ignore the excluded tasks and
                        // don't add them to the returned list
                        continue;
                    }
                }
            }
            if (taskInfo1.isVisible) {
                numVisibleTasks++;
            }
            }
            final SplitConfigurationOptions.SplitBounds launcherSplitBounds =
            final SplitConfigurationOptions.SplitBounds launcherSplitBounds =
                    convertSplitBounds(rawTask.getSplitBounds());
                    convertSplitBounds(rawTask.getSplitBounds());
+14 −6
Original line number Original line Diff line number Diff line
@@ -16,7 +16,6 @@
package com.android.quickstep;
package com.android.quickstep;


import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
@@ -229,12 +228,21 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
        }
        }


        /**
        /**
         * Returns true if the given task holds an Assistant activity that is excluded from recents
         * If the given task holds an activity that is excluded from recents, and there
         * is another running task that is not excluded from recents, returns that underlying task.
         */
         */
        public boolean isExcludedAssistant() {
        public @Nullable CachedTaskInfo otherVisibleTaskThisIsExcludedOver() {
            return mTopTask != null && mTopTask.configuration.windowConfiguration
            if (mTopTask == null
                    .getActivityType() == ACTIVITY_TYPE_ASSISTANT
                    || (mTopTask.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) == 0) {
                    && (mTopTask.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0;
                // Not an excluded task.
                return null;
            }
            List<RunningTaskInfo> visibleNonExcludedTasks = mAllCachedTasks.stream()
                    .filter(t -> t.isVisible
                            && (t.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) == 0)
                    .toList();
            return visibleNonExcludedTasks.isEmpty() ? null
                    : new CachedTaskInfo(visibleNonExcludedTasks);
        }
        }


        /**
        /**
+13 −7
Original line number Original line Diff line number Diff line
@@ -1044,13 +1044,19 @@ public class TouchInteractionService extends Service {
        boolean forceOverviewInputConsumer = gestureState.getActivityInterface().isStarted()
        boolean forceOverviewInputConsumer = gestureState.getActivityInterface().isStarted()
                && gestureState.getRunningTask() != null
                && gestureState.getRunningTask() != null
                && gestureState.getRunningTask().isRootChooseActivity();
                && gestureState.getRunningTask().isRootChooseActivity();
        if (gestureState.getRunningTask() != null

                && gestureState.getRunningTask().isExcludedAssistant()) {
        // In the case where we are in an excluded, translucent overlay, ignore it and treat the
            // In the case where we are in the excluded assistant state, ignore it and treat the
        // running activity as the task behind the overlay.
            // running activity as the task behind the assistant
        TopTaskTracker.CachedTaskInfo otherVisibleTask = gestureState.getRunningTask() == null
            gestureState.updateRunningTask(TopTaskTracker.INSTANCE.get(this)
                ? null
                    .getCachedTopTask(true /* filterOnlyVisibleRecents */));
                : gestureState.getRunningTask().otherVisibleTaskThisIsExcludedOver();
            forceOverviewInputConsumer = gestureState.getRunningTask().isHomeTask();
        if (otherVisibleTask != null) {
            ActiveGestureLog.INSTANCE.addLog(new CompoundString("Changing active task to ")
                    .append(otherVisibleTask.getPackageName())
                    .append(" because the previous task running on top of this one (")
                    .append(gestureState.getRunningTask().getPackageName())
                    .append(") was excluded from recents"));
            gestureState.updateRunningTask(otherVisibleTask);
        }
        }


        boolean previousGestureAnimatedToLauncher =
        boolean previousGestureAnimatedToLauncher =
+1 −0
Original line number Original line Diff line number Diff line
@@ -375,6 +375,7 @@ public class TaskViewSimulator implements TransformParams.BuilderProxy {
        mInversePositionMatrix.mapRect(mTempRectF);
        mInversePositionMatrix.mapRect(mTempRectF);
        mTempRectF.roundOut(mTmpCropRect);
        mTempRectF.roundOut(mTmpCropRect);


        params.setProgress(1f - fullScreenProgress);
        params.applySurfaceParams(params.createSurfaceParams(this));
        params.applySurfaceParams(params.createSurfaceParams(this));


        if (!DEBUG) {
        if (!DEBUG) {
+9 −3
Original line number Original line Diff line number Diff line
@@ -15,8 +15,8 @@
 */
 */
package com.android.quickstep.util;
package com.android.quickstep.util;


import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;


import android.util.FloatProperty;
import android.util.FloatProperty;
import android.view.RemoteAnimationTarget;
import android.view.RemoteAnimationTarget;
@@ -54,6 +54,7 @@ public class TransformParams {
        }
        }
    };
    };


    /** Progress from 0 to 1 where 0 is in-app and 1 is Overview */
    private float mProgress;
    private float mProgress;
    private float mTargetAlpha;
    private float mTargetAlpha;
    private float mCornerRadius;
    private float mCornerRadius;
@@ -135,6 +136,7 @@ public class TransformParams {
        return this;
        return this;
    }
    }


    /** Builds the SurfaceTransaction from the given BuilderProxy params. */
    public SurfaceTransaction createSurfaceParams(BuilderProxy proxy) {
    public SurfaceTransaction createSurfaceParams(BuilderProxy proxy) {
        RemoteAnimationTargets targets = mTargetSet;
        RemoteAnimationTargets targets = mTargetSet;
        SurfaceTransaction transaction = new SurfaceTransaction();
        SurfaceTransaction transaction = new SurfaceTransaction();
@@ -150,8 +152,12 @@ public class TransformParams {
                if (activityType == ACTIVITY_TYPE_HOME) {
                if (activityType == ACTIVITY_TYPE_HOME) {
                    mHomeBuilderProxy.onBuildTargetParams(builder, app, this);
                    mHomeBuilderProxy.onBuildTargetParams(builder, app, this);
                } else {
                } else {
                    // Fade out Assistant overlay.
                    // Fade out translucent overlay.
                    if (activityType == ACTIVITY_TYPE_ASSISTANT && app.isNotInRecents) {
                    // TODO(b/303351074): use app.isNotInRecents directly once it is fixed.
                    boolean isNotInRecents = app.taskInfo != null
                            && (app.taskInfo.baseIntent.getFlags()
                                    & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0;
                    if (app.isTranslucent && isNotInRecents) {
                        float progress = Utilities.boundToRange(getProgress(), 0, 1);
                        float progress = Utilities.boundToRange(getProgress(), 0, 1);
                        builder.setAlpha(1 - Interpolators.DECELERATE_QUINT
                        builder.setAlpha(1 - Interpolators.DECELERATE_QUINT
                                .getInterpolation(progress));
                                .getInterpolation(progress));
Loading