diff options
| author | 2016-03-01 14:44:03 -0800 | |
|---|---|---|
| committer | 2016-03-01 14:52:58 -0800 | |
| commit | e4fbd328f83ea0ee086731f852cd6c56a3deb733 (patch) | |
| tree | 5ea41225320c474b021448dbfb4a5de718c0741d | |
| parent | 1db8850b793109da0fc4a65ec837b1a329072b07 (diff) | |
Don't change resize mode if AM didn't dock the task as requested
AM may not docked the task as requested if the task is not resizeable.
Setting resizing in this case would cause unnecessary drag-resizing,
and the resize mode will go out of sync.
bug: 27390258
Change-Id: I72d671ac015f93fde5aaa025fbade93acd9d9ca7
6 files changed, 29 insertions, 17 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index a1f82dea9542..c9678f9b384f 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -792,8 +792,9 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM if (hasBounds) { bounds = Rect.CREATOR.createFromParcel(data); } - moveTaskToDockedStack(taskId, createMode, toTop, animate, bounds); + boolean res = moveTaskToDockedStack(taskId, createMode, toTop, animate, bounds); reply.writeNoException(); + reply.writeInt(res ? 1 : 0); return true; } @@ -3808,7 +3809,7 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } @Override - public void moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate, + public boolean moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate, Rect initialBounds) throws RemoteException { Parcel data = Parcel.obtain(); @@ -3826,8 +3827,10 @@ class ActivityManagerProxy implements IActivityManager } mRemote.transact(MOVE_TASK_TO_DOCKED_STACK_TRANSACTION, data, reply, 0); reply.readException(); + boolean res = reply.readInt() > 0; data.recycle(); reply.recycle(); + return res; } @Override public boolean moveTopActivityToPinnedStack(int stackId, Rect r) diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 2cb615103024..3407a71e44b2 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -143,7 +143,7 @@ public interface IActivityManager extends IInterface { public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot) throws RemoteException; public void moveTaskBackwards(int task) throws RemoteException; public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException; - public void moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate, + public boolean moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate, Rect initialBounds) throws RemoteException; public boolean moveTopActivityToPinnedStack(int stackId, Rect bounds) throws RemoteException; public void resizeStack(int stackId, Rect bounds, boolean allowResizeInDockedMode, diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index 28b2faed58fb..86b03c850da4 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -568,11 +568,14 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener // Make sure we inform DividerView before we actually start the activity so we can change // the resize mode already. - EventBus.getDefault().send(new DockingTopTaskEvent(dragMode)); - ssp.moveTaskToDockedStack(topTaskId, stackCreateMode, initialBounds); - showRecents(false /* triggeredFromAltTab */, - dragMode == NavigationBarGestureHelper.DRAG_MODE_RECENTS, false /* animate */, - true /* reloadTasks*/); + if (ssp.moveTaskToDockedStack(topTaskId, stackCreateMode, initialBounds)) { + EventBus.getDefault().send(new DockingTopTaskEvent(dragMode)); + showRecents( + false /* triggeredFromAltTab */, + dragMode == NavigationBarGestureHelper.DRAG_MODE_RECENTS, + false /* animate */, + true /* reloadTasks*/); + } } /** 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 4b29c2986e4d..7c5a931eee09 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -338,15 +338,18 @@ public class SystemServicesProxy { } /** Docks an already resumed task to the side of the screen. */ - public void moveTaskToDockedStack(int taskId, int createMode, Rect initialBounds) { - if (mIam == null) return; + public boolean moveTaskToDockedStack(int taskId, int createMode, Rect initialBounds) { + if (mIam == null) { + return false; + } try { - mIam.moveTaskToDockedStack(taskId, createMode, true /* onTop */, false /* animate */, - initialBounds); + return mIam.moveTaskToDockedStack( + taskId, createMode, true /* onTop */, false /* animate */, initialBounds); } catch (RemoteException e) { e.printStackTrace(); } + return false; } /** Returns the focused stack id. */ diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 5f40e5c38085..bd2d651c48b0 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -9486,7 +9486,7 @@ public final class ActivityManagerService extends ActivityManagerNative * docked stack. Pass {@code null} to use default bounds. */ @Override - public void moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate, + public boolean moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate, Rect initialBounds) { enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "moveTaskToDockedStack()"); synchronized (this) { @@ -9495,7 +9495,8 @@ public final class ActivityManagerService extends ActivityManagerNative if (DEBUG_STACK) Slog.d(TAG_STACK, "moveTaskToDockedStack: moving task=" + taskId + " to createMode=" + createMode + " toTop=" + toTop); mWindowManager.setDockedStackCreateState(createMode, initialBounds); - mStackSupervisor.moveTaskToStackLocked(taskId, DOCKED_STACK_ID, toTop, !FORCE_FOCUS, + return mStackSupervisor.moveTaskToStackLocked( + taskId, DOCKED_STACK_ID, toTop, !FORCE_FOCUS, "moveTaskToDockedStack", animate); } finally { Binder.restoreCallingIdentity(ident); diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 20f8285cfee7..39a469e038da 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -2213,18 +2213,18 @@ public final class ActivityStackSupervisor implements DisplayListener { return stack; } - void moveTaskToStackLocked(int taskId, int stackId, boolean toTop, boolean forceFocus, + boolean moveTaskToStackLocked(int taskId, int stackId, boolean toTop, boolean forceFocus, String reason, boolean animate) { final TaskRecord task = anyTaskForIdLocked(taskId); if (task == null) { Slog.w(TAG, "moveTaskToStack: no task for id=" + taskId); - return; + return false; } if (task.stack != null && task.stack.mStackId == stackId) { // You are already in the right stack silly... Slog.i(TAG, "moveTaskToStack: taskId=" + taskId + " already in stackId=" + stackId); - return; + return true; } if (stackId == FREEFORM_WORKSPACE_STACK_ID && !mService.mSupportsFreeformWindowManagement) { @@ -2293,6 +2293,8 @@ public final class ActivityStackSupervisor implements DisplayListener { resumeFocusedStackTopActivityLocked(); showNonResizeableDockToastIfNeeded(task, preferredLaunchStackId, stackId); + + return (preferredLaunchStackId == stackId); } boolean moveTopStackActivityToPinnedStackLocked(int stackId, Rect bounds) { |