Use all targets passed back for recents animation
* Previously we were removing all targets except for the app that was to be animated. That caused issues because we look for the home app to determine if the app leashes need to be drawn underneath or not. * Now (assuming at most two non-home app leashes will be sent) we add all the non-home targets along with the desired app target by excluding 1 of the 2 non-home apps Bug: 199936292 Merged-In: I252d6c663e9ca145ef394ac08d9a32da02d4a03b Change-Id: I252d6c663e9ca145ef394ac08d9a32da02d4a03b
This commit is contained in:
parent
9b3b2b9c7e
commit
f421ad2ef8
|
@ -77,7 +77,7 @@ public class RemoteTargetGluer {
|
|||
for (int i = 0; i < mRemoteTargetHandles.length; i++) {
|
||||
RemoteAnimationTargetCompat primaryTaskTarget = targets.apps[i];
|
||||
mRemoteTargetHandles[i].mTransformParams.setTargetSet(
|
||||
createRemoteAnimationTargetsForTarget(primaryTaskTarget, targets));
|
||||
createRemoteAnimationTargetsForTarget(targets, null));
|
||||
mRemoteTargetHandles[i].mTaskViewSimulator.setPreview(primaryTaskTarget, null);
|
||||
}
|
||||
return mRemoteTargetHandles;
|
||||
|
@ -95,47 +95,68 @@ public class RemoteTargetGluer {
|
|||
}
|
||||
|
||||
/**
|
||||
* Assigns the provided splitIDs to the {@link #mRemoteTargetHandles}, with index 0 will beint
|
||||
* Assigns the provided splitIDs to the {@link #mRemoteTargetHandles}, with index 0 will being
|
||||
* the left/top task, index 1 right/bottom
|
||||
*/
|
||||
public RemoteTargetHandle[] assignTargetsForSplitScreen(RemoteAnimationTargets targets,
|
||||
int[] splitIds) {
|
||||
RemoteAnimationTargetCompat primaryTaskTarget;
|
||||
RemoteAnimationTargetCompat secondaryTaskTarget;
|
||||
RemoteAnimationTargetCompat topLeftTarget; // only one set if single/fullscreen task
|
||||
RemoteAnimationTargetCompat bottomRightTarget;
|
||||
if (mRemoteTargetHandles.length == 1) {
|
||||
// If we're not in split screen, the splitIds count doesn't really matter since we
|
||||
// should always hit this case.
|
||||
mRemoteTargetHandles[0].mTransformParams.setTargetSet(targets);
|
||||
if (targets.apps.length > 0) {
|
||||
// Unclear why/when target.apps length == 0, but it sure does happen :(
|
||||
primaryTaskTarget = targets.apps[0];
|
||||
mRemoteTargetHandles[0].mTaskViewSimulator.setPreview(primaryTaskTarget, null);
|
||||
topLeftTarget = targets.apps[0];
|
||||
mRemoteTargetHandles[0].mTaskViewSimulator.setPreview(topLeftTarget, null);
|
||||
}
|
||||
} else {
|
||||
// split screen
|
||||
primaryTaskTarget = targets.findTask(splitIds[0]);
|
||||
secondaryTaskTarget = targets.findTask(splitIds[1]);
|
||||
topLeftTarget = targets.findTask(splitIds[0]);
|
||||
bottomRightTarget = targets.findTask(splitIds[1]);
|
||||
|
||||
// remoteTargetHandle[0] denotes topLeft task, so we pass in the bottomRight to exclude,
|
||||
// vice versa
|
||||
mStagedSplitBounds = new StagedSplitBounds(
|
||||
primaryTaskTarget.screenSpaceBounds,
|
||||
secondaryTaskTarget.screenSpaceBounds, splitIds[0], splitIds[1]);
|
||||
topLeftTarget.screenSpaceBounds,
|
||||
bottomRightTarget.screenSpaceBounds, splitIds[0], splitIds[1]);
|
||||
mRemoteTargetHandles[0].mTransformParams.setTargetSet(
|
||||
createRemoteAnimationTargetsForTarget(primaryTaskTarget, targets));
|
||||
mRemoteTargetHandles[0].mTaskViewSimulator.setPreview(primaryTaskTarget,
|
||||
createRemoteAnimationTargetsForTarget(targets, bottomRightTarget));
|
||||
mRemoteTargetHandles[0].mTaskViewSimulator.setPreview(topLeftTarget,
|
||||
mStagedSplitBounds);
|
||||
|
||||
mRemoteTargetHandles[1].mTransformParams.setTargetSet(
|
||||
createRemoteAnimationTargetsForTarget(secondaryTaskTarget, targets));
|
||||
mRemoteTargetHandles[1].mTaskViewSimulator.setPreview(secondaryTaskTarget,
|
||||
createRemoteAnimationTargetsForTarget(targets, topLeftTarget));
|
||||
mRemoteTargetHandles[1].mTaskViewSimulator.setPreview(bottomRightTarget,
|
||||
mStagedSplitBounds);
|
||||
}
|
||||
return mRemoteTargetHandles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that we aren't excluding ancillary targets such as home/recents
|
||||
*
|
||||
* @param targetToExclude Will be excluded from the resulting return value.
|
||||
* Pass in {@code null} to not exclude anything
|
||||
* @return RemoteAnimationTargets where all the app targets from the passed in
|
||||
* {@param targets} are included except {@param targetToExclude}
|
||||
*/
|
||||
private RemoteAnimationTargets createRemoteAnimationTargetsForTarget(
|
||||
RemoteAnimationTargetCompat target,
|
||||
RemoteAnimationTargets targets) {
|
||||
return new RemoteAnimationTargets(new RemoteAnimationTargetCompat[]{target},
|
||||
RemoteAnimationTargets targets,
|
||||
@Nullable RemoteAnimationTargetCompat targetToExclude) {
|
||||
int finalLength = targets.unfilteredApps.length - (targetToExclude == null ? 0 : 1);
|
||||
RemoteAnimationTargetCompat[] targetsWithoutExcluded =
|
||||
new RemoteAnimationTargetCompat[finalLength];
|
||||
int i = 0;
|
||||
for (RemoteAnimationTargetCompat targetCompat : targets.unfilteredApps) {
|
||||
if (targetCompat == targetToExclude) {
|
||||
continue;
|
||||
}
|
||||
targetsWithoutExcluded[i] = targetCompat;
|
||||
i++;
|
||||
}
|
||||
return new RemoteAnimationTargets(targetsWithoutExcluded,
|
||||
targets.wallpapers, targets.nonApps, targets.targetMode);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue