Merge "Allow apply animation to ActivityRecord after transfer starting window." into rvc-dev am: 3ef98ae110 am: d3c62efd84
Change-Id: Ic619f169d4b5d06a17c4ed741352bdc53c0ffec9
This commit is contained in:
@@ -570,7 +570,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
private final WindowState.UpdateReportedVisibilityResults mReportedVisibilityResults =
|
private final WindowState.UpdateReportedVisibilityResults mReportedVisibilityResults =
|
||||||
new WindowState.UpdateReportedVisibilityResults();
|
new WindowState.UpdateReportedVisibilityResults();
|
||||||
|
|
||||||
boolean mUseTransferredAnimation;
|
private boolean mUseTransferredAnimation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #currentLaunchCanTurnScreenOn()
|
* @see #currentLaunchCanTurnScreenOn()
|
||||||
@@ -3366,12 +3366,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
}
|
}
|
||||||
setClientVisible(fromActivity.mClientVisible);
|
setClientVisible(fromActivity.mClientVisible);
|
||||||
|
|
||||||
transferAnimation(fromActivity);
|
if (fromActivity.isAnimating()) {
|
||||||
|
transferAnimation(fromActivity);
|
||||||
|
|
||||||
// When transferring an animation, we no longer need to apply an animation to the
|
// When transferring an animation, we no longer need to apply an animation to
|
||||||
// the token we transfer the animation over. Thus, set this flag to indicate we've
|
// the token we transfer the animation over. Thus, set this flag to indicate
|
||||||
// transferred the animation.
|
// we've transferred the animation.
|
||||||
mUseTransferredAnimation = true;
|
mUseTransferredAnimation = true;
|
||||||
|
}
|
||||||
|
|
||||||
mWmService.updateFocusedWindowLocked(
|
mWmService.updateFocusedWindowLocked(
|
||||||
UPDATE_FOCUS_WILL_PLACE_SURFACES, true /*updateInputWindows*/);
|
UPDATE_FOCUS_WILL_PLACE_SURFACES, true /*updateInputWindows*/);
|
||||||
|
|||||||
@@ -31,10 +31,12 @@ import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
|
|||||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
||||||
|
import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
|
||||||
|
|
||||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||||
|
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
||||||
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
|
||||||
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
|
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
|
||||||
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_BEFORE_ANIM;
|
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_BEFORE_ANIM;
|
||||||
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
|
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
|
||||||
@@ -59,6 +61,8 @@ import android.view.WindowManager;
|
|||||||
import androidx.test.filters.FlakyTest;
|
import androidx.test.filters.FlakyTest;
|
||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
|
import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -365,6 +369,30 @@ public class AppWindowTokenTests extends WindowTestsBase {
|
|||||||
assertHasStartingWindow(activity2);
|
assertHasStartingWindow(activity2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTransferStartingWindowCanAnimate() {
|
||||||
|
final ActivityRecord activity1 = createIsolatedTestActivityRecord();
|
||||||
|
final ActivityRecord activity2 = createIsolatedTestActivityRecord();
|
||||||
|
activity1.addStartingWindow(mPackageName,
|
||||||
|
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true,
|
||||||
|
false, false);
|
||||||
|
waitUntilHandlersIdle();
|
||||||
|
activity2.addStartingWindow(mPackageName,
|
||||||
|
android.R.style.Theme, null, "Test", 0, 0, 0, 0, activity1.appToken.asBinder(),
|
||||||
|
true, true, false, true, false, false);
|
||||||
|
waitUntilHandlersIdle();
|
||||||
|
assertNoStartingWindow(activity1);
|
||||||
|
assertHasStartingWindow(activity2);
|
||||||
|
|
||||||
|
// Assert that bottom activity is allowed to do animation.
|
||||||
|
doReturn(true).when(activity2).okToAnimate();
|
||||||
|
doReturn(true).when(activity2).isAnimating();
|
||||||
|
final OnAnimationFinishedCallback onAnimationFinishedCallback =
|
||||||
|
mock(OnAnimationFinishedCallback.class);
|
||||||
|
assertTrue(activity2.applyAnimation(null, TRANSIT_ACTIVITY_OPEN, true, false,
|
||||||
|
onAnimationFinishedCallback));
|
||||||
|
}
|
||||||
|
|
||||||
private ActivityRecord createIsolatedTestActivityRecord() {
|
private ActivityRecord createIsolatedTestActivityRecord() {
|
||||||
final ActivityStack taskStack = createTaskStackOnDisplay(mDisplayContent);
|
final ActivityStack taskStack = createTaskStackOnDisplay(mDisplayContent);
|
||||||
final Task task = createTaskInStack(taskStack, 0 /* userId */);
|
final Task task = createTaskInStack(taskStack, 0 /* userId */);
|
||||||
|
|||||||
Reference in New Issue
Block a user