Merge "Screenshots broken for activities with dialog themes" into pi-dev

This commit is contained in:
Adrian Roos
2018-03-07 22:21:21 +00:00
committed by Android (Google) Code Review
3 changed files with 46 additions and 9 deletions

View File

@@ -1728,6 +1728,8 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
frame.set(win.mContainingFrame); frame.set(win.mContainingFrame);
} }
surfaceInsets = win.getAttrs().surfaceInsets; surfaceInsets = win.getAttrs().surfaceInsets;
// XXX(b/72757033): These are insets relative to the window frame, but we're really
// interested in the insets relative to the frame we chose in the if-blocks above.
insets.set(win.mContentInsets); insets.set(win.mContentInsets);
stableInsets.set(win.mStableInsets); stableInsets.set(win.mStableInsets);
} }
@@ -2120,4 +2122,12 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
} }
return stringName + ((mIsExiting) ? " mIsExiting=" : ""); return stringName + ((mIsExiting) ? " mIsExiting=" : "");
} }
Rect getLetterboxInsets() {
if (mLetterbox != null) {
return mLetterbox.getInsets();
} else {
return new Rect();
}
}
} }

View File

@@ -67,6 +67,17 @@ public class Letterbox {
mRight.setRect(t, inner.right, outer.top, outer.right, inner.bottom); mRight.setRect(t, inner.right, outer.top, outer.right, inner.bottom);
} }
/**
* Gets the insets between the outer and inner rects.
*/
public Rect getInsets() {
return new Rect(
mLeft.getWidth(),
mTop.getHeight(),
mRight.getWidth(),
mBottom.getHeight());
}
/** /**
* Hides the letterbox. * Hides the letterbox.
* *
@@ -141,5 +152,13 @@ public class Letterbox {
mSurface = null; mSurface = null;
} }
} }
public int getWidth() {
return Math.max(0, mLastRight - mLastLeft);
}
public int getHeight() {
return Math.max(0, mLastBottom - mLastTop);
}
} }
} }

View File

@@ -281,17 +281,25 @@ class TaskSnapshotController {
} }
private Rect getInsetsFromTaskBounds(WindowState state, Task task) { private Rect getInsetsFromTaskBounds(WindowState state, Task task) {
final Rect r = new Rect(); // XXX(b/72757033): These are insets relative to the window frame, but we're really
r.set(state.getContentFrameLw()); // interested in the insets relative to the task bounds.
r.intersectUnchecked(state.getStableFrameLw()); Rect insets = minRect(state.mContentInsets, state.mStableInsets);
insets = maxRect(insets, state.mAppToken.getLetterboxInsets());
return insets;
}
final Rect taskBounds = task.getBounds(); private Rect minRect(Rect rect1, Rect rect2) {
return new Rect(Math.min(rect1.left, rect2.left),
Math.min(rect1.top, rect2.top),
Math.min(rect1.right, rect2.right),
Math.min(rect1.bottom, rect2.bottom));
}
r.set(Math.max(0, r.left - taskBounds.left), private Rect maxRect(Rect rect1, Rect rect2) {
Math.max(0, r.top - taskBounds.top), return new Rect(Math.max(rect1.left, rect2.left),
Math.max(0, taskBounds.right - r.right), Math.max(rect1.top, rect2.top),
Math.max(0, taskBounds.bottom - r.bottom)); Math.max(rect1.right, rect2.right),
return r; Math.max(rect1.bottom, rect2.bottom));
} }
/** /**