mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-28 07:46:55 +00:00
Merge "Fix gestures for exclude-from-recents + translucent tasks" into udc-qpr-dev
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user