summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-10-05 23:19:19 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-10-05 23:19:19 +0000
commit4a28f3b1644eabc9c3d82de2f3409c4663adf6f0 (patch)
tree1cd9e8c40dd32222a2b6327a8c3dc289b0a316a2
parent99922846b6f78300266c4ae80413540969a094e8 (diff)
parentbf4a08acefeee7846f84df488a9d519816b40f78 (diff)
downloadLauncher3-4a28f3b1644eabc9c3d82de2f3409c4663adf6f0.tar.gz
Snap for 10909010 from bf4a08acefeee7846f84df488a9d519816b40f78 to udc-qpr1-release
Change-Id: Ia915aac23b5831ad65b7f214e83320cfb41db3fe
-rw-r--r--OWNERS1
-rw-r--r--quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java5
-rw-r--r--quickstep/src/com/android/quickstep/RecentTasksList.java18
-rw-r--r--quickstep/src/com/android/quickstep/TopTaskTracker.java20
-rw-r--r--quickstep/src/com/android/quickstep/TouchInteractionService.java20
-rw-r--r--quickstep/src/com/android/quickstep/util/TaskViewSimulator.java1
-rw-r--r--quickstep/src/com/android/quickstep/util/TransformParams.java12
-rw-r--r--quickstep/src/com/android/quickstep/views/TaskView.java8
8 files changed, 59 insertions, 26 deletions
diff --git a/OWNERS b/OWNERS
index 7834396770..353ac8ed34 100644
--- a/OWNERS
+++ b/OWNERS
@@ -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) {