Fix adb am display-size.

There were several problems resulting from the use of
mDefaultDisplay before displayReady() was called.
As it happens, we don't need mDefaultDisplay becase we
can get the information from the default display content.

Also modified the Configuration calculations to never
choose a SQUARE orientation.  The constant is deprecated
and documented as no longer used, so we should make that
be the case.

Change-Id: I326ed7100030a81e24411e898e5243f28895ea22
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index a7ea01d..17f4a96 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -434,6 +434,7 @@
 
     final float[] mTmpFloats = new float[9];
 
+    boolean mDisplayReady;
     boolean mSafeMode;
     boolean mDisplayEnabled = false;
     boolean mSystemBooted = false;
@@ -503,8 +504,6 @@
     final ArrayList<AppWindowToken> mOpeningApps = new ArrayList<AppWindowToken>();
     final ArrayList<AppWindowToken> mClosingApps = new ArrayList<AppWindowToken>();
 
-    Display mDefaultDisplay;
-
     boolean mIsTouchDevice;
 
     final DisplayMetrics mDisplayMetrics = new DisplayMetrics();
@@ -2085,7 +2084,7 @@
         long origId;
 
         synchronized(mWindowMap) {
-            if (mDefaultDisplay == null) {
+            if (!mDisplayReady) {
                 throw new IllegalStateException("Display has not been initialialized");
             }
 
@@ -5604,8 +5603,10 @@
                     ">>> OPEN TRANSACTION showStrictModeViolation");
             Surface.openTransaction();
             try {
+                // TODO(multi-display): support multiple displays
                 if (mStrictModeFlash == null) {
-                    mStrictModeFlash = new StrictModeFlash(mDefaultDisplay, mFxSession);
+                    mStrictModeFlash = new StrictModeFlash(
+                            getDefaultDisplayContent().getDisplay(), mFxSession);
                 }
                 mStrictModeFlash.setVisibility(on);
             } finally {
@@ -5718,7 +5719,7 @@
             }
 
             // The screenshot API does not apply the current screen rotation.
-            rot = mDefaultDisplay.getRotation();
+            rot = getDefaultDisplayContent().getDisplay().getRotation();
             int fw = frame.width();
             int fh = frame.height();
 
@@ -6751,7 +6752,7 @@
     }
 
     boolean computeScreenConfigurationLocked(Configuration config) {
-        if (mDefaultDisplay == null) {
+        if (!mDisplayReady) {
             return false;
         }
 
@@ -6785,13 +6786,8 @@
         }
 
         if (config != null) {
-            int orientation = Configuration.ORIENTATION_SQUARE;
-            if (dw < dh) {
-                orientation = Configuration.ORIENTATION_PORTRAIT;
-            } else if (dw > dh) {
-                orientation = Configuration.ORIENTATION_LANDSCAPE;
-            }
-            config.orientation = orientation;
+            config.orientation = (dw <= dh) ? Configuration.ORIENTATION_PORTRAIT :
+                    Configuration.ORIENTATION_LANDSCAPE;
         }
 
         // Update application display metrics.
@@ -6958,9 +6954,12 @@
             synchronized (mWindowMap) {
                 try {
                     if (mDragState == null) {
+                        // TODO(multi-display): support other displays
+                        final DisplayContent displayContent = getDefaultDisplayContent();
+                        final Display display = displayContent.getDisplay();
                         Surface surface = new Surface(session, "drag surface",
                                 width, height, PixelFormat.TRANSLUCENT, Surface.HIDDEN);
-                        surface.setLayerStack(mDefaultDisplay.getLayerStack());
+                        surface.setLayerStack(display.getLayerStack());
                         if (SHOW_TRANSACTIONS) Slog.i(TAG, "  DRAG "
                                 + surface + ": CREATE");
                         outSurface.copyFrom(surface);
@@ -7102,26 +7101,28 @@
     }
 
     public void displayReady() {
-        WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
-        final Display display = wm.getDefaultDisplay();
-        displayReady(display.getDisplayId());
+        displayReady(Display.DEFAULT_DISPLAY);
 
         synchronized(mWindowMap) {
-            readForcedDisplaySizeAndDensityLocked(getDefaultDisplayContent());
+            final DisplayContent displayContent = getDefaultDisplayContent();
+            final Display display = displayContent.getDisplay();
+            readForcedDisplaySizeAndDensityLocked(displayContent);
 
-            mDefaultDisplay = display;
+            mDisplayReady = true;
             mIsTouchDevice = mContext.getPackageManager().hasSystemFeature(
-                PackageManager.FEATURE_TOUCHSCREEN);
+                    PackageManager.FEATURE_TOUCHSCREEN);
 
             mAnimator.initializeLocked(display.getLayerStack());
 
             final DisplayInfo displayInfo = getDefaultDisplayInfo();
-            mAnimator.setDisplayDimensions(displayInfo.logicalWidth, displayInfo.logicalHeight,
-                displayInfo.appWidth, displayInfo.appHeight);
+            mAnimator.setDisplayDimensions(
+                    displayInfo.logicalWidth, displayInfo.logicalHeight,
+                    displayInfo.appWidth, displayInfo.appHeight);
 
-            final DisplayContent displayContent = getDefaultDisplayContent();
-            mPolicy.setInitialDisplaySize(mDefaultDisplay, displayContent.mInitialDisplayWidth,
-                    displayContent.mInitialDisplayHeight, displayContent.mInitialDisplayDensity);
+            mPolicy.setInitialDisplaySize(displayContent.getDisplay(),
+                    displayContent.mInitialDisplayWidth,
+                    displayContent.mInitialDisplayHeight,
+                    displayContent.mInitialDisplayDensity);
         }
 
         try {
@@ -7802,6 +7803,7 @@
         }
         // TODO(multidisplay): For now rotations are only main screen.
         final DisplayContent displayContent = getDefaultDisplayContent();
+        final Display display = displayContent.getDisplay();
         if (displayContent.mBaseDisplayWidth < displayContent.mInitialDisplayWidth
                 || displayContent.mBaseDisplayHeight < displayContent.mInitialDisplayHeight) {
             int initW, initH, baseW, baseH;
@@ -7829,7 +7831,7 @@
             Rect inner = new Rect(0, 0, baseW, baseH);
             try {
                 mBlackFrame = new BlackFrame(mFxSession, outer, inner, MASK_LAYER,
-                        mDefaultDisplay.getLayerStack());
+                        display.getLayerStack());
             } catch (Surface.OutOfResourcesException e) {
             }
         }
@@ -7929,8 +7931,10 @@
 
     private void reconfigureDisplayLocked(DisplayContent displayContent) {
         // TODO: Multidisplay: for now only use with default display.
-        mPolicy.setInitialDisplaySize(mDefaultDisplay, displayContent.mBaseDisplayWidth,
-                displayContent.mBaseDisplayHeight, displayContent.mBaseDisplayDensity);
+        mPolicy.setInitialDisplaySize(displayContent.getDisplay(),
+                displayContent.mBaseDisplayWidth,
+                displayContent.mBaseDisplayHeight,
+                displayContent.mBaseDisplayDensity);
 
         displayContent.layoutNeeded = true;
 
@@ -8154,7 +8158,7 @@
             return;
         }
         
-        if (mDefaultDisplay == null) {
+        if (!mDisplayReady) {
             // Not yet initialized, nothing to do.
             return;
         }
@@ -8600,11 +8604,14 @@
                 Rect dirty = new Rect(0, 0, mNextAppTransitionThumbnail.getWidth(),
                         mNextAppTransitionThumbnail.getHeight());
                 try {
+                    // TODO(multi-display): support other displays
+                    final DisplayContent displayContent = getDefaultDisplayContent();
+                    final Display display = displayContent.getDisplay();
                     Surface surface = new Surface(mFxSession,
                             "thumbnail anim",
                             dirty.width(), dirty.height(),
                             PixelFormat.TRANSLUCENT, Surface.HIDDEN);
-                    surface.setLayerStack(mDefaultDisplay.getLayerStack());
+                    surface.setLayerStack(display.getLayerStack());
                     topOpeningApp.mAppAnimator.thumbnail = surface;
                     if (SHOW_TRANSACTIONS) Slog.i(TAG, "  THUMBNAIL "
                             + surface + ": CREATE");
@@ -9857,7 +9864,7 @@
             return;
         }
 
-        if (mDefaultDisplay == null || !mPolicy.isScreenOnFully()) {
+        if (!mDisplayReady || !mPolicy.isScreenOnFully()) {
             // No need to freeze the screen before the system is ready or if
             // the screen is off.
             return;
@@ -9889,10 +9896,12 @@
             }
 
             // TODO(multidisplay): rotation on main screen only.
-            DisplayInfo displayInfo = getDefaultDisplayContent().getDisplayInfo();
+            final DisplayContent displayContent = getDefaultDisplayContent();
+            final Display display = displayContent.getDisplay();
+            final DisplayInfo displayInfo = displayContent.getDisplayInfo();
             mAnimator.mScreenRotationAnimation = new ScreenRotationAnimation(mContext,
-                    mDefaultDisplay, mFxSession, inTransaction, displayInfo.logicalWidth,
-                    displayInfo.logicalHeight, mDefaultDisplay.getRotation());
+                    display, mFxSession, inTransaction, displayInfo.logicalWidth,
+                    displayInfo.logicalHeight, display.getRotation());
         }
     }
 
@@ -10003,8 +10012,8 @@
             if (line != null) {
                 String[] toks = line.split("%");
                 if (toks != null && toks.length > 0) {
-                    mWatermark =
-                            new Watermark(mDefaultDisplay, mRealDisplayMetrics, mFxSession, toks);
+                    mWatermark = new Watermark(getDefaultDisplayContent().getDisplay(),
+                            mRealDisplayMetrics, mFxSession, toks);
                 }
             }
         } catch (FileNotFoundException e) {
@@ -10372,7 +10381,7 @@
             }
         }
         pw.println();
-        if (mDefaultDisplay != null) {
+        if (mDisplayReady) {
             DisplayContentsIterator dCIterator = new DisplayContentsIterator();
             while (dCIterator.hasNext()) {
                 dCIterator.next().dump(pw);
@@ -10804,9 +10813,7 @@
     }
 
     public DisplayContent getDefaultDisplayContent() {
-        final int displayId = mDefaultDisplay == null
-                ? Display.DEFAULT_DISPLAY : mDefaultDisplay.getDisplayId();
-        return getDisplayContent(displayId);
+        return getDisplayContent(Display.DEFAULT_DISPLAY);
     }
 
     public WindowList getDefaultWindowList() {