diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/InsetsSource.java | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/core/java/android/view/InsetsSource.java b/core/java/android/view/InsetsSource.java index 719f649cb5a2..294faaf0b5c8 100644 --- a/core/java/android/view/InsetsSource.java +++ b/core/java/android/view/InsetsSource.java @@ -18,6 +18,7 @@ package android.view; import static android.view.InsetsState.ITYPE_IME; +import android.annotation.NonNull; import android.annotation.Nullable; import android.graphics.Insets; import android.graphics.Rect; @@ -114,7 +115,7 @@ public class InsetsSource implements Parcelable { if (!ignoreVisibility && !mVisible) { return Insets.NONE; } - if (!mTmpFrame.setIntersect(frame, relativeFrame)) { + if (!getIntersection(frame, relativeFrame, mTmpFrame)) { return Insets.NONE; } @@ -144,12 +145,33 @@ public class InsetsSource implements Parcelable { } } + /** + * Outputs the intersection of two rectangles. The shared edges will also be counted in the + * intersection. + * + * @param a The first rectangle being intersected with. + * @param b The second rectangle being intersected with. + * @param out The rectangle which represents the intersection. + * @return {@code true} if there is any intersection. + */ + private static boolean getIntersection(@NonNull Rect a, @NonNull Rect b, @NonNull Rect out) { + if (a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom) { + out.left = Math.max(a.left, b.left); + out.top = Math.max(a.top, b.top); + out.right = Math.min(a.right, b.right); + out.bottom = Math.min(a.bottom, b.bottom); + return true; + } + out.setEmpty(); + return false; + } + public void dump(String prefix, PrintWriter pw) { pw.print(prefix); pw.print("InsetsSource type="); pw.print(InsetsState.typeToString(mType)); pw.print(" frame="); pw.print(mFrame.toShortString()); if (mVisibleFrame != null) { - pw.print(" visibleFrmae="); pw.print(mVisibleFrame.toShortString()); + pw.print(" visibleFrame="); pw.print(mVisibleFrame.toShortString()); } pw.print(" visible="); pw.print(mVisible); pw.println(); |
