From e215f26f74744535bcc0209f2a0a0e4a9f36fd82 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Mon, 10 Sep 2012 16:01:14 -0700 Subject: 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 --- .../android/server/wm/WindowManagerService.java | 87 ++++++++++++---------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index a7ea01d72b69..17f4a96bf83e 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -434,6 +434,7 @@ public class WindowManagerService extends IWindowManager.Stub final float[] mTmpFloats = new float[9]; + boolean mDisplayReady; boolean mSafeMode; boolean mDisplayEnabled = false; boolean mSystemBooted = false; @@ -503,8 +504,6 @@ public class WindowManagerService extends IWindowManager.Stub final ArrayList mOpeningApps = new ArrayList(); final ArrayList mClosingApps = new ArrayList(); - Display mDefaultDisplay; - boolean mIsTouchDevice; final DisplayMetrics mDisplayMetrics = new DisplayMetrics(); @@ -2085,7 +2084,7 @@ public class WindowManagerService extends IWindowManager.Stub long origId; synchronized(mWindowMap) { - if (mDefaultDisplay == null) { + if (!mDisplayReady) { throw new IllegalStateException("Display has not been initialialized"); } @@ -5604,8 +5603,10 @@ public class WindowManagerService extends IWindowManager.Stub ">>> 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 @@ public class WindowManagerService extends IWindowManager.Stub } // 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 @@ public class WindowManagerService extends IWindowManager.Stub } boolean computeScreenConfigurationLocked(Configuration config) { - if (mDefaultDisplay == null) { + if (!mDisplayReady) { return false; } @@ -6785,13 +6786,8 @@ public class WindowManagerService extends IWindowManager.Stub } 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 @@ public class WindowManagerService extends IWindowManager.Stub 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 class WindowManagerService extends IWindowManager.Stub } 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 @@ public class WindowManagerService extends IWindowManager.Stub } // 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 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub return; } - if (mDefaultDisplay == null) { + if (!mDisplayReady) { // Not yet initialized, nothing to do. return; } @@ -8600,11 +8604,14 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub } // 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 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub } } pw.println(); - if (mDefaultDisplay != null) { + if (mDisplayReady) { DisplayContentsIterator dCIterator = new DisplayContentsIterator(); while (dCIterator.hasNext()) { dCIterator.next().dump(pw); @@ -10804,9 +10813,7 @@ public class WindowManagerService extends IWindowManager.Stub } public DisplayContent getDefaultDisplayContent() { - final int displayId = mDefaultDisplay == null - ? Display.DEFAULT_DISPLAY : mDefaultDisplay.getDisplayId(); - return getDisplayContent(displayId); + return getDisplayContent(Display.DEFAULT_DISPLAY); } public WindowList getDefaultWindowList() { -- cgit v1.2.3-59-g8ed1b