Merge "Remove the timeout which used for cleanup splash screen" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4a1f799020
@@ -1627,6 +1627,18 @@ public class Activity extends ContextThemeWrapper
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the splash screen view if exist.
|
||||
* @hide
|
||||
*/
|
||||
public void detachSplashScreenView() {
|
||||
synchronized (this) {
|
||||
if (mSplashScreenView != null) {
|
||||
mSplashScreenView = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as {@link #onCreate(android.os.Bundle)} but called for those activities created with
|
||||
* the attribute {@link android.R.attr#persistableMode} set to
|
||||
|
||||
@@ -292,7 +292,6 @@ public final class ActivityThread extends ClientTransactionHandler
|
||||
/** Use background GC policy and default JIT threshold. */
|
||||
private static final int VM_PROCESS_STATE_JANK_IMPERCEPTIBLE = 1;
|
||||
|
||||
private static final int REMOVE_SPLASH_SCREEN_VIEW_TIMEOUT = 5000;
|
||||
/**
|
||||
* Denotes an invalid sequence number corresponding to a process state change.
|
||||
*/
|
||||
@@ -1956,8 +1955,6 @@ public final class ActivityThread extends ClientTransactionHandler
|
||||
public static final int INSTRUMENT_WITHOUT_RESTART = 170;
|
||||
public static final int FINISH_INSTRUMENTATION_WITHOUT_RESTART = 171;
|
||||
|
||||
public static final int REMOVE_SPLASH_SCREEN_VIEW = 172;
|
||||
|
||||
String codeToString(int code) {
|
||||
if (DEBUG_MESSAGES) {
|
||||
switch (code) {
|
||||
@@ -2006,8 +2003,6 @@ public final class ActivityThread extends ClientTransactionHandler
|
||||
case INSTRUMENT_WITHOUT_RESTART: return "INSTRUMENT_WITHOUT_RESTART";
|
||||
case FINISH_INSTRUMENTATION_WITHOUT_RESTART:
|
||||
return "FINISH_INSTRUMENTATION_WITHOUT_RESTART";
|
||||
case REMOVE_SPLASH_SCREEN_VIEW:
|
||||
return "REMOVE_SPLASH_SCREEN_VIEW";
|
||||
}
|
||||
}
|
||||
return Integer.toString(code);
|
||||
@@ -2204,9 +2199,6 @@ public final class ActivityThread extends ClientTransactionHandler
|
||||
case FINISH_INSTRUMENTATION_WITHOUT_RESTART:
|
||||
handleFinishInstrumentationWithoutRestart();
|
||||
break;
|
||||
case REMOVE_SPLASH_SCREEN_VIEW:
|
||||
handleRemoveSplashScreenView((ActivityClientRecord) msg.obj);
|
||||
break;
|
||||
}
|
||||
Object obj = msg.obj;
|
||||
if (obj instanceof SomeArgs) {
|
||||
@@ -4020,6 +4012,7 @@ public final class ActivityThread extends ClientTransactionHandler
|
||||
view.cacheRootWindow(r.window);
|
||||
view.makeSystemUIColorsTransparent();
|
||||
r.activity.mSplashScreenView = view;
|
||||
view.attachHostActivity(r.activity);
|
||||
view.requestLayout();
|
||||
// Ensure splash screen view is shown before remove the splash screen window.
|
||||
final ViewRootImpl impl = decorView.getViewRootImpl();
|
||||
@@ -4062,8 +4055,6 @@ public final class ActivityThread extends ClientTransactionHandler
|
||||
@Override
|
||||
public void handOverSplashScreenView(@NonNull ActivityClientRecord r) {
|
||||
if (r.activity.mSplashScreenView != null) {
|
||||
Message msg = mH.obtainMessage(H.REMOVE_SPLASH_SCREEN_VIEW, r);
|
||||
mH.sendMessageDelayed(msg, REMOVE_SPLASH_SCREEN_VIEW_TIMEOUT);
|
||||
synchronized (this) {
|
||||
if (mSplashScreenGlobal != null) {
|
||||
mSplashScreenGlobal.dispatchOnExitAnimation(r.token,
|
||||
@@ -4073,16 +4064,6 @@ public final class ActivityThread extends ClientTransactionHandler
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Force remove splash screen view.
|
||||
*/
|
||||
private void handleRemoveSplashScreenView(@NonNull ActivityClientRecord r) {
|
||||
if (r.activity.mSplashScreenView != null) {
|
||||
r.activity.mSplashScreenView.remove();
|
||||
r.activity.mSplashScreenView = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cycle activity through onPause and onUserLeaveHint so that PIP is entered if supported, then
|
||||
* return to its previous state. This allows activities that rely on onUserLeaveHint instead of
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.annotation.ColorInt;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.TestApi;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
@@ -46,8 +47,6 @@ import android.widget.FrameLayout;
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.policy.DecorView;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* <p>The view which allows an activity to customize its splash screen exit animation.</p>
|
||||
*
|
||||
@@ -79,8 +78,8 @@ public final class SplashScreenView extends FrameLayout {
|
||||
|
||||
private Animatable mAnimatableIcon;
|
||||
private ValueAnimator mAnimator;
|
||||
private Runnable mAnimationFinishListener;
|
||||
private Consumer<Canvas> mOnDrawCallback;
|
||||
// The host activity when transfer view to it.
|
||||
private Activity mHostActivity;
|
||||
// cache original window and status
|
||||
private Window mWindow;
|
||||
private boolean mDrawBarBackground;
|
||||
@@ -334,6 +333,17 @@ public final class SplashScreenView extends FrameLayout {
|
||||
restoreSystemUIColors();
|
||||
mWindow = null;
|
||||
}
|
||||
if (mHostActivity != null) {
|
||||
mHostActivity.detachSplashScreenView();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when this view is attached to an activity.
|
||||
* @hide
|
||||
*/
|
||||
public void attachHostActivity(Activity activity) {
|
||||
mHostActivity = activity;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -69,9 +69,6 @@ public class StartingSurfaceDrawer {
|
||||
private final ShellExecutor mSplashScreenExecutor;
|
||||
private final SplashscreenContentDrawer mSplashscreenContentDrawer;
|
||||
|
||||
// TODO(b/131727939) remove this when clearing ActivityRecord
|
||||
private static final int REMOVE_WHEN_TIMEOUT = 2000;
|
||||
|
||||
public StartingSurfaceDrawer(Context context, ShellExecutor splashScreenExecutor,
|
||||
TransactionPool pool) {
|
||||
mContext = context;
|
||||
@@ -295,12 +292,8 @@ public class StartingSurfaceDrawer {
|
||||
TaskSnapshot snapshot) {
|
||||
final int taskId = startingWindowInfo.taskInfo.taskId;
|
||||
final TaskSnapshotWindow surface = TaskSnapshotWindow.create(startingWindowInfo, appToken,
|
||||
snapshot, mSplashScreenExecutor,
|
||||
() -> removeWindowNoAnimate(taskId));
|
||||
mSplashScreenExecutor.executeDelayed(() -> removeWindowNoAnimate(taskId),
|
||||
REMOVE_WHEN_TIMEOUT);
|
||||
final StartingWindowRecord tView =
|
||||
new StartingWindowRecord(null/* decorView */, surface);
|
||||
snapshot, mSplashScreenExecutor, () -> removeWindowNoAnimate(taskId));
|
||||
final StartingWindowRecord tView = new StartingWindowRecord(null/* decorView */, surface);
|
||||
mStartingWindowRecords.put(taskId, tView);
|
||||
}
|
||||
|
||||
@@ -354,8 +347,6 @@ public class StartingSurfaceDrawer {
|
||||
}
|
||||
if (shouldSaveView) {
|
||||
removeWindowNoAnimate(taskId);
|
||||
mSplashScreenExecutor.executeDelayed(
|
||||
() -> removeWindowNoAnimate(taskId), REMOVE_WHEN_TIMEOUT);
|
||||
saveSplashScreenRecord(taskId, view);
|
||||
}
|
||||
return shouldSaveView;
|
||||
@@ -392,7 +383,6 @@ public class StartingSurfaceDrawer {
|
||||
if (leash != null || playRevealAnimation) {
|
||||
mSplashscreenContentDrawer.applyExitAnimation(record.mContentView,
|
||||
leash, frame, record.isEarlyExit(), exitFinish);
|
||||
mSplashScreenExecutor.executeDelayed(exitFinish, REMOVE_WHEN_TIMEOUT);
|
||||
} else {
|
||||
// the SplashScreenView has been copied to client, skip default exit
|
||||
// animation
|
||||
|
||||
Reference in New Issue
Block a user