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

Commit 54374f25 authored by Tiger Huang's avatar Tiger Huang
Browse files

Only apply rounded-corner animation on TYPE_BUILT_IN displays

Device manufacturers might only know the corner radius of their
devices, but cannot predict which display would be connected later
while configuring rounded_corner_radius. Also, a device might have
multiple built-in displays, so we apply rounded-corner animation on
all built-in displays.

Bug: 131040127
Test: Follow the reproduction steps in the bug.
Change-Id: I929645acc22541236e55f755d48677972b3aaee2
parents ea90bdc7 0aae6acf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ class AppWindowThumbnail implements Animatable {
        mSurfaceAnimator.startAnimation(t, new LocalAnimationAdapter(
                new WindowAnimationSpec(anim, position,
                        mAppToken.getDisplayContent().mAppTransition.canSkipFirstFrame(),
                        mAppToken.getWindowCornerRadiusForAnimation()),
                        mAppToken.getDisplayContent().getWindowCornerRadius()),
                mAppToken.mWmService.mSurfaceAnimationRunner), false /* hidden */);
    }

+1 −1
Original line number Diff line number Diff line
@@ -2556,7 +2556,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
                    // Only apply corner radius to animation if we're not in multi window mode.
                    // We don't want rounded corners when in pip or split screen.
                    final float windowCornerRadius = !inMultiWindowMode()
                            ? getWindowCornerRadiusForAnimation()
                            ? getDisplayContent().getWindowCornerRadius()
                            : 0;
                    adapter = new LocalAnimationAdapter(
                            new WindowAnimationSpec(a, mTmpPoint, mTmpRect,
+8 −0
Original line number Diff line number Diff line
@@ -554,6 +554,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
    // Last systemUiVisibility we dispatched to windows.
    private int mLastDispatchedSystemUiVisibility = 0;

    /** Corner radius that windows should have in order to match the display. */
    private final float mWindowCornerRadius;

    private final Consumer<WindowState> mUpdateWindowsForAnimator = w -> {
        WindowStateAnimator winAnimator = w.mWinAnimator;
        final AppWindowToken atoken = w.mAppToken;
@@ -914,6 +917,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
        if (mWmService.mSystemReady) {
            mDisplayPolicy.systemReady();
        }
        mWindowCornerRadius = mDisplayPolicy.getWindowCornerRadius();
        mDividerControllerLocked = new DockedStackDividerController(service, this);
        mPinnedStackControllerLocked = new PinnedStackController(service, this);

@@ -958,6 +962,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
        return mDisplayId;
    }

    float getWindowCornerRadius() {
        return mWindowCornerRadius;
    }

    WindowToken getWindowToken(IBinder binder) {
        return mTokenMap.get(binder);
    }
+12 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECOND
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.res.Configuration.UI_MODE_TYPE_CAR;
import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
import static android.view.Display.TYPE_BUILT_IN;
import static android.view.InsetsState.TYPE_TOP_BAR;
import static android.view.InsetsState.TYPE_TOP_GESTURES;
import static android.view.InsetsState.TYPE_TOP_TAPPABLE_ELEMENT;
@@ -157,6 +158,7 @@ import android.view.accessibility.AccessibilityManager;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.util.ScreenShapeHelper;
import com.android.internal.util.ScreenshotHelper;
import com.android.internal.util.function.TriConsumer;
@@ -2870,6 +2872,16 @@ public class DisplayPolicy {
                - statusBarHeight;
    }

    /**
     * Return corner radius in pixels that should be used on windows in order to cover the display.
     * The radius is only valid for built-in displays since the one who configures window corner
     * radius cannot know the corner radius of non-built-in display.
     */
    float getWindowCornerRadius() {
        return mDisplayContent.getDisplay().getType() == TYPE_BUILT_IN
                ? ScreenDecorationsUtils.getWindowCornerRadius(mContext.getResources()) : 0f;
    }

    boolean isShowingDreamLw() {
        return mShowingDream;
    }
+0 −5
Original line number Diff line number Diff line
@@ -240,7 +240,6 @@ import com.android.internal.os.BackgroundThread;
import com.android.internal.os.IResultReceiver;
import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.internal.policy.IShortcutService;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.util.LatencyTracker;
@@ -793,9 +792,6 @@ public class WindowManagerService extends IWindowManager.Stub
    final DisplayManager mDisplayManager;
    final ActivityTaskManagerService mAtmService;

    /** Corner radius that windows should have in order to match the display. */
    final float mWindowCornerRadius;

    /** Indicates whether this device supports wide color gamut / HDR rendering */
    private boolean mHasWideColorGamutSupport;
    private boolean mHasHdrSupport;
@@ -1020,7 +1016,6 @@ public class WindowManagerService extends IWindowManager.Stub
        mInputManager = inputManager; // Must be before createDisplayContentLocked.
        mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
        mDisplayWindowSettings = new DisplayWindowSettings(this);
        mWindowCornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context.getResources());

        mTransactionFactory = transactionFactory;
        mTransaction = mTransactionFactory.make();
Loading