Apply the requested insets sources if possible
If the client doesn't change the insets, we use the dispatched source. In this way, the task snapshot can have the same insets as the client. Fix: 152931762 Test: atest TaskSnapshotControllerTest Change-Id: Ib0315ce0a8ab32e1c653eeed725fecccb54b3aa8
This commit is contained in:
@@ -40,6 +40,7 @@ import android.util.ArraySet;
|
||||
import android.util.Slog;
|
||||
import android.view.InsetsSource;
|
||||
import android.view.InsetsState;
|
||||
import android.view.InsetsState.InternalInsetsType;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.ThreadedRenderer;
|
||||
import android.view.WindowInsets;
|
||||
@@ -480,7 +481,9 @@ class TaskSnapshotController {
|
||||
task.getTaskDescription().getBackgroundColor(), 255);
|
||||
final LayoutParams attrs = mainWindow.getAttrs();
|
||||
final InsetsPolicy insetsPolicy = mainWindow.getDisplayContent().getInsetsPolicy();
|
||||
final InsetsState insetsState = insetsPolicy.getInsetsForDispatch(mainWindow);
|
||||
final InsetsState insetsState =
|
||||
new InsetsState(insetsPolicy.getInsetsForDispatch(mainWindow));
|
||||
mergeInsetsSources(insetsState, mainWindow.getRequestedInsetsState());
|
||||
final Rect systemBarInsets = getSystemBarInsets(mainWindow.getFrameLw(), insetsState);
|
||||
final SystemBarBackgroundPainter decorPainter = new SystemBarBackgroundPainter(attrs.flags,
|
||||
attrs.privateFlags, attrs.systemUiVisibility, task.getTaskDescription(),
|
||||
@@ -600,6 +603,15 @@ class TaskSnapshotController {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mergeInsetsSources(InsetsState base, InsetsState other) {
|
||||
for (@InternalInsetsType int type = 0; type < InsetsState.SIZE; type++) {
|
||||
final InsetsSource source = other.peekSource(type);
|
||||
if (source != null) {
|
||||
base.addSource(source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Rect getSystemBarInsets(Rect frame, InsetsState state) {
|
||||
return state.calculateInsets(frame, null /* ignoringVisibilityState */,
|
||||
false /* isScreenRound */, false /* alwaysConsumeSystemBars */,
|
||||
|
||||
@@ -42,6 +42,7 @@ import static com.android.internal.policy.DecorView.STATUS_BAR_COLOR_VIEW_ATTRIB
|
||||
import static com.android.internal.policy.DecorView.getNavigationBarRect;
|
||||
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_STARTING_WINDOW;
|
||||
import static com.android.server.wm.TaskSnapshotController.getSystemBarInsets;
|
||||
import static com.android.server.wm.TaskSnapshotController.mergeInsetsSources;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
|
||||
|
||||
@@ -243,7 +244,9 @@ class TaskSnapshotSurface implements StartingSurface {
|
||||
|
||||
final InsetsPolicy insetsPolicy = topFullscreenOpaqueWindow.getDisplayContent()
|
||||
.getInsetsPolicy();
|
||||
insetsState = insetsPolicy.getInsetsForDispatch(topFullscreenOpaqueWindow);
|
||||
insetsState =
|
||||
new InsetsState(insetsPolicy.getInsetsForDispatch(topFullscreenOpaqueWindow));
|
||||
mergeInsetsSources(insetsState, topFullscreenOpaqueWindow.getRequestedInsetsState());
|
||||
}
|
||||
try {
|
||||
final int res = session.addToDisplay(window, window.mSeq, layoutParams,
|
||||
|
||||
Reference in New Issue
Block a user