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

Commit 06d582d4 authored by Doris Liu's avatar Doris Liu
Browse files

Fix calls to Rect.intersect(Rect) in package com.android.server.wm

This CL checks for the return value for Rect.intersect(Rect) for whether
there is actually an intersection before taking the calling rect as the
intersection. In addtion, this CL handles the cases where there is no
intersection (Rect.intersect(Rect) returns false).

bug: 7368679
Change-Id: I7d5ef7059ac432170470a108c0d6dece230ec0b3
parent 63428ccd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -238,6 +238,7 @@ class DisplayContent {
            final TaskStack stack = win.getStack();
            if (win.isVisibleLw() && stack != null && stack != focusedStack) {
                mTmpRect.set(win.mVisibleFrame);
                // If no intersection, we need mTmpRect to be unmodified.
                mTmpRect.intersect(win.mVisibleInsets);
                mTouchExcludeRegion.op(mTmpRect, Region.Op.DIFFERENCE);
            }
+5 −1
Original line number Diff line number Diff line
@@ -144,7 +144,11 @@ public class TaskStack {
                bounds = mTmpRect;
                mFullscreen = true;
            } else {
                bounds.intersect(mTmpRect); // ensure bounds are entirely within the display rect
                // ensure bounds are entirely within the display rect
                if (!bounds.intersect(mTmpRect)) {
                    // Can't set bounds outside the containing display.. Sorry!
                    return false;
                }
                mFullscreen = mTmpRect.equals(bounds);
            }
        }
+10 −3
Original line number Diff line number Diff line
@@ -6221,7 +6221,10 @@ public class WindowManagerService extends IWindowManager.Stub
                        int bottom = wf.bottom - cr.bottom;
                        frame.union(left, top, right, bottom);
                        ws.getStackBounds(stackBounds);
                        frame.intersect(stackBounds);
                        if (!frame.intersect(stackBounds)) {
                            // Set frame empty if there's no intersection.
                            frame.setEmpty();
                        }
                    }

                    if (ws.mAppToken != null && ws.mAppToken.token == appToken &&
@@ -6268,12 +6271,16 @@ public class WindowManagerService extends IWindowManager.Stub

                if (!includeFullDisplay) {
                    // Constrain frame to the screen size.
                    frame.intersect(0, 0, dw, dh);
                    if (!frame.intersect(0, 0, dw, dh)) {
                        frame.setEmpty();
                    }
                } else {
                    // Caller just wants entire display.
                    frame.set(0, 0, dw, dh);
                }

                if (frame.isEmpty()) {
                    return null;
                }

                if (width < 0) {
                    width = frame.width();
+3 −1
Original line number Diff line number Diff line
@@ -534,7 +534,9 @@ final class WindowState implements WindowManagerPolicy.WindowState {
            }
            // Make sure the containing frame is within the content frame so we don't layout
            // resized window under screen decorations.
            mContainingFrame.intersect(cf);
            if (!mContainingFrame.intersect(cf)) {
                mContainingFrame.set(cf);
            }
            mDisplayFrame.set(mContainingFrame);
        } else {
            mContainingFrame.set(pf);