summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chong Zhang <chz@google.com> 2016-03-01 14:44:03 -0800
committer Chong Zhang <chz@google.com> 2016-03-01 14:52:58 -0800
commite4fbd328f83ea0ee086731f852cd6c56a3deb733 (patch)
tree5ea41225320c474b021448dbfb4a5de718c0741d
parent1db8850b793109da0fc4a65ec837b1a329072b07 (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
-rw-r--r--core/java/android/app/ActivityManagerNative.java7
-rw-r--r--core/java/android/app/IActivityManager.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java11
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java5
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java8
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) {