From b0bd3e7a04cf77f5df8bdfabd1421007cb1b17e1 Mon Sep 17 00:00:00 2001 From: Matvei Malkov Date: Fri, 8 Feb 2019 16:16:44 +0000 Subject: [PATCH] Epicenter API for ListPopupWindow Introduced epicenter API for ListPopupWindow to mirror the same API that we've made for PopupWindow (b/123768589). Also add mutability protection to PopupWindow epicenter rects Bug: b/124094855 Test: All widgets tests passed. getter / setter tests introduced in I648c169b67972c80befbeae9c37c2819eaad27d4 Change-Id: I2b79a16039d345c9c8893b815735a2811543cf60 --- api/current.txt | 2 ++ core/java/android/widget/ListPopupWindow.java | 21 +++++++++++++++---- core/java/android/widget/PopupWindow.java | 4 ++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/api/current.txt b/api/current.txt index 91f5cef85e563..c0d10a6bc20a5 100644 --- a/api/current.txt +++ b/api/current.txt @@ -56015,6 +56015,7 @@ package android.widget { method @Nullable public android.view.View getAnchorView(); method @StyleRes public int getAnimationStyle(); method @Nullable public android.graphics.drawable.Drawable getBackground(); + method @Nullable public android.graphics.Rect getEpicenterBounds(); method public int getHeight(); method public int getHorizontalOffset(); method public int getInputMethodMode(); @@ -56041,6 +56042,7 @@ package android.widget { method public void setBackgroundDrawable(@Nullable android.graphics.drawable.Drawable); method public void setContentWidth(int); method public void setDropDownGravity(int); + method public void setEpicenterBounds(@Nullable android.graphics.Rect); method public void setHeight(int); method public void setHorizontalOffset(int); method public void setInputMethodMode(int); diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index f9564b44e825b..25e5dd32c6b20 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -471,11 +471,24 @@ public class ListPopupWindow implements ShowableListMenu { * Specifies the anchor-relative bounds of the popup's transition * epicenter. * - * @param bounds anchor-relative bounds - * @hide + * @param bounds anchor-relative bounds, or {@code null} to use default epicenter + * + * @see #getEpicenterBounds() */ - public void setEpicenterBounds(Rect bounds) { - mEpicenterBounds = bounds; + public void setEpicenterBounds(@Nullable Rect bounds) { + mEpicenterBounds = bounds != null ? new Rect(bounds) : null; + } + + /** + * Returns bounds which are used as a popup's epicenter + * of the enter and exit transitions. + * + * @return bounds relative to anchor view, or {@code null} if not set + * @see #setEpicenterBounds(Rect) + */ + @Nullable + public Rect getEpicenterBounds() { + return mEpicenterBounds != null ? new Rect(mEpicenterBounds) : null; } /** diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 88d938082b05e..279829672c57c 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -490,7 +490,7 @@ public class PopupWindow { */ @Nullable public Rect getEpicenterBounds() { - return mEpicenterBounds; + return mEpicenterBounds != null ? new Rect(mEpicenterBounds) : null; } /** @@ -509,7 +509,7 @@ public class PopupWindow { * @see #getEpicenterBounds() */ public void setEpicenterBounds(@Nullable Rect bounds) { - mEpicenterBounds = bounds; + mEpicenterBounds = bounds != null ? new Rect(bounds) : null; } private Transition getTransition(int resId) {