diff options
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) { |