Always do the app reveal animation when dismissing the splash screen

Let empty-style splash screen do reveal animation.
Also remove the extra animation duration if the icon is empty.

Bug: 190695897
Bug: 190695665
Test: manual
Test: atest SplashscreenTests
Change-Id: I8b3b52369c12fbddc32af8c40f37650cc84a88dd
This commit is contained in:
wilsonshih
2021-06-11 11:27:38 +08:00
parent aa12b6a492
commit 192aef77d7
4 changed files with 7 additions and 36 deletions

View File

@@ -85,7 +85,6 @@ public final class SplashScreenView extends FrameLayout {
| FLAG_TRANSLUCENT_NAVIGATION | FLAG_TRANSLUCENT_STATUS;
private boolean mNotCopyable;
private boolean mRevealAnimationSupported = true;
private int mInitBackgroundColor;
private int mInitIconBackgroundColor;
private View mIconView;
@@ -352,25 +351,6 @@ public final class SplashScreenView extends FrameLayout {
return !mNotCopyable;
}
/**
* If set to true, indicates to the system that this view can be dismissed by playing the
* Reveal animation.
* <p>
* If the exit animation is handled by the client, the animation won't be played anyway.
* @hide
*/
public void setRevealAnimationSupported(boolean support) {
mRevealAnimationSupported = support;
}
/**
* Whether this view support reveal animation.
* @hide
*/
public boolean isRevealAnimationSupported() {
return mRevealAnimationSupported;
}
/**
* Called when this {@link SplashScreenView} has been copied to be transferred to the client.
*

View File

@@ -85,7 +85,7 @@ public class SplashScreenExitAnimation implements Animator.AnimatorListener {
}
View iconView = view.getIconView();
if (iconView == null) {
if (iconView == null || iconView.getBackground() == null) {
mIconFadeOutDuration = 0;
mIconStartAlpha = 0;
mAppRevealDelay = 0;

View File

@@ -407,7 +407,6 @@ public class SplashscreenContentDrawer {
}
if (mEmptyView) {
splashScreenView.setNotCopyable();
splashScreenView.setRevealAnimationSupported(false);
}
splashScreenView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override

View File

@@ -34,7 +34,6 @@ import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.hardware.display.DisplayManager;
import android.os.IBinder;
import android.os.SystemProperties;
import android.os.Trace;
import android.os.UserHandle;
import android.util.Slog;
@@ -107,8 +106,6 @@ public class StartingSurfaceDrawer {
final SplashscreenContentDrawer mSplashscreenContentDrawer;
private Choreographer mChoreographer;
private static final boolean DEBUG_ENABLE_REVEAL_ANIMATION =
SystemProperties.getBoolean("persist.debug.enable_reveal_animation", true);
/**
* @param splashScreenExecutor The thread used to control add and remove starting window.
*/
@@ -445,24 +442,19 @@ public class StartingSurfaceDrawer {
if (DEBUG_SPLASH_SCREEN) {
Slog.v(TAG, "Removing splash screen window for task: " + taskId);
}
if (record.mContentView != null
&& record.mContentView.isRevealAnimationSupported()) {
if (record.mContentView != null) {
if (playRevealAnimation) {
if (DEBUG_ENABLE_REVEAL_ANIMATION) {
mSplashscreenContentDrawer.applyExitAnimation(record.mContentView,
leash, frame,
() -> removeWindowInner(record.mDecorView, true));
} else {
// using the default exit animation from framework
removeWindowInner(record.mDecorView, false);
}
mSplashscreenContentDrawer.applyExitAnimation(record.mContentView,
leash, frame,
() -> removeWindowInner(record.mDecorView, true));
} else {
// the SplashScreenView has been copied to client, hide the view to skip
// default exit animation
removeWindowInner(record.mDecorView, true);
}
} else {
// this is a blank splash screen, don't apply reveal animation
// shouldn't happen
Slog.e(TAG, "Found empty splash screen, remove!");
removeWindowInner(record.mDecorView, false);
}
}