Fix switch task flicker from reveal animation.
While prepareing reveal animation in core, the initial position will be set to 0,0 even when the window is shift by other insets. - Only splash screen need to apply reveal animation, so ignore the animation when removing task snapshot starting window. - Set the initial position after the animation leash just created. Fixes: 192333159 Test: Rotate device to landscape then use task switch to launch apps, testing for both hot and cold launch. Change-Id: I82d78822e0a44350a49ac4cee105f10790014982
This commit is contained in:
@@ -2252,6 +2252,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
}
|
||||
|
||||
final WindowManagerPolicy.StartingSurface surface;
|
||||
final StartingData startingData = mStartingData;
|
||||
if (mStartingData != null) {
|
||||
surface = mStartingSurface;
|
||||
mStartingData = null;
|
||||
@@ -2278,7 +2279,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
final Runnable removeSurface = () -> {
|
||||
ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Removing startingView=%s", surface);
|
||||
try {
|
||||
surface.remove(prepareAnimation);
|
||||
surface.remove(prepareAnimation && startingData.needRevealAnimation());
|
||||
} catch (Exception e) {
|
||||
Slog.w(TAG_WM, "Exception when removing starting window", e);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,11 @@ class SnapshotStartingData extends StartingData {
|
||||
mSnapshot);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean needRevealAnimation() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasImeSurface() {
|
||||
return mSnapshot.hasImeSurface();
|
||||
|
||||
@@ -58,4 +58,9 @@ class SplashScreenStartingData extends StartingData {
|
||||
mLogo, mWindowFlags, mMergedOverrideConfiguration,
|
||||
activity.getDisplayContent().getDisplayId());
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean needRevealAnimation() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,11 @@ public abstract class StartingData {
|
||||
*/
|
||||
abstract StartingSurface createStartingSurface(ActivityRecord activity);
|
||||
|
||||
/**
|
||||
* @return Whether to apply reveal animation when exiting the starting window.
|
||||
*/
|
||||
abstract boolean needRevealAnimation();
|
||||
|
||||
/** @see android.window.TaskSnapshot#hasImeSurface() */
|
||||
boolean hasImeSurface() {
|
||||
return false;
|
||||
|
||||
@@ -197,6 +197,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
|
||||
ANIMATION_TYPE_STARTING_REVEAL);
|
||||
windowAnimationLeash = adaptor.mAnimationLeash;
|
||||
mainFrame = mainWindow.getRelativeFrame();
|
||||
t.setPosition(windowAnimationLeash, mainFrame.left, mainFrame.top);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user