summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-05-14 16:42:46 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-05-14 16:42:46 -0700
commit14ad07f604ecd08436680a046363d37952c278f6 (patch)
tree5e6e0ca27ec7206c67239071937158221ce468a2 /core
parenta35198117ed8ba356e814863066777ee9f37f8e1 (diff)
parent448ecf5a94bb8778c677f00dedd33b26ea7683e8 (diff)
downloadframeworks_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.java30
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;