Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82e32620 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of [16174752, 16174880, 16170299] into sc-qpr1-d-release.

Change-Id: I5b745d8caf808dd9b8a385a6c3601ce9c616d66c
parents 86c4845b 0be8fde8
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -316,7 +316,8 @@ public final class SplashScreenView extends FrameLayout {
        }

        private SurfaceView createSurfaceView(@NonNull SplashScreenView view) {
            final SurfaceView surfaceView = new SurfaceView(view.getContext());
            final Context viewContext = view.getContext();
            final SurfaceView surfaceView = new SurfaceView(viewContext);
            surfaceView.setPadding(0, 0, 0, 0);
            surfaceView.setBackground(mIconBackground);
            if (mSurfacePackage == null) {
@@ -326,10 +327,10 @@ public final class SplashScreenView extends FrameLayout {
                                    + Thread.currentThread().getId());
                }

                SurfaceControlViewHost viewHost = new SurfaceControlViewHost(mContext,
                        mContext.getDisplay(),
                SurfaceControlViewHost viewHost = new SurfaceControlViewHost(viewContext,
                        viewContext.getDisplay(),
                        surfaceView.getHostToken());
                ImageView imageView = new ImageView(mContext);
                ImageView imageView = new ImageView(viewContext);
                imageView.setBackground(mIconDrawable);
                viewHost.setView(imageView, mIconSize, mIconSize);
                SurfaceControlViewHost.SurfacePackage surfacePackage = viewHost.getSurfacePackage();
+8 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.Slog;
import android.view.ContextThemeWrapper;
import android.view.SurfaceControl;
import android.view.View;
import android.window.SplashScreenView;
@@ -299,6 +300,11 @@ public class SplashscreenContentDrawer {
        }
    }

    /** Creates the wrapper with system theme to avoid unexpected styles from app. */
    ContextThemeWrapper createViewContextWrapper(Context appContext) {
        return new ContextThemeWrapper(appContext, mContext.getTheme());
    }

    /** The configuration of the splash screen window. */
    public static class SplashScreenWindowAttrs {
        private int mWindowBgResId = 0;
@@ -472,7 +478,8 @@ public class SplashscreenContentDrawer {
            }

            Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "fillViewWithIcon");
            final SplashScreenView.Builder builder = new SplashScreenView.Builder(mContext)
            final ContextThemeWrapper wrapper = createViewContextWrapper(mContext);
            final SplashScreenView.Builder builder = new SplashScreenView.Builder(wrapper)
                    .setBackgroundColor(mThemeColor)
                    .setOverlayDrawable(mOverlayDrawable)
                    .setIconSize(iconSize)
+13 −22
Original line number Diff line number Diff line
@@ -137,24 +137,11 @@ public class StartingSurfaceDrawer {
    private final SparseArray<SurfaceControlViewHost> mAnimatedSplashScreenSurfaceHosts =
            new SparseArray<>(1);

    /** Obtain proper context for showing splash screen on the provided display. */
    private Context getDisplayContext(Context context, int displayId) {
        if (displayId == DEFAULT_DISPLAY) {
            // The default context fits.
            return context;
    private Display getDisplay(int displayId) {
        return mDisplayManager.getDisplay(displayId);
    }

        final Display targetDisplay = mDisplayManager.getDisplay(displayId);
        if (targetDisplay == null) {
            // Failed to obtain the non-default display where splash screen should be shown,
            // lets not show at all.
            return null;
        }

        return context.createDisplayContext(targetDisplay);
    }

    private int getSplashScreenTheme(int splashScreenThemeResId, ActivityInfo activityInfo) {
    int getSplashScreenTheme(int splashScreenThemeResId, ActivityInfo activityInfo) {
        return splashScreenThemeResId != 0
                ? splashScreenThemeResId
                : activityInfo.getThemeResource() != 0 ? activityInfo.getThemeResource()
@@ -177,7 +164,7 @@ public class StartingSurfaceDrawer {

        final int displayId = taskInfo.displayId;
        final int taskId = taskInfo.taskId;
        Context context = mContext;

        // replace with the default theme if the application didn't set
        final int theme = getSplashScreenTheme(windowInfo.splashScreenThemeResId, activityInfo);
        if (DEBUG_SPLASH_SCREEN) {
@@ -186,13 +173,16 @@ public class StartingSurfaceDrawer {
                    + " suggestType=" + suggestType);
        }

        // Obtain proper context to launch on the right display.
        final Context displayContext = getDisplayContext(context, displayId);
        if (displayContext == null) {
        final Display display = getDisplay(displayId);
        if (display == null) {
            // Can't show splash screen on requested display, so skip showing at all.
            return;
        }
        context = displayContext;
        Context context = displayId == DEFAULT_DISPLAY
                ? mContext : mContext.createDisplayContext(display);
        if (context == null) {
            return;
        }
        if (theme != context.getThemeResId()) {
            try {
                context = context.createPackageContextAsUser(activityInfo.packageName,
@@ -303,7 +293,8 @@ public class StartingSurfaceDrawer {
        // Record whether create splash screen view success, notify to current thread after
        // create splash screen view finished.
        final SplashScreenViewSupplier viewSupplier = new SplashScreenViewSupplier();
        final FrameLayout rootLayout = new FrameLayout(context);
        final FrameLayout rootLayout = new FrameLayout(
                mSplashscreenContentDrawer.createViewContextWrapper(context));
        rootLayout.setPadding(0, 0, 0, 0);
        rootLayout.setFitsSystemWindows(false);
        final Runnable setViewSynchronized = () -> {
+7 −5
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static org.junit.Assert.assertNotEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -101,7 +102,6 @@ public class StartingSurfaceDrawerTests {

    static final class TestStartingSurfaceDrawer extends StartingSurfaceDrawer{
        int mAddWindowForTask = 0;
        int mViewThemeResId;

        TestStartingSurfaceDrawer(Context context, ShellExecutor splashScreenExecutor,
                TransactionPool pool) {
@@ -113,7 +113,6 @@ public class StartingSurfaceDrawerTests {
                View view, WindowManager wm, WindowManager.LayoutParams params, int suggestType) {
            // listen for addView
            mAddWindowForTask = taskId;
            mViewThemeResId = view.getContext().getThemeResId();
            // Do not wait for background color
            return false;
        }
@@ -183,12 +182,15 @@ public class StartingSurfaceDrawerTests {
        final int taskId = 1;
        final StartingWindowInfo windowInfo =
                createWindowInfo(taskId, 0);
        final int[] theme = new int[1];
        doAnswer(invocation -> theme[0] = (Integer) invocation.callRealMethod())
                .when(mStartingSurfaceDrawer).getSplashScreenTheme(eq(0), any());

        mStartingSurfaceDrawer.addSplashScreenStartingWindow(windowInfo, mBinder,
                STARTING_WINDOW_TYPE_SPLASH_SCREEN);
        waitHandlerIdle(mTestHandler);
        verify(mStartingSurfaceDrawer).addWindow(eq(taskId), eq(mBinder), any(), any(), any(),
                eq(STARTING_WINDOW_TYPE_SPLASH_SCREEN));
        assertNotEquals(mStartingSurfaceDrawer.mViewThemeResId, 0);
        verify(mStartingSurfaceDrawer).getSplashScreenTheme(eq(0), any());
        assertNotEquals(theme[0], 0);
    }

    @Test
+17 −12
Original line number Diff line number Diff line
@@ -145,14 +145,15 @@ class UnlockedScreenOffAnimationController @Inject constructor(
                .setDuration(duration.toLong())
                .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
                .alpha(1f)
                .withEndAction {
                .setListener(object : AnimatorListenerAdapter() {
                    override fun onAnimationEnd(animation: Animator?) {
                        aodUiAnimationPlaying = false

                        // Lock the keyguard if it was waiting for the screen off animation to end.
                        keyguardViewMediatorLazy.get().maybeHandlePendingLock()

                    // Tell the StatusBar to become keyguard for real - we waited on that since it
                    // is slow and would have caused the animation to jank.
                        // Tell the StatusBar to become keyguard for real - we waited on that since
                        // it is slow and would have caused the animation to jank.
                        statusBar.updateIsKeyguard()

                        // Run the callback given to us by the KeyguardVisibilityHelper.
@@ -160,7 +161,11 @@ class UnlockedScreenOffAnimationController @Inject constructor(

                        // Done going to sleep, reset this flag.
                        decidedToAnimateGoingToSleep = null

                        // We need to unset the listener. These are persistent for future animators
                        keyguardView.animate().setListener(null)
                    }
                })
                .start()
    }

Loading