Merge "Changes in PopupWindow API"
diff --git a/api/current.txt b/api/current.txt
index 66a4bd0..f8a164d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -56297,6 +56297,7 @@
method public android.view.View getContentView();
method public float getElevation();
method @Nullable public android.transition.Transition getEnterTransition();
+ method @Nullable public android.graphics.Rect getEpicenterBounds();
method @Nullable public android.transition.Transition getExitTransition();
method public int getHeight();
method public int getInputMethodMode();
@@ -56309,30 +56310,37 @@
method public int getWindowLayoutType();
method public boolean isAboveAnchor();
method public boolean isAttachedInDecor();
+ method public boolean isClipToScreenEnabled();
method public boolean isClippingEnabled();
method public boolean isFocusable();
+ method public boolean isLayoutInScreenEnabled();
method public boolean isOutsideTouchable();
method public boolean isShowing();
method public boolean isSplitTouchEnabled();
+ method public boolean isTouchModal();
method public boolean isTouchable();
method public void setAnimationStyle(int);
method public void setAttachedInDecor(boolean);
method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setClipToScreenEnabled(boolean);
method public void setClippingEnabled(boolean);
method public void setContentView(android.view.View);
method public void setElevation(float);
method public void setEnterTransition(@Nullable android.transition.Transition);
+ method public void setEpicenterBounds(@Nullable android.graphics.Rect);
method public void setExitTransition(@Nullable android.transition.Transition);
method public void setFocusable(boolean);
method public void setHeight(int);
method public void setIgnoreCheekPress();
method public void setInputMethodMode(int);
+ method public void setLayoutInScreenEnabled(boolean);
method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
method public void setOutsideTouchable(boolean);
method public void setOverlapAnchor(boolean);
method public void setSoftInputMode(int);
method public void setSplitTouchEnabled(boolean);
method public void setTouchInterceptor(android.view.View.OnTouchListener);
+ method public void setTouchModal(boolean);
method public void setTouchable(boolean);
method public void setWidth(int);
method @Deprecated public void setWindowLayoutMode(int, int);
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 705a371..88d9380 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -264,7 +264,7 @@
private WeakReference<View> mAnchorRoot;
private boolean mIsAnchorRootAttached;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
private final OnScrollChangedListener mOnScrollChangedListener = this::alignToAnchor;
private final View.OnLayoutChangeListener mOnLayoutChangeListener =
@@ -476,22 +476,39 @@
}
/**
- * Sets the bounds used as the epicenter of the enter and exit transitions.
- * <p>
- * Transitions use a point or Rect, referred to as the epicenter, to orient
+ * <p>Returns bounds which are used as a center of the enter and exit transitions.<p/>
+ *
+ * <p>Transitions use Rect, referred to as the epicenter, to orient
* the direction of travel. For popup windows, the anchor view bounds are
- * used as the default epicenter.
- * <p>
- * See {@link Transition#setEpicenterCallback(EpicenterCallback)} for more
- * information about how transition epicenters.
+ * used as the default epicenter.</p>
+ *
+ * <p>See {@link Transition#setEpicenterCallback(EpicenterCallback)} for more
+ * information about how transition epicenters work.</p>
+ *
+ * @return bounds relative to anchor view, or {@code null} if not set
+ * @see #setEpicenterBounds(Rect)
+ */
+ @Nullable
+ public Rect getEpicenterBounds() {
+ return mEpicenterBounds;
+ }
+
+ /**
+ * <p>Sets the bounds used as the epicenter of the enter and exit transitions.</p>
+ *
+ * <p>Transitions use Rect, referred to as the epicenter, to orient
+ * the direction of travel. For popup windows, the anchor view bounds are
+ * used as the default epicenter.</p>
+ *
+ * <p>See {@link Transition#setEpicenterCallback(EpicenterCallback)} for more
+ * information about how transition epicenters work.</p>
*
* @param bounds the epicenter bounds relative to the anchor view, or
* {@code null} to use the default epicenter
- * @see #getTransitionEpicenter()
- * @hide
+ *
+ * @see #getEpicenterBounds()
*/
- @UnsupportedAppUsage
- public void setEpicenterBounds(Rect bounds) {
+ public void setEpicenterBounds(@Nullable Rect bounds) {
mEpicenterBounds = bounds;
}
@@ -865,12 +882,28 @@
}
/**
- * Clip this popup window to the screen, but not to the containing window.
+ * <p>Indicates whether this popup will be clipped to the screen and not to the
+ * containing window<p/>
*
- * @param enabled True to clip to the screen.
- * @hide
+ * @return true if popup will be clipped to the screen instead of the window, false otherwise
+ *
+ * @see #setClipToScreenEnabled(boolean)
*/
- @UnsupportedAppUsage
+ public boolean isClipToScreenEnabled() {
+ return mClipToScreen;
+ }
+
+ /**
+ * <p>Clip this popup window to the screen, but not to the containing window.</p>
+ *
+ * <p>If the popup is showing, calling this method will take effect only
+ * the next time the popup is shown or through a manual call to one of
+ * the {@link #update()} methods.</p>
+ *
+ * @param enabled true to clip to the screen.
+ *
+ * @see #isClipToScreenEnabled()
+ */
public void setClipToScreenEnabled(boolean enabled) {
mClipToScreen = enabled;
}
@@ -927,7 +960,8 @@
* for positioning.</p>
*
* @return true if the window will always be positioned in screen coordinates.
- * @hide
+ *
+ * @see #setLayoutInScreenEnabled(boolean)
*/
public boolean isLayoutInScreenEnabled() {
return mLayoutInScreen;
@@ -939,9 +973,9 @@
* This will cause the popup to be positioned in absolute screen coordinates.</p>
*
* @param enabled true if the popup should always be positioned in screen coordinates
- * @hide
+ *
+ * @see #isLayoutInScreenEnabled()
*/
- @UnsupportedAppUsage
public void setLayoutInScreenEnabled(boolean enabled) {
mLayoutInScreen = enabled;
}
@@ -1021,11 +1055,30 @@
}
/**
- * Set whether this window is touch modal or if outside touches will be sent to
- * other windows behind it.
- * @hide
+ * <p>Indicates whether outside touches will be sent to this window
+ * or other windows behind it<p/>
+ *
+ * @return true if touches will be sent to this window, false otherwise
+ *
+ * @see #setTouchModal(boolean)
*/
- @UnsupportedAppUsage
+ public boolean isTouchModal() {
+ return !mNotTouchModal;
+ }
+
+ /**
+ * <p>Set whether this window is touch modal or if outside touches will be sent to
+ * other windows behind it.<p/>
+ *
+ * <p>If the popup is showing, calling this method will take effect only
+ * the next time the popup is shown or through a manual call to one of
+ * the {@link #update()} methods.</p>
+ *
+ * @param touchModal true to sent all outside touches to this window,
+ * false to other windows behind it
+ *
+ * @see #isTouchModal()
+ */
public void setTouchModal(boolean touchModal) {
mNotTouchModal = !touchModal;
}
@@ -1454,7 +1507,7 @@
*
* @param p the layout parameters of the popup's content view
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
private void invokePopup(WindowManager.LayoutParams p) {
if (mContext != null) {
p.packageName = mContext.getPackageName();
@@ -2060,6 +2113,8 @@
* <li>{@link #setInputMethodMode(int)}</li>
* <li>{@link #setTouchable(boolean)}</li>
* <li>{@link #setAnimationStyle(int)}</li>
+ * <li>{@link #setTouchModal(boolean)} (boolean)}</li>
+ * <li>{@link #setClipToScreenEnabled(boolean)}</li>
* </ul>
*/
public void update() {