diff options
7 files changed, 26 insertions, 38 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java index 24ab5063d94e..15bcaf834f72 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java @@ -97,7 +97,7 @@ public class WindowManagerProxy { @Override public void run() { try { - ActivityManagerNative.getDefault().resizeStack(DOCKED_STACK_ID, null, true, false, + ActivityManagerNative.getDefault().resizeStack(DOCKED_STACK_ID, null, true, true, false); } catch (RemoteException e) { Log.w(TAG, "Failed to resize stack: " + e); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 07dc4fd5fb7c..21c1295db940 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1115,16 +1115,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, Point realSize = new Point(); mContext.getSystemService(DisplayManager.class).getDisplay(Display.DEFAULT_DISPLAY) .getRealSize(realSize); - Rect initialBounds; - - // Hack level over 9000: Make it one pixel smaller so activity manager doesn't - // dismiss it immediately again. Remove once b/26777526 is fixed. - if (mContext.getResources().getConfiguration().orientation - == Configuration.ORIENTATION_LANDSCAPE) { - initialBounds = new Rect(0, 0, realSize.x - 1, realSize.y); - } else { - initialBounds = new Rect(0, 0, realSize.x, realSize.y - 1); - } + Rect initialBounds= new Rect(0, 0, realSize.x, realSize.y); boolean docked = mRecents.dockTopTask(NavigationBarGestureHelper.DRAG_MODE_NONE, ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT, initialBounds); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 1506524d1745..9874cc496a68 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -252,10 +252,12 @@ import static android.Manifest.permission.START_TASKS_FROM_RECENTS; import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT; import static android.app.ActivityManager.RESIZE_MODE_PRESERVE_WINDOW; import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; +import static android.app.ActivityManager.StackId.FIRST_STATIC_STACK_ID; import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.HOME_STACK_ID; import static android.app.ActivityManager.StackId.INVALID_STACK_ID; +import static android.app.ActivityManager.StackId.LAST_STATIC_STACK_ID; import static android.app.ActivityManager.StackId.PINNED_STACK_ID; import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT; import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE; @@ -17632,6 +17634,22 @@ public final class ActivityManagerService extends ActivityManagerNative final long origId = Binder.clearCallingIdentity(); final ActivityStack stack = mStackSupervisor.getStack(fromStackId); if (stack != null) { + if (fromStackId == DOCKED_STACK_ID) { + + // We are moving all tasks from the docked stack to the fullscreen stack, which + // is dismissing the docked stack, so resize all other stacks to fullscreen here + // already so we don't end up with resize trashing. + for (int i = FIRST_STATIC_STACK_ID; i <= LAST_STATIC_STACK_ID; i++) { + if (StackId.isResizeableByDockedStack(i)) { + ActivityStack otherStack = mStackSupervisor.getStack(i); + if (otherStack != null) { + mStackSupervisor.resizeStackLocked(i, + null, null, null, PRESERVE_WINDOWS, + true /* allowResizeInDockedMode */); + } + } + } + } final ArrayList<TaskRecord> tasks = stack.getAllTasks(); final int size = tasks.size(); if (onTop) { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 4f60ff629161..3cc9ba8719e8 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -1889,12 +1889,6 @@ public final class ActivityStackSupervisor implements DisplayListener { private void resizeStackUncheckedLocked(ActivityStack stack, Rect bounds, Rect tempTaskBounds, Rect tempTaskInsetBounds) { - if (bounds != null && mWindowManager.isFullscreenBounds(stack.mStackId, bounds)) { - // The bounds passed in corresponds to the fullscreen bounds which we normally - // represent with null. Go ahead and set it to null so that all tasks configuration - // can have the right fullscreen state. - bounds = null; - } bounds = TaskRecord.validateBounds(bounds); mTmpBounds.clear(); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index be1b85c2f9b5..a06d3fc74393 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -289,11 +289,9 @@ class Task implements DimLayer.DimLayerUser { if (displayContent != null) { displayContent.getLogicalDisplayRect(mTmpRect); rotation = displayContent.getDisplayInfo().rotation; - if (bounds == null) { + mFullscreen = bounds == null; + if (mFullscreen) { bounds = mTmpRect; - mFullscreen = true; - } else { - mFullscreen = mTmpRect.equals(bounds); } } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index ecc13648aeb7..5b939799cec3 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -255,11 +255,9 @@ public class TaskStack implements DimLayer.DimLayerUser, if (mDisplayContent != null) { mDisplayContent.getLogicalDisplayRect(mTmpRect); rotation = mDisplayContent.getDisplayInfo().rotation; - if (bounds == null) { + mFullscreen = bounds == null; + if (mFullscreen) { bounds = mTmpRect; - mFullscreen = true; - } else { - mFullscreen = mTmpRect.equals(bounds); } } @@ -865,14 +863,14 @@ public class TaskStack implements DimLayer.DimLayerUser, final int orientation = mService.mCurConfiguration.orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT) { // Portrait mode, docked either at the top or the bottom. - if (bounds.top - mTmpRect.top < mTmpRect.bottom - bounds.bottom) { + if (bounds.top - mTmpRect.top <= mTmpRect.bottom - bounds.bottom) { return DOCKED_TOP; } else { return DOCKED_BOTTOM; } } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { // Landscape mode, docked either on the left or on the right. - if (bounds.left - mTmpRect.left < mTmpRect.right - bounds.right) { + if (bounds.left - mTmpRect.left <= mTmpRect.right - bounds.right) { return DOCKED_LEFT; } else { return DOCKED_RIGHT; diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index a9d175dab722..f9a37903f2b5 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4847,17 +4847,6 @@ public class WindowManagerService extends IWindowManager.Stub } } - /** Returns true if the input bounds corresponds to the fullscreen bounds the stack is on. */ - public boolean isFullscreenBounds(int stackId, Rect bounds) { - synchronized (mWindowMap) { - final TaskStack stack = mStackIdToStack.get(stackId); - if (stack == null || bounds == null) { - return true; - } - return stack.isFullscreenBounds(bounds); - } - } - /** * Re-sizes a stack and its containing tasks. * @param stackId Id of stack to resize. |