diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-14 16:42:46 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-14 16:42:46 -0700 |
commit | 14ad07f604ecd08436680a046363d37952c278f6 (patch) | |
tree | 5e6e0ca27ec7206c67239071937158221ce468a2 /core | |
parent | a35198117ed8ba356e814863066777ee9f37f8e1 (diff) | |
parent | 448ecf5a94bb8778c677f00dedd33b26ea7683e8 (diff) | |
download | frameworks_base-14ad07f604ecd08436680a046363d37952c278f6.zip frameworks_base-14ad07f604ecd08436680a046363d37952c278f6.tar.gz frameworks_base-14ad07f604ecd08436680a046363d37952c278f6.tar.bz2 |
Merge change 1708 into donut
* changes:
Fixes #1853550. Prevent NPE when calling the PopupWindow() and PopupWindow(int, int) constructors. Instead, throw an IllegalStateException when trying to show a popup with no content view.
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/widget/PopupWindow.java | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index acd25ee..78c7bd8 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -73,8 +73,8 @@ public class PopupWindow { */ public static final int INPUT_METHOD_NOT_NEEDED = 2; - private final Context mContext; - private final WindowManager mWindowManager; + private Context mContext; + private WindowManager mWindowManager; private boolean mIsShowing; private boolean mIsDropdown; @@ -159,8 +159,7 @@ public class PopupWindow { */ public PopupWindow(Context context, AttributeSet attrs, int defStyle) { mContext = context; - mWindowManager = (WindowManager)context.getSystemService( - Context.WINDOW_SERVICE); + mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); TypedArray a = context.obtainStyledAttributes( @@ -273,11 +272,11 @@ public class PopupWindow { * @param height the popup's height * @param focusable true if the popup can be focused, false otherwise */ - public PopupWindow(View contentView, int width, int height, - boolean focusable) { - mContext = contentView.getContext(); - mWindowManager = (WindowManager)mContext.getSystemService( - Context.WINDOW_SERVICE); + public PopupWindow(View contentView, int width, int height, boolean focusable) { + if (contentView != null) { + mContext = contentView.getContext(); + mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + } setContentView(contentView); setWidth(width); setHeight(height); @@ -374,6 +373,14 @@ public class PopupWindow { } mContentView = contentView; + + if (mContext == null) { + mContext = mContentView.getContext(); + } + + if (mWindowManager == null) { + mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + } } /** @@ -748,6 +755,11 @@ public class PopupWindow { * @param p the layout parameters of the popup's content view */ private void preparePopup(WindowManager.LayoutParams p) { + if (mContentView == null || mContext == null || mWindowManager == null) { + throw new IllegalStateException("You must specify a valid content view by " + + "calling setContentView() before attempting to show the popup."); + } + if (mBackground != null) { final ViewGroup.LayoutParams layoutParams = mContentView.getLayoutParams(); int height = ViewGroup.LayoutParams.FILL_PARENT; |