Loading services/core/java/com/android/server/wm/AppWindowToken.java +6 −2 Original line number Diff line number Diff line Loading @@ -1100,12 +1100,16 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree } } int rebuildWindowListUnchecked(DisplayContent dc, int addIndex) { return super.rebuildWindowList(dc, addIndex); } @Override int rebuildWindowList(DisplayContent dc, int addIndex) { if (mIsExiting && !waitingForReplacement()) { return addIndex; } return super.rebuildWindowList(dc, addIndex); return rebuildWindowListUnchecked(dc, addIndex); } @Override Loading Loading @@ -1187,6 +1191,6 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree sb.append(" token="); sb.append(token); sb.append('}'); stringName = sb.toString(); } return stringName; return stringName + ((mIsExiting) ? " mIsExiting=" : ""); } } services/core/java/com/android/server/wm/DisplayContent.java +24 −9 Original line number Diff line number Diff line Loading @@ -183,11 +183,11 @@ class DisplayContent extends WindowContainer<TaskStack> { /** * Returns true if the specified UID has access to this display. */ public boolean hasAccess(int uid) { boolean hasAccess(int uid) { return mDisplay.hasAccess(uid); } public boolean isPrivate() { boolean isPrivate() { return (mDisplay.getFlags() & Display.FLAG_PRIVATE) != 0; } Loading Loading @@ -237,11 +237,23 @@ class DisplayContent extends WindowContainer<TaskStack> { super.stepAppWindowsAnimation(currentTime, mDisplayId); } @Override boolean fillsParent() { return true; } @Override boolean isVisible() { return true; } @Override void onAppTransitionDone() { super.onAppTransitionDone(); rebuildAppWindowList(); } @Override int getOrientation() { if (mService.isStackVisibleLocked(DOCKED_STACK_ID) || mService.isStackVisibleLocked(FREEFORM_WORKSPACE_STACK_ID)) { Loading Loading @@ -322,8 +334,7 @@ class DisplayContent extends WindowContainer<TaskStack> { } mHomeStack = stack; } addChild(stack, onTop ? mChildren.size() : 0); layoutNeeded = true; addChild(stack, onTop); } void moveStack(TaskStack stack, boolean toTop) { Loading @@ -337,7 +348,10 @@ class DisplayContent extends WindowContainer<TaskStack> { Slog.wtf(TAG_WM, "moving stack that was not added: " + stack, new Throwable()); } removeChild(stack); addChild(stack, toTop); } private void addChild(TaskStack stack, boolean toTop) { int addIndex = toTop ? mChildren.size() : 0; if (toTop Loading @@ -352,6 +366,7 @@ class DisplayContent extends WindowContainer<TaskStack> { } } addChild(stack, addIndex); layoutNeeded = true; } /** Loading Loading @@ -1063,7 +1078,7 @@ class DisplayContent extends WindowContainer<TaskStack> { AppTokenList exitingAppTokens = mChildren.get(stackNdx).mExitingAppTokens; int NT = exitingAppTokens.size(); for (int j = 0; j < NT; j++) { i = exitingAppTokens.get(j).rebuildWindowList(this, i); i = exitingAppTokens.get(j).rebuildWindowListUnchecked(this, i); } } Loading @@ -1090,7 +1105,7 @@ class DisplayContent extends WindowContainer<TaskStack> { ws.mWinAnimator.destroySurfaceLocked(); } } Slog.w(TAG_WM, "Current app token list:"); Slog.w(TAG_WM, "Current window hierarchy:"); dumpChildrenNames(); Slog.w(TAG_WM, "Final window list:"); dumpWindows(); Loading Loading @@ -1188,9 +1203,9 @@ class DisplayContent extends WindowContainer<TaskStack> { } private void dumpChildrenNames() { StringWriter sw = new StringWriter(); PrintWriter pw = new FastPrintWriter(sw, false, 1024); dumpChildrenNames(pw, " "); StringBuilder output = new StringBuilder(); dumpChildrenNames(output, " "); Slog.v(TAG_WM, output.toString()); } private void dumpWindows() { Loading services/core/java/com/android/server/wm/RootWindowContainer.java +12 −3 Original line number Diff line number Diff line Loading @@ -236,8 +236,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { stack = dc.getStackById(stackId); if (stack != null) { // It's already attached to the display...clear mDeferRemoval! // It's already attached to the display...clear mDeferRemoval and move stack to // appropriate z-order on display as needed. stack.mDeferRemoval = false; dc.moveStack(stack, onTop); attachedToDisplay = true; } else { stack = new TaskStack(mService, stackId); Loading @@ -249,14 +251,16 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { .notifyDockedStackExistsChanged(true); } } if (!attachedToDisplay) { stack.attachDisplayContent(dc); } dc.attachStack(stack, onTop); } if (stack.getRawFullscreen()) { return null; } Rect bounds = new Rect(); final Rect bounds = new Rect(); stack.getRawBounds(bounds); return bounds; } Loading Loading @@ -1429,4 +1433,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { } } } @Override String getName() { return "ROOT"; } } services/core/java/com/android/server/wm/TaskStack.java +3 −5 Original line number Diff line number Diff line Loading @@ -493,7 +493,9 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye void positionTask(Task task, int position, boolean showForAllUsers) { final boolean canShowTask = showForAllUsers || mService.isCurrentProfileLocked(task.mUserId); removeChild(task); if (mChildren.contains(task)) { super.removeChild(task); } int stackSize = mChildren.size(); int minPosition = 0; int maxPosition = stackSize; Loading Loading @@ -589,10 +591,6 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye @Override void removeChild(Task task) { if (DEBUG_TASK_MOVEMENT) Slog.d(TAG_WM, "removeChild: task=" + task); if (!mChildren.contains(task)) { Slog.e(TAG_WM, "removeChild: task=" + this + " not found."); return; } super.removeChild(task); Loading services/core/java/com/android/server/wm/WindowContainer.java +15 −14 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.server.wm; import android.annotation.CallSuper; import android.view.animation.Animation; import java.io.PrintWriter; import java.util.Comparator; import java.util.LinkedList; Loading Loading @@ -63,9 +62,9 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon @CallSuper protected void addChild(E child, Comparator<E> comparator) { if (child.mParent != null) { throw new IllegalArgumentException("addChild: container=" + child + " is already a child of container=" + child.mParent + " can't add to container=" + this); throw new IllegalArgumentException("addChild: container=" + child.getName() + " is already a child of container=" + child.mParent.getName() + " can't add to container=" + getName()); } child.mParent = this; Loading @@ -89,9 +88,9 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon @CallSuper protected void addChild(E child, int index) { if (child.mParent != null) { throw new IllegalArgumentException("addChild: container=" + child + " is already a child of container=" + child.mParent + " can't add to container=" + this); throw new IllegalArgumentException("addChild: container=" + child.getName() + " is already a child of container=" + child.mParent.getName() + " can't add to container=" + getName()); } child.mParent = this; mChildren.add(index, child); Loading @@ -107,8 +106,8 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon if (mChildren.remove(child)) { child.mParent = null; } else { throw new IllegalArgumentException("removeChild: container=" + child + " is not a child of container=" + this); throw new IllegalArgumentException("removeChild: container=" + child.getName() + " is not a child of container=" + getName()); } } Loading Loading @@ -469,12 +468,14 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon * Dumps the names of this container children in the input print writer indenting each * level with the input prefix. */ void dumpChildrenNames(PrintWriter pw, String prefix) { final String childPrefix = prefix + prefix; for (int i = mChildren.size() - 1; i >= 0; --i) { void dumpChildrenNames(StringBuilder out, String prefix) { final String childPrefix = prefix + " "; out.append(getName() + "\n"); final int count = mChildren.size(); for (int i = 0; i < count; i++) { final WindowContainer wc = mChildren.get(i); pw.println("#" + i + " " + getName()); wc.dumpChildrenNames(pw, childPrefix); out.append(childPrefix + "#" + i + " "); wc.dumpChildrenNames(out, childPrefix); } } Loading Loading
services/core/java/com/android/server/wm/AppWindowToken.java +6 −2 Original line number Diff line number Diff line Loading @@ -1100,12 +1100,16 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree } } int rebuildWindowListUnchecked(DisplayContent dc, int addIndex) { return super.rebuildWindowList(dc, addIndex); } @Override int rebuildWindowList(DisplayContent dc, int addIndex) { if (mIsExiting && !waitingForReplacement()) { return addIndex; } return super.rebuildWindowList(dc, addIndex); return rebuildWindowListUnchecked(dc, addIndex); } @Override Loading Loading @@ -1187,6 +1191,6 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree sb.append(" token="); sb.append(token); sb.append('}'); stringName = sb.toString(); } return stringName; return stringName + ((mIsExiting) ? " mIsExiting=" : ""); } }
services/core/java/com/android/server/wm/DisplayContent.java +24 −9 Original line number Diff line number Diff line Loading @@ -183,11 +183,11 @@ class DisplayContent extends WindowContainer<TaskStack> { /** * Returns true if the specified UID has access to this display. */ public boolean hasAccess(int uid) { boolean hasAccess(int uid) { return mDisplay.hasAccess(uid); } public boolean isPrivate() { boolean isPrivate() { return (mDisplay.getFlags() & Display.FLAG_PRIVATE) != 0; } Loading Loading @@ -237,11 +237,23 @@ class DisplayContent extends WindowContainer<TaskStack> { super.stepAppWindowsAnimation(currentTime, mDisplayId); } @Override boolean fillsParent() { return true; } @Override boolean isVisible() { return true; } @Override void onAppTransitionDone() { super.onAppTransitionDone(); rebuildAppWindowList(); } @Override int getOrientation() { if (mService.isStackVisibleLocked(DOCKED_STACK_ID) || mService.isStackVisibleLocked(FREEFORM_WORKSPACE_STACK_ID)) { Loading Loading @@ -322,8 +334,7 @@ class DisplayContent extends WindowContainer<TaskStack> { } mHomeStack = stack; } addChild(stack, onTop ? mChildren.size() : 0); layoutNeeded = true; addChild(stack, onTop); } void moveStack(TaskStack stack, boolean toTop) { Loading @@ -337,7 +348,10 @@ class DisplayContent extends WindowContainer<TaskStack> { Slog.wtf(TAG_WM, "moving stack that was not added: " + stack, new Throwable()); } removeChild(stack); addChild(stack, toTop); } private void addChild(TaskStack stack, boolean toTop) { int addIndex = toTop ? mChildren.size() : 0; if (toTop Loading @@ -352,6 +366,7 @@ class DisplayContent extends WindowContainer<TaskStack> { } } addChild(stack, addIndex); layoutNeeded = true; } /** Loading Loading @@ -1063,7 +1078,7 @@ class DisplayContent extends WindowContainer<TaskStack> { AppTokenList exitingAppTokens = mChildren.get(stackNdx).mExitingAppTokens; int NT = exitingAppTokens.size(); for (int j = 0; j < NT; j++) { i = exitingAppTokens.get(j).rebuildWindowList(this, i); i = exitingAppTokens.get(j).rebuildWindowListUnchecked(this, i); } } Loading @@ -1090,7 +1105,7 @@ class DisplayContent extends WindowContainer<TaskStack> { ws.mWinAnimator.destroySurfaceLocked(); } } Slog.w(TAG_WM, "Current app token list:"); Slog.w(TAG_WM, "Current window hierarchy:"); dumpChildrenNames(); Slog.w(TAG_WM, "Final window list:"); dumpWindows(); Loading Loading @@ -1188,9 +1203,9 @@ class DisplayContent extends WindowContainer<TaskStack> { } private void dumpChildrenNames() { StringWriter sw = new StringWriter(); PrintWriter pw = new FastPrintWriter(sw, false, 1024); dumpChildrenNames(pw, " "); StringBuilder output = new StringBuilder(); dumpChildrenNames(output, " "); Slog.v(TAG_WM, output.toString()); } private void dumpWindows() { Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +12 −3 Original line number Diff line number Diff line Loading @@ -236,8 +236,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { stack = dc.getStackById(stackId); if (stack != null) { // It's already attached to the display...clear mDeferRemoval! // It's already attached to the display...clear mDeferRemoval and move stack to // appropriate z-order on display as needed. stack.mDeferRemoval = false; dc.moveStack(stack, onTop); attachedToDisplay = true; } else { stack = new TaskStack(mService, stackId); Loading @@ -249,14 +251,16 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { .notifyDockedStackExistsChanged(true); } } if (!attachedToDisplay) { stack.attachDisplayContent(dc); } dc.attachStack(stack, onTop); } if (stack.getRawFullscreen()) { return null; } Rect bounds = new Rect(); final Rect bounds = new Rect(); stack.getRawBounds(bounds); return bounds; } Loading Loading @@ -1429,4 +1433,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { } } } @Override String getName() { return "ROOT"; } }
services/core/java/com/android/server/wm/TaskStack.java +3 −5 Original line number Diff line number Diff line Loading @@ -493,7 +493,9 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye void positionTask(Task task, int position, boolean showForAllUsers) { final boolean canShowTask = showForAllUsers || mService.isCurrentProfileLocked(task.mUserId); removeChild(task); if (mChildren.contains(task)) { super.removeChild(task); } int stackSize = mChildren.size(); int minPosition = 0; int maxPosition = stackSize; Loading Loading @@ -589,10 +591,6 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye @Override void removeChild(Task task) { if (DEBUG_TASK_MOVEMENT) Slog.d(TAG_WM, "removeChild: task=" + task); if (!mChildren.contains(task)) { Slog.e(TAG_WM, "removeChild: task=" + this + " not found."); return; } super.removeChild(task); Loading
services/core/java/com/android/server/wm/WindowContainer.java +15 −14 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.server.wm; import android.annotation.CallSuper; import android.view.animation.Animation; import java.io.PrintWriter; import java.util.Comparator; import java.util.LinkedList; Loading Loading @@ -63,9 +62,9 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon @CallSuper protected void addChild(E child, Comparator<E> comparator) { if (child.mParent != null) { throw new IllegalArgumentException("addChild: container=" + child + " is already a child of container=" + child.mParent + " can't add to container=" + this); throw new IllegalArgumentException("addChild: container=" + child.getName() + " is already a child of container=" + child.mParent.getName() + " can't add to container=" + getName()); } child.mParent = this; Loading @@ -89,9 +88,9 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon @CallSuper protected void addChild(E child, int index) { if (child.mParent != null) { throw new IllegalArgumentException("addChild: container=" + child + " is already a child of container=" + child.mParent + " can't add to container=" + this); throw new IllegalArgumentException("addChild: container=" + child.getName() + " is already a child of container=" + child.mParent.getName() + " can't add to container=" + getName()); } child.mParent = this; mChildren.add(index, child); Loading @@ -107,8 +106,8 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon if (mChildren.remove(child)) { child.mParent = null; } else { throw new IllegalArgumentException("removeChild: container=" + child + " is not a child of container=" + this); throw new IllegalArgumentException("removeChild: container=" + child.getName() + " is not a child of container=" + getName()); } } Loading Loading @@ -469,12 +468,14 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon * Dumps the names of this container children in the input print writer indenting each * level with the input prefix. */ void dumpChildrenNames(PrintWriter pw, String prefix) { final String childPrefix = prefix + prefix; for (int i = mChildren.size() - 1; i >= 0; --i) { void dumpChildrenNames(StringBuilder out, String prefix) { final String childPrefix = prefix + " "; out.append(getName() + "\n"); final int count = mChildren.size(); for (int i = 0; i < count; i++) { final WindowContainer wc = mChildren.get(i); pw.println("#" + i + " " + getName()); wc.dumpChildrenNames(pw, childPrefix); out.append(childPrefix + "#" + i + " "); wc.dumpChildrenNames(out, childPrefix); } } Loading