Consolidate onDisplayChange() and updateDisplayInfo()

Bug: 118764615
Test: go/wm-smoke. Manual checking that bounds adjustment for display
rotation still happens.

Change-Id: I8f5cc37f4aecb4ec7a578b6efbe7cfdcbd46350b
This commit is contained in:
Garfield Tan
2018-11-01 15:27:03 -07:00
parent 25d07aadb5
commit 2f145f225e
4 changed files with 55 additions and 39 deletions

View File

@@ -2011,9 +2011,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
mDisplay.getDisplayInfo(mDisplayInfo);
mDisplay.getMetrics(mDisplayMetrics);
for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
mTaskStackContainers.getChildAt(i).updateDisplayInfo(null);
}
onDisplayChanged(this);
}
void initializeDisplayBaseInfo() {

View File

@@ -237,7 +237,7 @@ class Task extends WindowContainer<AppWindowToken> {
super.onParentSet();
// Update task bounds if needed.
updateDisplayInfo(getDisplayContent());
adjustBoundsForDisplayChangeIfNeeded(getDisplayContent());
if (getWindowConfiguration().windowsAreScaleable()) {
// We force windows out of SCALING_MODE_FREEZE so that we can continue to animate them
@@ -303,6 +303,7 @@ class Task extends WindowContainer<AppWindowToken> {
@Override
void onDisplayChanged(DisplayContent dc) {
updateSurfaceSize(dc);
adjustBoundsForDisplayChangeIfNeeded(dc);
super.onDisplayChanged(dc);
}
@@ -501,7 +502,7 @@ class Task extends WindowContainer<AppWindowToken> {
return mDragResizeMode;
}
void updateDisplayInfo(final DisplayContent displayContent) {
private void adjustBoundsForDisplayChangeIfNeeded(final DisplayContent displayContent) {
if (displayContent == null) {
return;
}

View File

@@ -418,32 +418,6 @@ public class TaskStack extends WindowContainer<Task> implements
getBounds(out);
}
void updateDisplayInfo(Rect bounds) {
if (mDisplayContent == null) {
return;
}
for (int taskNdx = mChildren.size() - 1; taskNdx >= 0; --taskNdx) {
mChildren.get(taskNdx).updateDisplayInfo(mDisplayContent);
}
if (bounds != null) {
setBounds(bounds);
return;
} else if (matchParentBounds()) {
setBounds(null);
return;
}
mTmpRect2.set(getRawBounds());
final int newRotation = mDisplayContent.getDisplayInfo().rotation;
final int newDensity = mDisplayContent.getDisplayInfo().logicalDensityDpi;
if (mRotation == newRotation && mDensity == newDensity) {
setBounds(mTmpRect2);
}
// If the rotation or density didn't match, we'll update it in onConfigurationChanged.
}
/**
* Updates the passed-in {@code inOutBounds} based on how it would change when this container's
* override configuration is applied to the specified {@code parentConfig} and
@@ -820,16 +794,24 @@ public class TaskStack extends WindowContainer<Task> implements
@Override
void onDisplayChanged(DisplayContent dc) {
if (mDisplayContent != null) {
if (mDisplayContent != null && mDisplayContent != dc) {
throw new IllegalStateException("onDisplayChanged: Already attached");
}
final boolean movedToNewDisplay = mDisplayContent == null;
mDisplayContent = dc;
updateBoundsForWindowModeChange();
mAnimationBackgroundSurface = makeChildSurface(null).setColorLayer(true)
.setName("animation background stackId=" + mStackId)
.build();
if (movedToNewDisplay) {
updateBoundsForWindowModeChange();
} else {
updateBoundsForDisplayChanges();
}
if (mAnimationBackgroundSurface != null) {
mAnimationBackgroundSurface = makeChildSurface(null).setColorLayer(true)
.setName("animation background stackId=" + mStackId)
.build();
}
super.onDisplayChanged(dc);
}
@@ -845,10 +827,41 @@ public class TaskStack extends WindowContainer<Task> implements
}, true);
}
updateDisplayInfo(bounds);
setBoundsForWindowModeChange(bounds);
updateSurfaceBounds();
}
private void setBoundsForWindowModeChange(Rect bounds) {
if (mDisplayContent == null) {
return;
}
if (bounds != null) {
setBounds(bounds);
return;
}
updateBoundsForDisplayChanges();
}
private void updateBoundsForDisplayChanges() {
// Avoid setting override bounds to bounds inherited from parent if there was no override
// bounds set.
if (matchParentBounds()) {
setBounds(null);
return;
}
mTmpRect2.set(getRawBounds());
final int newRotation = mDisplayContent.getDisplayInfo().rotation;
final int newDensity = mDisplayContent.getDisplayInfo().logicalDensityDpi;
if (mRotation == newRotation && mDensity == newDensity) {
setBounds(mTmpRect2);
}
// If the rotation or density didn't match, we'll update it in onConfigurationChanged.
}
private Rect calculateBoundsForWindowModeChange() {
final boolean inSplitScreenPrimary = inSplitScreenPrimaryWindowingMode();
final TaskStack splitScreenStack =

View File

@@ -42,8 +42,10 @@ import android.view.MagnificationSpec;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Builder;
import android.view.SurfaceSession;
import com.android.internal.util.ToBooleanFunction;
import com.android.server.wm.SurfaceAnimator.Animatable;
import java.io.PrintWriter;
import java.util.Comparator;
import java.util.LinkedList;
@@ -501,8 +503,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
}
/**
* Notify that the display this container is on has changed.
* @param dc The new display this container is on.
* Notify that the display this container is on has changed. This could be either this container
* is moved to a new display, or some configurations on the display it is on changes.
*
* @param dc The display this container is on after changes.
*/
void onDisplayChanged(DisplayContent dc) {
for (int i = mChildren.size() - 1; i >= 0; --i) {