Loading core/java/android/view/IWindowManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ interface IWindowManager void addAppToken(int addPos, IApplicationToken token, int groupId, int stackId, int requestedOrientation, boolean fullscreen, boolean showWhenLocked, int userId, int configChanges, boolean voiceInteraction, boolean launchTaskBehind); void setAppGroupId(IBinder token, int groupId); void setAppTask(IBinder token, int taskId); void setAppOrientation(IApplicationToken token, int requestedOrientation); int getAppOrientation(IApplicationToken token); void setFocusedApp(IBinder token, boolean moveFocusNow); Loading services/core/java/com/android/server/am/ActivityStack.java +3 −3 Original line number Diff line number Diff line Loading @@ -2195,7 +2195,7 @@ final class ActivityStack { } final int targetTaskId = targetTask.taskId; mWindowManager.setAppGroupId(target.appToken, targetTaskId); mWindowManager.setAppTask(target.appToken, targetTaskId); boolean noOptions = canMoveOptions; final int start = replyChainEnd < 0 ? i : replyChainEnd; Loading @@ -2220,7 +2220,7 @@ final class ActivityStack { p.setTask(targetTask, null); targetTask.addActivityAtBottom(p); mWindowManager.setAppGroupId(p.appToken, targetTaskId); mWindowManager.setAppTask(p.appToken, targetTaskId); } mWindowManager.moveTaskToBottom(targetTaskId); Loading Loading @@ -2360,7 +2360,7 @@ final class ActivityStack { new RuntimeException("here").fillInStackTrace()); if (DEBUG_TASKS) Slog.v(TAG, "Pulling activity " + p + " from " + srcPos + " in to resetting task " + task); mWindowManager.setAppGroupId(p.appToken, taskId); mWindowManager.setAppTask(p.appToken, taskId); } mWindowManager.moveTaskToTop(taskId); if (VALIDATE_TOKENS) { Loading services/core/java/com/android/server/wm/AppWindowToken.java +5 −4 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ class AppWindowToken extends WindowToken { final boolean voiceInteraction; int groupId = -1; Task mTask; boolean appFullscreen; int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean layoutConfigChanges; Loading Loading @@ -256,7 +256,8 @@ class AppWindowToken extends WindowToken { mIsExiting = false; removeAllWindows(); final Task task = service.mTaskIdToTask.get(groupId); // Use local variable because removeAppToken will null out mTask. final Task task = mTask; if (task != null) { if (!task.removeAppToken(this)) { Slog.e(WindowManagerService.TAG, "removeAppFromTaskLocked: token=" + this Loading Loading @@ -295,8 +296,8 @@ class AppWindowToken extends WindowToken { if (allAppWindows.size() > 0) { pw.print(prefix); pw.print("allAppWindows="); pw.println(allAppWindows); } pw.print(prefix); pw.print("groupId="); pw.print(groupId); pw.print(" appFullscreen="); pw.print(appFullscreen); pw.print(prefix); pw.print("task="); pw.println(mTask); pw.print(prefix); pw.print(" appFullscreen="); pw.print(appFullscreen); pw.print(" requestedOrientation="); pw.println(requestedOrientation); pw.print(prefix); pw.print("hiddenRequested="); pw.print(hiddenRequested); pw.print(" clientHidden="); pw.print(clientHidden); Loading services/core/java/com/android/server/wm/DisplayContent.java +1 −1 Original line number Diff line number Diff line Loading @@ -379,7 +379,7 @@ class DisplayContent { ArrayList<Task> tasks = stack.getTasks(); for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { final Task task = tasks.get(taskNdx); pw.print(" mTaskId="); pw.println(task.taskId); pw.print(" mTaskId="); pw.println(task.mTaskId); AppTokenList tokens = task.mAppTokens; for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx, ++ndx) { final AppWindowToken wtoken = tokens.get(tokenNdx); Loading services/core/java/com/android/server/wm/Task.java +22 −14 Original line number Diff line number Diff line Loading @@ -26,14 +26,13 @@ import com.android.server.EventLogTags; class Task { TaskStack mStack; final AppTokenList mAppTokens = new AppTokenList(); final int taskId; final int mTaskId; final int mUserId; boolean mDeferRemoval = false; final WindowManagerService mService; Task(AppWindowToken wtoken, TaskStack stack, int userId, WindowManagerService service) { taskId = wtoken.groupId; mAppTokens.add(wtoken); Task(int taskId, TaskStack stack, int userId, WindowManagerService service) { mTaskId = taskId; mStack = stack; mUserId = userId; mService = service; Loading @@ -45,38 +44,47 @@ class Task { void addAppToken(int addPos, AppWindowToken wtoken) { final int lastPos = mAppTokens.size(); if (addPos >= lastPos) { addPos = lastPos; } else { for (int pos = 0; pos < lastPos && pos < addPos; ++pos) { if (mAppTokens.get(pos).removed) { // addPos assumes removed tokens are actually gone. ++addPos; } } } mAppTokens.add(addPos, wtoken); wtoken.mTask = this; mDeferRemoval = false; } void removeLocked() { if (!mAppTokens.isEmpty() && mStack.isAnimating()) { if (DEBUG_STACK) Slog.i(TAG, "removeTask: deferring removing taskId=" + taskId); if (DEBUG_STACK) Slog.i(TAG, "removeTask: deferring removing taskId=" + mTaskId); mDeferRemoval = true; return; } if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + taskId); EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, taskId, "removeTask"); if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + mTaskId); EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "removeTask"); mDeferRemoval = false; mStack.removeTask(this); mService.mTaskIdToTask.delete(taskId); mService.mTaskIdToTask.delete(mTaskId); } boolean removeAppToken(AppWindowToken wtoken) { boolean removed = mAppTokens.remove(wtoken); if (mAppTokens.size() == 0) { EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, taskId, EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, mTaskId, "removeAppToken: last token"); if (mDeferRemoval) { removeLocked(); } } wtoken.mTask = null; /* Leave mTaskId for now, it might be useful for debug wtoken.mTaskId = -1; */ return removed; } Loading @@ -88,6 +96,6 @@ class Task { @Override public String toString() { return "{taskId=" + taskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}"; return "{taskId=" + mTaskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}"; } } Loading
core/java/android/view/IWindowManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ interface IWindowManager void addAppToken(int addPos, IApplicationToken token, int groupId, int stackId, int requestedOrientation, boolean fullscreen, boolean showWhenLocked, int userId, int configChanges, boolean voiceInteraction, boolean launchTaskBehind); void setAppGroupId(IBinder token, int groupId); void setAppTask(IBinder token, int taskId); void setAppOrientation(IApplicationToken token, int requestedOrientation); int getAppOrientation(IApplicationToken token); void setFocusedApp(IBinder token, boolean moveFocusNow); Loading
services/core/java/com/android/server/am/ActivityStack.java +3 −3 Original line number Diff line number Diff line Loading @@ -2195,7 +2195,7 @@ final class ActivityStack { } final int targetTaskId = targetTask.taskId; mWindowManager.setAppGroupId(target.appToken, targetTaskId); mWindowManager.setAppTask(target.appToken, targetTaskId); boolean noOptions = canMoveOptions; final int start = replyChainEnd < 0 ? i : replyChainEnd; Loading @@ -2220,7 +2220,7 @@ final class ActivityStack { p.setTask(targetTask, null); targetTask.addActivityAtBottom(p); mWindowManager.setAppGroupId(p.appToken, targetTaskId); mWindowManager.setAppTask(p.appToken, targetTaskId); } mWindowManager.moveTaskToBottom(targetTaskId); Loading Loading @@ -2360,7 +2360,7 @@ final class ActivityStack { new RuntimeException("here").fillInStackTrace()); if (DEBUG_TASKS) Slog.v(TAG, "Pulling activity " + p + " from " + srcPos + " in to resetting task " + task); mWindowManager.setAppGroupId(p.appToken, taskId); mWindowManager.setAppTask(p.appToken, taskId); } mWindowManager.moveTaskToTop(taskId); if (VALIDATE_TOKENS) { Loading
services/core/java/com/android/server/wm/AppWindowToken.java +5 −4 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ class AppWindowToken extends WindowToken { final boolean voiceInteraction; int groupId = -1; Task mTask; boolean appFullscreen; int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean layoutConfigChanges; Loading Loading @@ -256,7 +256,8 @@ class AppWindowToken extends WindowToken { mIsExiting = false; removeAllWindows(); final Task task = service.mTaskIdToTask.get(groupId); // Use local variable because removeAppToken will null out mTask. final Task task = mTask; if (task != null) { if (!task.removeAppToken(this)) { Slog.e(WindowManagerService.TAG, "removeAppFromTaskLocked: token=" + this Loading Loading @@ -295,8 +296,8 @@ class AppWindowToken extends WindowToken { if (allAppWindows.size() > 0) { pw.print(prefix); pw.print("allAppWindows="); pw.println(allAppWindows); } pw.print(prefix); pw.print("groupId="); pw.print(groupId); pw.print(" appFullscreen="); pw.print(appFullscreen); pw.print(prefix); pw.print("task="); pw.println(mTask); pw.print(prefix); pw.print(" appFullscreen="); pw.print(appFullscreen); pw.print(" requestedOrientation="); pw.println(requestedOrientation); pw.print(prefix); pw.print("hiddenRequested="); pw.print(hiddenRequested); pw.print(" clientHidden="); pw.print(clientHidden); Loading
services/core/java/com/android/server/wm/DisplayContent.java +1 −1 Original line number Diff line number Diff line Loading @@ -379,7 +379,7 @@ class DisplayContent { ArrayList<Task> tasks = stack.getTasks(); for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { final Task task = tasks.get(taskNdx); pw.print(" mTaskId="); pw.println(task.taskId); pw.print(" mTaskId="); pw.println(task.mTaskId); AppTokenList tokens = task.mAppTokens; for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx, ++ndx) { final AppWindowToken wtoken = tokens.get(tokenNdx); Loading
services/core/java/com/android/server/wm/Task.java +22 −14 Original line number Diff line number Diff line Loading @@ -26,14 +26,13 @@ import com.android.server.EventLogTags; class Task { TaskStack mStack; final AppTokenList mAppTokens = new AppTokenList(); final int taskId; final int mTaskId; final int mUserId; boolean mDeferRemoval = false; final WindowManagerService mService; Task(AppWindowToken wtoken, TaskStack stack, int userId, WindowManagerService service) { taskId = wtoken.groupId; mAppTokens.add(wtoken); Task(int taskId, TaskStack stack, int userId, WindowManagerService service) { mTaskId = taskId; mStack = stack; mUserId = userId; mService = service; Loading @@ -45,38 +44,47 @@ class Task { void addAppToken(int addPos, AppWindowToken wtoken) { final int lastPos = mAppTokens.size(); if (addPos >= lastPos) { addPos = lastPos; } else { for (int pos = 0; pos < lastPos && pos < addPos; ++pos) { if (mAppTokens.get(pos).removed) { // addPos assumes removed tokens are actually gone. ++addPos; } } } mAppTokens.add(addPos, wtoken); wtoken.mTask = this; mDeferRemoval = false; } void removeLocked() { if (!mAppTokens.isEmpty() && mStack.isAnimating()) { if (DEBUG_STACK) Slog.i(TAG, "removeTask: deferring removing taskId=" + taskId); if (DEBUG_STACK) Slog.i(TAG, "removeTask: deferring removing taskId=" + mTaskId); mDeferRemoval = true; return; } if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + taskId); EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, taskId, "removeTask"); if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + mTaskId); EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "removeTask"); mDeferRemoval = false; mStack.removeTask(this); mService.mTaskIdToTask.delete(taskId); mService.mTaskIdToTask.delete(mTaskId); } boolean removeAppToken(AppWindowToken wtoken) { boolean removed = mAppTokens.remove(wtoken); if (mAppTokens.size() == 0) { EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, taskId, EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, mTaskId, "removeAppToken: last token"); if (mDeferRemoval) { removeLocked(); } } wtoken.mTask = null; /* Leave mTaskId for now, it might be useful for debug wtoken.mTaskId = -1; */ return removed; } Loading @@ -88,6 +96,6 @@ class Task { @Override public String toString() { return "{taskId=" + taskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}"; return "{taskId=" + mTaskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}"; } }