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.
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 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 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 @@
      * @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 @@
         }
 
         mContentView = contentView;
+
+        if (mContext == null) {
+            mContext = mContentView.getContext();
+        }
+
+        if (mWindowManager == null) {
+            mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
+        }
     }
 
     /**
@@ -748,6 +755,11 @@
      * @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;