Loading services/java/com/android/server/wm/WindowManagerService.java +25 −3 Original line number Diff line number Diff line Loading @@ -919,6 +919,27 @@ public class WindowManagerService extends IWindowManager.Stub return windowList; } /** * Recursive search through a WindowList and all of its windows' children. * @param targetWin The window to search for. * @param windows The list to search. * @return The index of win in windows or of the window that is an ancestor of win. */ private int indexOfWinInWindowList(WindowState targetWin, WindowList windows) { for (int i = windows.size() - 1; i >= 0; i--) { final WindowState w = windows.get(i); if (w == targetWin) { return i; } if (!w.mChildWindows.isEmpty()) { if (indexOfWinInWindowList(targetWin, w.mChildWindows) >= 0) { return i; } } } return -1; } private void addWindowToListInOrderLocked(WindowState win, boolean addToToken) { final IWindow client = win.mClient; final WindowToken token = win.mToken; Loading @@ -942,13 +963,13 @@ public class WindowManagerService extends IWindowManager.Stub // Base windows go behind everything else. WindowState lowestWindow = tokenWindowList.get(0); placeWindowBefore(lowestWindow, win); tokenWindowsPos = token.windows.indexOf(lowestWindow); tokenWindowsPos = indexOfWinInWindowList(lowestWindow, token.windows); } else { AppWindowToken atoken = win.mAppToken; WindowState lastWindow = tokenWindowList.get(index); if (atoken != null && lastWindow == atoken.startingWindow) { placeWindowBefore(lastWindow, win); tokenWindowsPos = token.windows.indexOf(lastWindow); tokenWindowsPos = indexOfWinInWindowList(lastWindow, token.windows); } else { int newIdx = findIdxBasedOnAppTokens(win); //there is a window above this one associated with the same Loading @@ -964,7 +985,8 @@ public class WindowManagerService extends IWindowManager.Stub // No window from token found on win's display. tokenWindowsPos = 0; } else { tokenWindowsPos = token.windows.indexOf(windows.get(newIdx)) + 1; tokenWindowsPos = indexOfWinInWindowList( windows.get(newIdx), token.windows) + 1; } mWindowsChanged = true; } Loading services/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams(); final DeathRecipient mDeathRecipient; final WindowState mAttachedWindow; final ArrayList<WindowState> mChildWindows = new ArrayList<WindowState>(); final WindowList mChildWindows = new WindowList(); final int mBaseLayer; final int mSubLayer; final boolean mLayoutAttached; Loading services/java/com/android/server/wm/WindowToken.java +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ class WindowToken { AppWindowToken appWindowToken; // All of the windows associated with this token. final ArrayList<WindowState> windows = new ArrayList<WindowState>(); final WindowList windows = new WindowList(); // Is key dispatching paused for this token? boolean paused = false; Loading Loading
services/java/com/android/server/wm/WindowManagerService.java +25 −3 Original line number Diff line number Diff line Loading @@ -919,6 +919,27 @@ public class WindowManagerService extends IWindowManager.Stub return windowList; } /** * Recursive search through a WindowList and all of its windows' children. * @param targetWin The window to search for. * @param windows The list to search. * @return The index of win in windows or of the window that is an ancestor of win. */ private int indexOfWinInWindowList(WindowState targetWin, WindowList windows) { for (int i = windows.size() - 1; i >= 0; i--) { final WindowState w = windows.get(i); if (w == targetWin) { return i; } if (!w.mChildWindows.isEmpty()) { if (indexOfWinInWindowList(targetWin, w.mChildWindows) >= 0) { return i; } } } return -1; } private void addWindowToListInOrderLocked(WindowState win, boolean addToToken) { final IWindow client = win.mClient; final WindowToken token = win.mToken; Loading @@ -942,13 +963,13 @@ public class WindowManagerService extends IWindowManager.Stub // Base windows go behind everything else. WindowState lowestWindow = tokenWindowList.get(0); placeWindowBefore(lowestWindow, win); tokenWindowsPos = token.windows.indexOf(lowestWindow); tokenWindowsPos = indexOfWinInWindowList(lowestWindow, token.windows); } else { AppWindowToken atoken = win.mAppToken; WindowState lastWindow = tokenWindowList.get(index); if (atoken != null && lastWindow == atoken.startingWindow) { placeWindowBefore(lastWindow, win); tokenWindowsPos = token.windows.indexOf(lastWindow); tokenWindowsPos = indexOfWinInWindowList(lastWindow, token.windows); } else { int newIdx = findIdxBasedOnAppTokens(win); //there is a window above this one associated with the same Loading @@ -964,7 +985,8 @@ public class WindowManagerService extends IWindowManager.Stub // No window from token found on win's display. tokenWindowsPos = 0; } else { tokenWindowsPos = token.windows.indexOf(windows.get(newIdx)) + 1; tokenWindowsPos = indexOfWinInWindowList( windows.get(newIdx), token.windows) + 1; } mWindowsChanged = true; } Loading
services/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams(); final DeathRecipient mDeathRecipient; final WindowState mAttachedWindow; final ArrayList<WindowState> mChildWindows = new ArrayList<WindowState>(); final WindowList mChildWindows = new WindowList(); final int mBaseLayer; final int mSubLayer; final boolean mLayoutAttached; Loading
services/java/com/android/server/wm/WindowToken.java +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ class WindowToken { AppWindowToken appWindowToken; // All of the windows associated with this token. final ArrayList<WindowState> windows = new ArrayList<WindowState>(); final WindowList windows = new WindowList(); // Is key dispatching paused for this token? boolean paused = false; Loading