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

Commit f2bf2bec authored by Chet Haase's avatar Chet Haase Committed by Android (Google) Code Review
Browse files

Merge "Fix issue #5384631: hw windows not resizing correctly"

parents ad9c5718 40e0383d
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -183,6 +183,22 @@ public abstract class HardwareRenderer {
     */
    abstract void setup(int width, int height);

    /**
     * Gets the current width of the surface. This is the width that the surface
     * was last set to in a call to {@link #setup(int, int)}.
     *
     * @return the current width of the surface
     */
    abstract int getWidth();

    /**
     * Gets the current height of the surface. This is the height that the surface
     * was last set to in a call to {@link #setup(int, int)}.
     *
     * @return the current width of the surface
     */
    abstract int getHeight();

    /**
     * Interface used to receive callbacks whenever a view is drawn by
     * a hardware renderer instance.
@@ -362,6 +378,7 @@ public abstract class HardwareRenderer {
        static EGLDisplay sEglDisplay;
        static EGLConfig sEglConfig;
        static final Object[] sEglLock = new Object[0];
        int mWidth = -1, mHeight = -1;

        static final ThreadLocal<EGLContext> sEglContextStorage = new ThreadLocal<EGLContext>();

@@ -714,7 +731,19 @@ public abstract class HardwareRenderer {
        void setup(int width, int height) {
            if (validate()) {
                mCanvas.setViewport(width, height);
                mWidth = width;
                mHeight = height;
            }
        }

        @Override
        int getWidth() {
            return mWidth;
        }

        @Override
        int getHeight() {
            return mHeight;
        }

        boolean canDraw() {
+9 −9
Original line number Diff line number Diff line
@@ -860,7 +860,6 @@ public final class ViewRootImpl extends Handler implements ViewParent,
        CompatibilityInfo compatibilityInfo = mCompatibilityInfo.get();
        if (compatibilityInfo.supportsScreen() == mLastInCompatMode) {
            params = lp;
            windowAttributesChanges |= WindowManager.LayoutParams.BUFFER_CHANGED;
            fullRedrawNeeded = true;
            mLayoutRequested = true;
            if (mLastInCompatMode) {
@@ -1078,7 +1077,6 @@ public final class ViewRootImpl extends Handler implements ViewParent,
                            ~WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST) |
                            resizeMode;
                    params = lp;
                    windowAttributesChanges |= WindowManager.LayoutParams.BUFFER_CHANGED;
                }
            }
        }
@@ -1375,15 +1373,17 @@ public final class ViewRootImpl extends Handler implements ViewParent,
                }
            }

            if (hwInitialized || ((windowShouldResize || (params != null &&
                    (windowAttributesChanges & WindowManager.LayoutParams.BUFFER_CHANGED) != 0)) &&
                    mAttachInfo.mHardwareRenderer != null &&
                    mAttachInfo.mHardwareRenderer.isEnabled())) {
            if (mAttachInfo.mHardwareRenderer != null &&
                    mAttachInfo.mHardwareRenderer.isEnabled()) {
                if (hwInitialized || windowShouldResize ||
                        mWidth != mAttachInfo.mHardwareRenderer.getWidth() ||
                        mHeight != mAttachInfo.mHardwareRenderer.getHeight()) {
                    mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight);
                if (!hwInitialized && mAttachInfo.mHardwareRenderer.isEnabled()) {
                    if (!hwInitialized) {
                        mAttachInfo.mHardwareRenderer.invalidate(mHolder);
                    }
                }
            }

            if (!mStopped) {
                boolean focusChangedDueToTouchMode = ensureTouchModeLocally(
+10 −12
Original line number Diff line number Diff line
@@ -1260,8 +1260,6 @@ public interface WindowManager extends ViewManager {
        /** {@hide} */
        public static final int PRIVATE_FLAGS_CHANGED = 1<<16;
        /** {@hide} */
        public static final int BUFFER_CHANGED = 1<<17;
        /** {@hide} */
        public static final int EVERYTHING_CHANGED = 0xffffffff;

        // internal buffer to backup/restore parameters under compatibility mode.
@@ -1272,11 +1270,11 @@ public interface WindowManager extends ViewManager {
    
            if (width != o.width) {
                width = o.width;
                changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
                changes |= LAYOUT_CHANGED;
            }
            if (height != o.height) {
                height = o.height;
                changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
                changes |= LAYOUT_CHANGED;
            }
            if (x != o.x) {
                x = o.x;
@@ -1288,19 +1286,19 @@ public interface WindowManager extends ViewManager {
            }
            if (horizontalWeight != o.horizontalWeight) {
                horizontalWeight = o.horizontalWeight;
                changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
                changes |= LAYOUT_CHANGED;
            }
            if (verticalWeight != o.verticalWeight) {
                verticalWeight = o.verticalWeight;
                changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
                changes |= LAYOUT_CHANGED;
            }
            if (horizontalMargin != o.horizontalMargin) {
                horizontalMargin = o.horizontalMargin;
                changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
                changes |= LAYOUT_CHANGED;
            }
            if (verticalMargin != o.verticalMargin) {
                verticalMargin = o.verticalMargin;
                changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
                changes |= LAYOUT_CHANGED;
            }
            if (type != o.type) {
                type = o.type;
@@ -1308,7 +1306,7 @@ public interface WindowManager extends ViewManager {
            }
            if (flags != o.flags) {
                flags = o.flags;
                changes |= FLAGS_CHANGED | BUFFER_CHANGED;
                changes |= FLAGS_CHANGED;
            }
            if (privateFlags != o.privateFlags) {
                privateFlags = o.privateFlags;
@@ -1320,11 +1318,11 @@ public interface WindowManager extends ViewManager {
            }
            if (gravity != o.gravity) {
                gravity = o.gravity;
                changes |= LAYOUT_CHANGED | BUFFER_CHANGED;
                changes |= LAYOUT_CHANGED;
            }
            if (format != o.format) {
                format = o.format;
                changes |= FORMAT_CHANGED | BUFFER_CHANGED;
                changes |= FORMAT_CHANGED;
            }
            if (windowAnimations != o.windowAnimations) {
                windowAnimations = o.windowAnimations;
@@ -1363,7 +1361,7 @@ public interface WindowManager extends ViewManager {
    
            if (screenOrientation != o.screenOrientation) {
                screenOrientation = o.screenOrientation;
                changes |= SCREEN_ORIENTATION_CHANGED | BUFFER_CHANGED;
                changes |= SCREEN_ORIENTATION_CHANGED;
            }

            if (systemUiVisibility != o.systemUiVisibility