Merge "Use visible activity for remote animation target if available." into tm-dev
This commit is contained in:
@@ -1197,7 +1197,10 @@ public class RecentsAnimationController implements DeathRecipient {
|
||||
* this is the target task, CLOSING otherwise).
|
||||
*/
|
||||
RemoteAnimationTarget createRemoteAnimationTarget(int overrideTaskId, int overrideMode) {
|
||||
final ActivityRecord topApp = mTask.getTopVisibleActivity();
|
||||
ActivityRecord topApp = mTask.getTopRealVisibleActivity();
|
||||
if (topApp == null) {
|
||||
topApp = mTask.getTopVisibleActivity();
|
||||
}
|
||||
final WindowState mainWindow = topApp != null
|
||||
? topApp.findMainWindow()
|
||||
: null;
|
||||
|
||||
@@ -3070,11 +3070,22 @@ class Task extends TaskFragment {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the top visible requested activity. The activity has been requested to be visible,
|
||||
* but it's possible that the activity has just been created, so no window is yet attached to
|
||||
* this activity.
|
||||
*/
|
||||
ActivityRecord getTopVisibleActivity() {
|
||||
return getActivity((r) -> {
|
||||
// skip hidden (or about to hide) apps
|
||||
return !r.mIsExiting && r.isClientVisible() && r.mVisibleRequested;
|
||||
});
|
||||
return getActivity((r) -> !r.mIsExiting && r.isClientVisible() && r.mVisibleRequested);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the top visible activity. The activity has a window on which contents are drawn.
|
||||
* However it's possible that the activity has already been requested to be invisible, but the
|
||||
* visibility is not yet committed.
|
||||
*/
|
||||
ActivityRecord getTopRealVisibleActivity() {
|
||||
return getActivity((r) -> !r.mIsExiting && r.isClientVisible() && r.isVisible());
|
||||
}
|
||||
|
||||
ActivityRecord getTopWaitSplashScreenActivity() {
|
||||
|
||||
@@ -61,6 +61,7 @@ import android.platform.test.annotations.Presubmit;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.IRecentsAnimationRunner;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.WindowManager.LayoutParams;
|
||||
import android.window.TaskSnapshot;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
@@ -161,6 +162,30 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
||||
assertFalse(mController.isAnimatingTask(hiddenActivity.getTask()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLaunchAndStartRecents_expectTargetAndVisible() throws Exception {
|
||||
mWm.setRecentsAnimationController(mController);
|
||||
final ActivityRecord homeActivity = createHomeActivity();
|
||||
final Task task = createTask(mDefaultDisplay);
|
||||
// Emulate that activity1 has just launched activity2, but app transition has not yet been
|
||||
// executed.
|
||||
final ActivityRecord activity1 = createActivityRecord(task);
|
||||
activity1.setVisible(true);
|
||||
activity1.mVisibleRequested = false;
|
||||
activity1.addWindow(createWindowState(new LayoutParams(TYPE_BASE_APPLICATION), activity1));
|
||||
|
||||
final ActivityRecord activity2 = createActivityRecord(task);
|
||||
activity2.setVisible(false);
|
||||
activity2.mVisibleRequested = true;
|
||||
|
||||
mDefaultDisplay.getConfiguration().windowConfiguration.setRotation(
|
||||
mDefaultDisplay.getRotation());
|
||||
initializeRecentsAnimationController(mController, homeActivity);
|
||||
mController.startAnimation();
|
||||
verify(mMockRunner, never()).onAnimationCanceled(null /* taskIds */,
|
||||
null /* taskSnapshots */);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWallpaperIncluded_expectTarget() throws Exception {
|
||||
mWm.setRecentsAnimationController(mController);
|
||||
|
||||
Reference in New Issue
Block a user