From dcf4826c522686dbccbc95e57762081c84ff1d6d Mon Sep 17 00:00:00 2001 From: Winson Date: Mon, 25 Jan 2016 17:16:58 -0800 Subject: [PATCH] Fixing notification of the docked stack state for the current user. - When there are multiple users, ensure that we check that there are tasks in the docked stack for each user (instead of just the presence of the docked stack) and re-notify listeners of the state of the docked stack when the user is switched. Change-Id: I911c4a32db187f9cd29d462309bd0cf7febb1993 --- .../recents/misc/SystemServicesProxy.java | 14 ++++++++---- .../server/wm/WindowManagerService.java | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java index 87cfcff1066e3..2882cecc60621 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -378,13 +378,19 @@ public class SystemServicesProxy { ActivityManager.StackInfo stackInfo = null; try { stackInfo = mIam.getStackInfo(DOCKED_STACK_ID); - if (stackInfo != null && stackInfo.userId != getCurrentUser()) { - return false; - } } catch (RemoteException e) { e.printStackTrace(); } - return stackInfo != null; + + if (stackInfo != null) { + int userId = getCurrentUser(); + boolean hasUserTask = false; + for (int i = stackInfo.taskUserIds.length - 1; i >= 0 && !hasUserTask; i--) { + hasUserTask = (stackInfo.taskUserIds[i] == userId); + } + return hasUserTask; + } + return false; } /** diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1021411084c34..64563258fb6b1 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5349,9 +5349,31 @@ public class WindowManagerService extends IWindowManager.Stub rebuildAppWindowListLocked(displayContent); } mWindowPlacerLocked.performSurfacePlacement(); + + // Notify whether the docked stack exists for the current user + getDefaultDisplayContentLocked().mDividerControllerLocked + .notifyDockedStackExistsChanged(hasDockedTasksForUser(newUserId)); } } + /** + * Returns whether there is a docked task for the current user. + */ + boolean hasDockedTasksForUser(int userId) { + final TaskStack stack = mStackIdToStack.get(DOCKED_STACK_ID); + if (stack == null) { + return false; + } + + final ArrayList tasks = stack.getTasks(); + boolean hasUserTask = false; + for (int i = tasks.size() - 1; i >= 0 && !hasUserTask; i--) { + final Task task = tasks.get(i); + hasUserTask = (task.mUserId == userId); + } + return hasUserTask; + } + /* Called by WindowState */ boolean isCurrentProfileLocked(int userId) { if (userId == mCurrentUserId) return true;