diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-10-05 23:19:19 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-10-05 23:19:19 +0000 |
commit | 4a28f3b1644eabc9c3d82de2f3409c4663adf6f0 (patch) | |
tree | 1cd9e8c40dd32222a2b6327a8c3dc289b0a316a2 | |
parent | 99922846b6f78300266c4ae80413540969a094e8 (diff) | |
parent | bf4a08acefeee7846f84df488a9d519816b40f78 (diff) | |
download | Launcher3-4a28f3b1644eabc9c3d82de2f3409c4663adf6f0.tar.gz |
Snap for 10909010 from bf4a08acefeee7846f84df488a9d519816b40f78 to udc-qpr1-release
Change-Id: Ia915aac23b5831ad65b7f214e83320cfb41db3fe
8 files changed, 59 insertions, 26 deletions
@@ -15,6 +15,7 @@ jonmiranda@google.com alexchau@google.com patmanning@google.com tsuharesu@google.com +awickham@google.com per-file FeatureFlags.java, globs = set noparent per-file FeatureFlags.java = sunnygoyal@google.com, winsonc@google.com, adamcohen@google.com, hyunyoungs@google.com, captaincole@google.com diff --git a/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java b/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java index a68e753589..6279f634d6 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java +++ b/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java @@ -116,8 +116,9 @@ public class FlagsFactory { boolean defaultValue = DeviceConfig.getBoolean(NAMESPACE_LAUNCHER, key, defaultValueInCode); if (IS_DEBUG_DEVICE) { boolean currentValue = getSharedPreferences().getBoolean(key, defaultValue); - DebugFlag flag = new DeviceFlag(key, description, flagState, currentValue, - defaultValueInCode); + DebugFlag flag = new DeviceFlag(key, description, + (defaultValue == defaultValueInCode) ? flagState + : defaultValue ? ENABLED : DISABLED, currentValue, defaultValueInCode); sDebugFlags.add(flag); return flag; } else { diff --git a/quickstep/src/com/android/quickstep/RecentTasksList.java b/quickstep/src/com/android/quickstep/RecentTasksList.java index 34817c087b..0a6fefaa34 100644 --- a/quickstep/src/com/android/quickstep/RecentTasksList.java +++ b/quickstep/src/com/android/quickstep/RecentTasksList.java @@ -16,6 +16,8 @@ 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.quickstep.views.DesktopTaskView.DESKTOP_IS_PROTO2_ENABLED; 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()); + int numVisibleTasks = 0; for (GroupedRecentTaskInfo rawTask : rawTasks) { if (DESKTOP_IS_PROTO2_ENABLED && rawTask.getType() == TYPE_FREEFORM) { GroupTask desktopTask = createDesktopTask(rawTask); @@ -285,12 +288,27 @@ public class RecentTasksList { task1.setLastSnapshotData(taskInfo1); Task task2 = null; if (taskInfo2 != null) { + // Is split task Task.TaskKey task2Key = new Task.TaskKey(taskInfo2); task2 = loadKeysOnly ? new Task(task2Key) : Task.from(task2Key, taskInfo2, tmpLockedUsers.get(task2Key.userId) /* isLocked */); 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 = convertSplitBounds(rawTask.getSplitBounds()); diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java index 01baed36fc..f1af2edda8 100644 --- a/quickstep/src/com/android/quickstep/TopTaskTracker.java +++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java @@ -16,7 +16,6 @@ package com.android.quickstep; 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_RECENTS; 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() { - return mTopTask != null && mTopTask.configuration.windowConfiguration - .getActivityType() == ACTIVITY_TYPE_ASSISTANT - && (mTopTask.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0; + public @Nullable CachedTaskInfo otherVisibleTaskThisIsExcludedOver() { + if (mTopTask == null + || (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); } /** diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index bf6150a109..5baf6d43bd 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -1044,13 +1044,19 @@ public class TouchInteractionService extends Service { boolean forceOverviewInputConsumer = gestureState.getActivityInterface().isStarted() && gestureState.getRunningTask() != null && gestureState.getRunningTask().isRootChooseActivity(); - if (gestureState.getRunningTask() != null - && gestureState.getRunningTask().isExcludedAssistant()) { - // In the case where we are in the excluded assistant state, ignore it and treat the - // running activity as the task behind the assistant - gestureState.updateRunningTask(TopTaskTracker.INSTANCE.get(this) - .getCachedTopTask(true /* filterOnlyVisibleRecents */)); - forceOverviewInputConsumer = gestureState.getRunningTask().isHomeTask(); + + // In the case where we are in an excluded, translucent overlay, ignore it and treat the + // running activity as the task behind the overlay. + TopTaskTracker.CachedTaskInfo otherVisibleTask = gestureState.getRunningTask() == null + ? null + : gestureState.getRunningTask().otherVisibleTaskThisIsExcludedOver(); + 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 = diff --git a/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java b/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java index 48dadd1f34..9b2a449337 100644 --- a/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java +++ b/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java @@ -375,6 +375,7 @@ public class TaskViewSimulator implements TransformParams.BuilderProxy { mInversePositionMatrix.mapRect(mTempRectF); mTempRectF.roundOut(mTmpCropRect); + params.setProgress(1f - fullScreenProgress); params.applySurfaceParams(params.createSurfaceParams(this)); if (!DEBUG) { diff --git a/quickstep/src/com/android/quickstep/util/TransformParams.java b/quickstep/src/com/android/quickstep/util/TransformParams.java index 1cbded63b2..ca680db2d3 100644 --- a/quickstep/src/com/android/quickstep/util/TransformParams.java +++ b/quickstep/src/com/android/quickstep/util/TransformParams.java @@ -15,8 +15,8 @@ */ package com.android.quickstep.util; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; +import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; import android.util.FloatProperty; 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 mTargetAlpha; private float mCornerRadius; @@ -135,6 +136,7 @@ public class TransformParams { return this; } + /** Builds the SurfaceTransaction from the given BuilderProxy params. */ public SurfaceTransaction createSurfaceParams(BuilderProxy proxy) { RemoteAnimationTargets targets = mTargetSet; SurfaceTransaction transaction = new SurfaceTransaction(); @@ -150,8 +152,12 @@ public class TransformParams { if (activityType == ACTIVITY_TYPE_HOME) { mHomeBuilderProxy.onBuildTargetParams(builder, app, this); } else { - // Fade out Assistant overlay. - if (activityType == ACTIVITY_TYPE_ASSISTANT && app.isNotInRecents) { + // Fade out translucent overlay. + // 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); builder.setAlpha(1 - Interpolators.DECELERATE_QUINT .getInterpolation(progress)); diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index a2976a81f1..2a40ccfd4c 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -1010,14 +1010,6 @@ public class TaskView extends FrameLayout implements Reusable { mActivity.getStateManager(), recentsView, recentsView.getDepthController()); anim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - recentsView.runActionOnRemoteHandles( - (Consumer<RemoteTargetHandle>) remoteTargetHandle -> - remoteTargetHandle - .getTaskViewSimulator() - .setDrawsBelowRecents(false)); - } @Override public void onAnimationEnd(Animator animator) { |