Loading services/core/java/com/android/server/wm/AppWindowToken.java +2 −5 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.H.NOTIFY_ACTIVITY_DRAWN; import static com.android.server.wm.WindowManagerService.H.NOTIFY_STARTING_WINDOW_DRAWN; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES; import static com.android.server.wm.WindowManagerService.logWithStack; Loading @@ -62,12 +61,10 @@ import android.util.Slog; import android.view.IApplicationToken; import android.view.View; import android.view.WindowManager; import android.view.animation.Animation; import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.function.Function; class AppTokenList extends ArrayList<AppWindowToken> { } Loading Loading @@ -390,10 +387,10 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree @Override void removeIfPossible() { mIsExiting = false; removeAllWindows(); removeAllWindowsIfPossible(); if (mTask != null) { mTask.mStack.mExitingAppTokens.remove(this); mTask.removeChild(this); removeImmediately(); } } Loading services/core/java/com/android/server/wm/DisplayContent.java +18 −5 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return token.asAppWindowToken(); } void setWindowToken(IBinder binder, WindowToken token) { void addWindowToken(IBinder binder, WindowToken token) { final DisplayContent dc = mService.mRoot.getWindowTokenDisplay(token); if (dc != null) { // We currently don't support adding a window token to the display if the display Loading Loading @@ -333,20 +333,33 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo WindowToken removeWindowToken(IBinder binder) { final WindowToken token = mTokenMap.remove(binder); if (token != null && token.asAppWindowToken() == null) { token.setExiting(); } return token; } /** Changes the display the input window token is housed on to this one. */ void reParentWindowToken(WindowToken token) { final DisplayContent prevDc = token.getDisplayContent(); if (prevDc == this) { return; } if (prevDc != null && prevDc.mTokenMap.remove(token.token) != null) { switch (token.windowType) { case TYPE_WALLPAPER: mBelowAppWindowsContainers.removeChild(token); prevDc.mBelowAppWindowsContainers.removeChild(token); break; case TYPE_INPUT_METHOD: case TYPE_INPUT_METHOD_DIALOG: mImeWindowsContainers.removeChild(token); prevDc.mImeWindowsContainers.removeChild(token); break; default: mAboveAppWindowsContainers.removeChild(token); prevDc.mAboveAppWindowsContainers.removeChild(token); break; } } return token; addWindowToken(token.token, token); } void removeAppToken(IBinder binder) { Loading services/core/java/com/android/server/wm/Task.java +2 −2 Original line number Diff line number Diff line Loading @@ -146,11 +146,11 @@ class Task extends WindowContainer<AppWindowToken> implements DimLayer.DimLayerU if (content != null) { content.mDimLayerController.removeDimLayerUser(this); } getParent().removeChild(this); removeImmediately(); mService.mTaskIdToTask.delete(mTaskId); } // Change to use reparenting in WC when TaskStack is switched to use WC. // Change to use re-parenting in WC when TaskStack is switched to use WC. void moveTaskToStack(TaskStack stack, boolean toTop) { if (stack == mStack) { return; Loading services/core/java/com/android/server/wm/WindowManagerService.java +2 −4 Original line number Diff line number Diff line Loading @@ -1654,7 +1654,7 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Removing " + win + " from " + token); // Window will already be removed from token before this post clean-up method is called. if (token.isEmpty()) { if (!token.explicit) { if (!token.mPersistOnEmpty) { token.removeImmediately(); } else if (atoken != null) { // TODO: Should this be moved into AppWindowToken.removeWindow? Might go away after Loading Loading @@ -2443,8 +2443,6 @@ public class WindowManagerService extends IWindowManager.Stub return; } token.setExiting(); mInputMonitor.updateInputWindowsLw(true /*force*/); } } finally { Loading Loading @@ -8924,7 +8922,7 @@ public class WindowManagerService extends IWindowManager.Stub return; } token.removeAllWindows(); token.removeAllWindowsIfPossible(); } WindowManagerService.this.removeWindowToken(binder, displayId); } Loading services/core/java/com/android/server/wm/WindowToken.java +11 −25 Original line number Diff line number Diff line Loading @@ -18,25 +18,18 @@ package com.android.server.wm; import java.util.Comparator; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL; import android.os.Bundle; import android.os.Debug; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import android.view.DisplayInfo; import android.view.animation.Animation; import java.io.PrintWriter; Loading @@ -58,8 +51,8 @@ class WindowToken extends WindowContainer<WindowState> { final int windowType; // Set if this token was explicitly added by a client, so should // not be removed when all windows are removed. final boolean explicit; // persist (not be removed) when all windows are removed. boolean mPersistOnEmpty; // For printing. String stringName; Loading Loading @@ -104,27 +97,28 @@ class WindowToken extends WindowContainer<WindowState> { return isFirstChildWindowGreaterThanSecond(newWindow, existingWindow) ? 1 : -1; }; WindowToken(WindowManagerService service, IBinder _token, int type, boolean _explicit, WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty, DisplayContent dc) { mService = service; token = _token; windowType = type; explicit = _explicit; mPersistOnEmpty = persistOnEmpty; onDisplayChanged(dc); } void removeAllWindows() { void removeAllWindowsIfPossible() { for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowState win = mChildren.get(i); if (DEBUG_WINDOW_MOVEMENT) Slog.w(TAG_WM, "removeAllWindows: removing win=" + win); if (DEBUG_WINDOW_MOVEMENT) Slog.w(TAG_WM, "removeAllWindowsIfPossible: removing win=" + win); win.removeIfPossible(); if (mChildren.contains(win)) { removeChild(win); } } } void setExiting() { // This token is exiting, so allow it to be removed when it no longer contains any windows. mPersistOnEmpty = false; if (hidden) { return; } Loading Loading @@ -297,16 +291,8 @@ class WindowToken extends WindowContainer<WindowState> { } void onDisplayChanged(DisplayContent dc) { if (mDisplayContent == dc) { return; } if (mDisplayContent != null) { mDisplayContent.removeWindowToken(token); } dc.reParentWindowToken(this); mDisplayContent = dc; mDisplayContent.setWindowToken(token, this); super.onDisplayChanged(dc); } Loading Loading
services/core/java/com/android/server/wm/AppWindowToken.java +2 −5 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.H.NOTIFY_ACTIVITY_DRAWN; import static com.android.server.wm.WindowManagerService.H.NOTIFY_STARTING_WINDOW_DRAWN; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES; import static com.android.server.wm.WindowManagerService.logWithStack; Loading @@ -62,12 +61,10 @@ import android.util.Slog; import android.view.IApplicationToken; import android.view.View; import android.view.WindowManager; import android.view.animation.Animation; import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.function.Function; class AppTokenList extends ArrayList<AppWindowToken> { } Loading Loading @@ -390,10 +387,10 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree @Override void removeIfPossible() { mIsExiting = false; removeAllWindows(); removeAllWindowsIfPossible(); if (mTask != null) { mTask.mStack.mExitingAppTokens.remove(this); mTask.removeChild(this); removeImmediately(); } } Loading
services/core/java/com/android/server/wm/DisplayContent.java +18 −5 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return token.asAppWindowToken(); } void setWindowToken(IBinder binder, WindowToken token) { void addWindowToken(IBinder binder, WindowToken token) { final DisplayContent dc = mService.mRoot.getWindowTokenDisplay(token); if (dc != null) { // We currently don't support adding a window token to the display if the display Loading Loading @@ -333,20 +333,33 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo WindowToken removeWindowToken(IBinder binder) { final WindowToken token = mTokenMap.remove(binder); if (token != null && token.asAppWindowToken() == null) { token.setExiting(); } return token; } /** Changes the display the input window token is housed on to this one. */ void reParentWindowToken(WindowToken token) { final DisplayContent prevDc = token.getDisplayContent(); if (prevDc == this) { return; } if (prevDc != null && prevDc.mTokenMap.remove(token.token) != null) { switch (token.windowType) { case TYPE_WALLPAPER: mBelowAppWindowsContainers.removeChild(token); prevDc.mBelowAppWindowsContainers.removeChild(token); break; case TYPE_INPUT_METHOD: case TYPE_INPUT_METHOD_DIALOG: mImeWindowsContainers.removeChild(token); prevDc.mImeWindowsContainers.removeChild(token); break; default: mAboveAppWindowsContainers.removeChild(token); prevDc.mAboveAppWindowsContainers.removeChild(token); break; } } return token; addWindowToken(token.token, token); } void removeAppToken(IBinder binder) { Loading
services/core/java/com/android/server/wm/Task.java +2 −2 Original line number Diff line number Diff line Loading @@ -146,11 +146,11 @@ class Task extends WindowContainer<AppWindowToken> implements DimLayer.DimLayerU if (content != null) { content.mDimLayerController.removeDimLayerUser(this); } getParent().removeChild(this); removeImmediately(); mService.mTaskIdToTask.delete(mTaskId); } // Change to use reparenting in WC when TaskStack is switched to use WC. // Change to use re-parenting in WC when TaskStack is switched to use WC. void moveTaskToStack(TaskStack stack, boolean toTop) { if (stack == mStack) { return; Loading
services/core/java/com/android/server/wm/WindowManagerService.java +2 −4 Original line number Diff line number Diff line Loading @@ -1654,7 +1654,7 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Removing " + win + " from " + token); // Window will already be removed from token before this post clean-up method is called. if (token.isEmpty()) { if (!token.explicit) { if (!token.mPersistOnEmpty) { token.removeImmediately(); } else if (atoken != null) { // TODO: Should this be moved into AppWindowToken.removeWindow? Might go away after Loading Loading @@ -2443,8 +2443,6 @@ public class WindowManagerService extends IWindowManager.Stub return; } token.setExiting(); mInputMonitor.updateInputWindowsLw(true /*force*/); } } finally { Loading Loading @@ -8924,7 +8922,7 @@ public class WindowManagerService extends IWindowManager.Stub return; } token.removeAllWindows(); token.removeAllWindowsIfPossible(); } WindowManagerService.this.removeWindowToken(binder, displayId); } Loading
services/core/java/com/android/server/wm/WindowToken.java +11 −25 Original line number Diff line number Diff line Loading @@ -18,25 +18,18 @@ package com.android.server.wm; import java.util.Comparator; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL; import android.os.Bundle; import android.os.Debug; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import android.view.DisplayInfo; import android.view.animation.Animation; import java.io.PrintWriter; Loading @@ -58,8 +51,8 @@ class WindowToken extends WindowContainer<WindowState> { final int windowType; // Set if this token was explicitly added by a client, so should // not be removed when all windows are removed. final boolean explicit; // persist (not be removed) when all windows are removed. boolean mPersistOnEmpty; // For printing. String stringName; Loading Loading @@ -104,27 +97,28 @@ class WindowToken extends WindowContainer<WindowState> { return isFirstChildWindowGreaterThanSecond(newWindow, existingWindow) ? 1 : -1; }; WindowToken(WindowManagerService service, IBinder _token, int type, boolean _explicit, WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty, DisplayContent dc) { mService = service; token = _token; windowType = type; explicit = _explicit; mPersistOnEmpty = persistOnEmpty; onDisplayChanged(dc); } void removeAllWindows() { void removeAllWindowsIfPossible() { for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowState win = mChildren.get(i); if (DEBUG_WINDOW_MOVEMENT) Slog.w(TAG_WM, "removeAllWindows: removing win=" + win); if (DEBUG_WINDOW_MOVEMENT) Slog.w(TAG_WM, "removeAllWindowsIfPossible: removing win=" + win); win.removeIfPossible(); if (mChildren.contains(win)) { removeChild(win); } } } void setExiting() { // This token is exiting, so allow it to be removed when it no longer contains any windows. mPersistOnEmpty = false; if (hidden) { return; } Loading Loading @@ -297,16 +291,8 @@ class WindowToken extends WindowContainer<WindowState> { } void onDisplayChanged(DisplayContent dc) { if (mDisplayContent == dc) { return; } if (mDisplayContent != null) { mDisplayContent.removeWindowToken(token); } dc.reParentWindowToken(this); mDisplayContent = dc; mDisplayContent.setWindowToken(token, this); super.onDisplayChanged(dc); } Loading