diff options
author | Craig Mautner <cmautner@google.com> | 2013-10-02 16:49:52 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2013-10-02 16:49:52 -0700 |
commit | c7b8a1004006f08fbd1fb32133ccd1b9ec73819a (patch) | |
tree | 6a81a582784636644ff4b363ff94737818f37f50 /services/java/com | |
parent | cbf3f2cde569aac3a49d888d2bd52d77dc139738 (diff) | |
download | frameworks_base-c7b8a1004006f08fbd1fb32133ccd1b9ec73819a.zip frameworks_base-c7b8a1004006f08fbd1fb32133ccd1b9ec73819a.tar.gz frameworks_base-c7b8a1004006f08fbd1fb32133ccd1b9ec73819a.tar.bz2 |
Make DimLayer size dependent on stack layout.
Only use the stack bounds for the DimLayer bounds if there is more
than one stack on a layer. Otherwise cover the entire screen (and
more) with the DimLayer. This way there are no exposed regions when
rotating.
Fixes bug 10428085.
Change-Id: I7bfff12b69d59e86610621c498dab35cf0db8eb5
Diffstat (limited to 'services/java/com')
-rw-r--r-- | services/java/com/android/server/wm/DimLayer.java | 43 | ||||
-rw-r--r-- | services/java/com/android/server/wm/TaskStack.java | 4 |
2 files changed, 29 insertions, 18 deletions
diff --git a/services/java/com/android/server/wm/DimLayer.java b/services/java/com/android/server/wm/DimLayer.java index 39e664f..c189ddd 100644 --- a/services/java/com/android/server/wm/DimLayer.java +++ b/services/java/com/android/server/wm/DimLayer.java @@ -48,9 +48,13 @@ public class DimLayer { /** Time in milliseconds to take to transition from mStartAlpha to mTargetAlpha */ long mDuration; - DimLayer(WindowManagerService service, DisplayContent displayContent) { - mDisplayContent = displayContent; - final int displayId = displayContent.getDisplayId(); + /** Owning stack */ + final TaskStack mStack; + + DimLayer(WindowManagerService service, TaskStack stack) { + mStack = stack; + mDisplayContent = stack.getDisplayContent(); + final int displayId = mDisplayContent.getDisplayId(); if (DEBUG) Slog.v(TAG, "Ctor: displayId=" + displayId); SurfaceControl.openTransaction(); try { @@ -160,22 +164,29 @@ public class DimLayer { return; } - /* - // Set surface size to screen size. - final DisplayInfo info = mDisplayContent.getDisplayInfo(); - // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a - // corner. - final int dw = (int) (info.logicalWidth * 1.5); - final int dh = (int) (info.logicalHeight * 1.5); - // back off position so 1/4 of Surface is before and 1/4 is after. - final float xPos = -1 * dw / 6; - final float yPos = -1 * dh / 6; - */ + final int dw, dh; + final float xPos, yPos; + if (mStack.hasSibling()) { + dw = mBounds.width(); + dh = mBounds.height(); + xPos = mBounds.left; + yPos = mBounds.right; + } else { + // Set surface size to screen size. + final DisplayInfo info = mDisplayContent.getDisplayInfo(); + // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a + // corner. + dw = (int) (info.logicalWidth * 1.5); + dh = (int) (info.logicalHeight * 1.5); + // back off position so 1/4 of Surface is before and 1/4 is after. + xPos = -1 * dw / 6; + yPos = -1 * dh / 6; + } if (!mLastBounds.equals(mBounds) || mLayer != layer) { try { - mDimSurface.setPosition(mBounds.left, mBounds.top); - mDimSurface.setSize(mBounds.width(), mBounds.height()); + mDimSurface.setPosition(xPos, yPos); + mDimSurface.setSize(dw, dh); mDimSurface.setLayer(layer); } catch (RuntimeException e) { Slog.w(TAG, "Failure setting size or layer", e); diff --git a/services/java/com/android/server/wm/TaskStack.java b/services/java/com/android/server/wm/TaskStack.java index 7bb6734..2347a19 100644 --- a/services/java/com/android/server/wm/TaskStack.java +++ b/services/java/com/android/server/wm/TaskStack.java @@ -71,8 +71,8 @@ public class TaskStack { mStackId = stackId; mDisplayContent = displayContent; final int displayId = displayContent.getDisplayId(); - mDimLayer = new DimLayer(service, displayContent); - mAnimationBackgroundSurface = new DimLayer(service, displayContent); + mDimLayer = new DimLayer(service, this); + mAnimationBackgroundSurface = new DimLayer(service, this); } DisplayContent getDisplayContent() { |