Loading cmds/am/src/com/android/commands/am/Am.java +17 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public class Am extends BaseCommand { " am stop-user <USER_ID>\n" + " am stack create <TASK_ID> <RELATIVE_STACK_ID> <POSITION> <WEIGHT>\n" + " am stack movetask <STACK_ID> <TASK_ID> [true|false]\n" + " am stack resize <STACK_ID> <WEIGHT>\n" + " am stack dump\n" + "\n" + "am start: start an Activity. Options are:\n" + Loading Loading @@ -199,6 +200,8 @@ public class Am extends BaseCommand { "am stack movetask: move <TASK_ID> from its current stack to the top (true) or" + " bottom (false) of <STACK_ID>.\n" + "\n" + "am stack resize: change <STACK_ID> relative size to new <WEIGHT>.\n" + "\n" + "am stack dump: list the hierarchy of stacks.\n" + "\n" + "<INTENT> specifications include these flags and arguments:\n" + Loading Loading @@ -1481,6 +1484,8 @@ public class Am extends BaseCommand { runStackCreate(); } else if (op.equals("movetask")) { runStackMoveTask(); } else if (op.equals("resize")) { runStackResize(); } else if (op.equals("dump")) { runStackDump(); } else { Loading Loading @@ -1528,6 +1533,18 @@ public class Am extends BaseCommand { } } private void runStackResize() throws Exception { String stackIdStr = nextArgRequired(); int stackId = Integer.valueOf(stackIdStr); String weightStr = nextArgRequired(); float weight = Float.valueOf(weightStr); try { mAm.resizeStack(stackId, weight); } catch (RemoteException e) { } } private void runStackDump() throws Exception { try { List<ActivityManager.StackInfo> stacks = mAm.getStacks(); Loading services/java/com/android/server/am/ActivityManagerService.java +9 −7 Original line number Diff line number Diff line Loading @@ -6326,6 +6326,10 @@ public final class ActivityManagerService extends ActivityManagerNative @Override public void moveTaskToStack(int taskId, int stackId, boolean toTop) { if (stackId == HOME_STACK_ID) { Slog.e(TAG, "moveTaskToStack: Attempt to move task " + taskId + " to home stack", new RuntimeException("here").fillInStackTrace()); } synchronized (this) { mWindowManager.moveTaskToStack(taskId, stackId, toTop); mStackSupervisor.moveTaskToStack(taskId, stackId, toTop); Loading Loading @@ -6388,8 +6392,8 @@ public final class ActivityManagerService extends ActivityManagerNative final void sendPendingThumbnail(ActivityRecord r, IBinder token, Bitmap thumbnail, CharSequence description, boolean always) { TaskRecord task = null; ArrayList receivers = null; TaskRecord task; ArrayList<PendingThumbnailsRecord> receivers = null; //System.out.println("Send pending thumbnail: " + r); Loading @@ -6415,12 +6419,11 @@ public final class ActivityManagerService extends ActivityManagerNative int N = mPendingThumbnails.size(); int i=0; while (i<N) { PendingThumbnailsRecord pr = (PendingThumbnailsRecord)mPendingThumbnails.get(i); PendingThumbnailsRecord pr = mPendingThumbnails.get(i); //System.out.println("Looking in " + pr.pendingRecords); if (pr.pendingRecords.remove(r)) { if (receivers == null) { receivers = new ArrayList(); receivers = new ArrayList<PendingThumbnailsRecord>(); } receivers.add(pr); if (pr.pendingRecords.size() == 0) { Loading @@ -6438,8 +6441,7 @@ public final class ActivityManagerService extends ActivityManagerNative final int N = receivers.size(); for (int i=0; i<N; i++) { try { PendingThumbnailsRecord pr = (PendingThumbnailsRecord)receivers.get(i); PendingThumbnailsRecord pr = receivers.get(i); pr.receiver.newThumbnail( task != null ? task.taskId : -1, thumbnail, description); if (pr.finished) { Loading services/java/com/android/server/am/ActivityStackSupervisor.java +12 −15 Original line number Diff line number Diff line Loading @@ -305,6 +305,7 @@ public class ActivityStackSupervisor { final int nextStackId = mWindowManager.removeStack(stackId); // TODO: Perhaps we need to let the ActivityManager determine the next focus... if (mFocusedStack.mStackId == stackId) { // If this is the last app stack, set mFocusedStack to null. mFocusedStack = nextStackId == HOME_STACK_ID ? null : getStack(nextStackId); } } Loading Loading @@ -455,19 +456,16 @@ public class ActivityStackSupervisor { } ActivityRecord topRunningActivityLocked() { ActivityRecord r = null; if (mFocusedStack != null) { r = mFocusedStack.topRunningActivityLocked(null); final ActivityStack focusedStack = getFocusedStack(); ActivityRecord r = focusedStack.topRunningActivityLocked(null); if (r != null) { return r; } } for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = mStacks.get(stackNdx); if (stack.mCurrentUser != mCurrentUser) { continue; } if (stack != mFocusedStack && isFrontStack(stack)) { if (stack.mCurrentUser == mCurrentUser && stack != focusedStack && isFrontStack(stack)) { r = stack.topRunningActivityLocked(null); if (r != null) { return r; Loading Loading @@ -1162,7 +1160,7 @@ public class ActivityStackSupervisor { } ActivityStack getCorrectStack(ActivityRecord r) { if (!r.isHomeActivity) { if (!r.isHomeActivity || (r.task != null && !r.task.isHomeTask())) { int stackNdx; for (stackNdx = mStacks.size() - 1; stackNdx > 0; --stackNdx) { if (mStacks.get(stackNdx).mCurrentUser == mCurrentUser) { Loading @@ -1184,7 +1182,7 @@ public class ActivityStackSupervisor { if (r == null) { return; } if (r.isHomeActivity) { if (r.isHomeActivity || (r.task != null && r.task.isHomeTask())) { if (mStackState != STACK_STATE_HOME_IN_FRONT) { mStackState = STACK_STATE_HOME_TO_FRONT; } Loading Loading @@ -1598,10 +1596,9 @@ public class ActivityStackSupervisor { // This not being started from an existing activity, and not part // of a new task... just put it in the top task, though these days // this case should never happen. ActivityStack lastStack = getLastStack(); targetStack = lastStack != null ? lastStack : mHomeStack; targetStack = getCorrectStack(r); moveHomeStack(targetStack.isHomeStack()); ActivityRecord prev = lastStack == null ? null : targetStack.topActivity(); ActivityRecord prev = targetStack.topActivity(); r.setTask(prev != null ? prev.task : targetStack.createTaskRecord(getNextTaskId(), r.info, intent, true), null, true); Loading services/java/com/android/server/am/TaskRecord.java +17 −18 Original line number Diff line number Diff line Loading @@ -57,6 +57,8 @@ class TaskRecord extends ThumbnailHolder { /** Current stack */ ActivityStack stack; private boolean mHomeTask; TaskRecord(int _taskId, ActivityInfo info, Intent _intent, ActivityStack _stack) { taskId = _taskId; affinity = info.taskAffinity; Loading Loading @@ -153,19 +155,16 @@ class TaskRecord extends ThumbnailHolder { } void addActivityToTop(ActivityRecord r) { // Remove r first, and if it wasn't already in the list and it's fullscreen, count it. if (!mActivities.remove(r) && r.fullscreen) { // Was not previously in list. numFullscreen++; } mActivities.add(r); addActivityAtIndex(mActivities.size(), r); } void addActivityAtIndex(int index, ActivityRecord r) { // Remove r first, and if it wasn't already in the list and it's fullscreen, count it. if (!mActivities.remove(r) && r.fullscreen) { // Was not previously in list. numFullscreen++; } mHomeTask = r.isHomeActivity; mActivities.add(index, r); } Loading @@ -183,10 +182,9 @@ class TaskRecord extends ThumbnailHolder { * task starting at a specified index. */ final void performClearTaskAtIndexLocked(int activityNdx) { final ArrayList<ActivityRecord> activities = mActivities; int numActivities = activities.size(); int numActivities = mActivities.size(); for ( ; activityNdx < numActivities; ++activityNdx) { final ActivityRecord r = activities.get(activityNdx); final ActivityRecord r = mActivities.get(activityNdx); if (r.finishing) { continue; } Loading Loading @@ -216,19 +214,18 @@ class TaskRecord extends ThumbnailHolder { * or null if none was found. */ final ActivityRecord performClearTaskLocked(ActivityRecord newR, int launchFlags) { final ArrayList<ActivityRecord> activities = mActivities; int numActivities = activities.size(); int numActivities = mActivities.size(); for (int activityNdx = numActivities - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = activities.get(activityNdx); ActivityRecord r = mActivities.get(activityNdx); if (r.finishing) { continue; } if (r.realActivity.equals(newR.realActivity)) { // Here it is! Now finish everything in front... ActivityRecord ret = r; final ActivityRecord ret = r; for (++activityNdx; activityNdx < numActivities; ++activityNdx) { r = activities.get(activityNdx); r = mActivities.get(activityNdx); if (r.finishing) { continue; } Loading @@ -249,10 +246,8 @@ class TaskRecord extends ThumbnailHolder { if (ret.launchMode == ActivityInfo.LAUNCH_MULTIPLE && (launchFlags & Intent.FLAG_ACTIVITY_SINGLE_TOP) == 0) { if (!ret.finishing) { if (activities.contains(ret)) { stack.finishActivityLocked(ret, Activity.RESULT_CANCELED, null, "clear", false); } return null; } } Loading Loading @@ -321,6 +316,10 @@ class TaskRecord extends ThumbnailHolder { return subtask.activity; } boolean isHomeTask() { return mHomeTask; } public TaskAccessInfo getTaskAccessInfoLocked(boolean inclThumbs) { final TaskAccessInfo thumbs = new TaskAccessInfo(); // How many different sub-thumbnails? Loading Loading
cmds/am/src/com/android/commands/am/Am.java +17 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public class Am extends BaseCommand { " am stop-user <USER_ID>\n" + " am stack create <TASK_ID> <RELATIVE_STACK_ID> <POSITION> <WEIGHT>\n" + " am stack movetask <STACK_ID> <TASK_ID> [true|false]\n" + " am stack resize <STACK_ID> <WEIGHT>\n" + " am stack dump\n" + "\n" + "am start: start an Activity. Options are:\n" + Loading Loading @@ -199,6 +200,8 @@ public class Am extends BaseCommand { "am stack movetask: move <TASK_ID> from its current stack to the top (true) or" + " bottom (false) of <STACK_ID>.\n" + "\n" + "am stack resize: change <STACK_ID> relative size to new <WEIGHT>.\n" + "\n" + "am stack dump: list the hierarchy of stacks.\n" + "\n" + "<INTENT> specifications include these flags and arguments:\n" + Loading Loading @@ -1481,6 +1484,8 @@ public class Am extends BaseCommand { runStackCreate(); } else if (op.equals("movetask")) { runStackMoveTask(); } else if (op.equals("resize")) { runStackResize(); } else if (op.equals("dump")) { runStackDump(); } else { Loading Loading @@ -1528,6 +1533,18 @@ public class Am extends BaseCommand { } } private void runStackResize() throws Exception { String stackIdStr = nextArgRequired(); int stackId = Integer.valueOf(stackIdStr); String weightStr = nextArgRequired(); float weight = Float.valueOf(weightStr); try { mAm.resizeStack(stackId, weight); } catch (RemoteException e) { } } private void runStackDump() throws Exception { try { List<ActivityManager.StackInfo> stacks = mAm.getStacks(); Loading
services/java/com/android/server/am/ActivityManagerService.java +9 −7 Original line number Diff line number Diff line Loading @@ -6326,6 +6326,10 @@ public final class ActivityManagerService extends ActivityManagerNative @Override public void moveTaskToStack(int taskId, int stackId, boolean toTop) { if (stackId == HOME_STACK_ID) { Slog.e(TAG, "moveTaskToStack: Attempt to move task " + taskId + " to home stack", new RuntimeException("here").fillInStackTrace()); } synchronized (this) { mWindowManager.moveTaskToStack(taskId, stackId, toTop); mStackSupervisor.moveTaskToStack(taskId, stackId, toTop); Loading Loading @@ -6388,8 +6392,8 @@ public final class ActivityManagerService extends ActivityManagerNative final void sendPendingThumbnail(ActivityRecord r, IBinder token, Bitmap thumbnail, CharSequence description, boolean always) { TaskRecord task = null; ArrayList receivers = null; TaskRecord task; ArrayList<PendingThumbnailsRecord> receivers = null; //System.out.println("Send pending thumbnail: " + r); Loading @@ -6415,12 +6419,11 @@ public final class ActivityManagerService extends ActivityManagerNative int N = mPendingThumbnails.size(); int i=0; while (i<N) { PendingThumbnailsRecord pr = (PendingThumbnailsRecord)mPendingThumbnails.get(i); PendingThumbnailsRecord pr = mPendingThumbnails.get(i); //System.out.println("Looking in " + pr.pendingRecords); if (pr.pendingRecords.remove(r)) { if (receivers == null) { receivers = new ArrayList(); receivers = new ArrayList<PendingThumbnailsRecord>(); } receivers.add(pr); if (pr.pendingRecords.size() == 0) { Loading @@ -6438,8 +6441,7 @@ public final class ActivityManagerService extends ActivityManagerNative final int N = receivers.size(); for (int i=0; i<N; i++) { try { PendingThumbnailsRecord pr = (PendingThumbnailsRecord)receivers.get(i); PendingThumbnailsRecord pr = receivers.get(i); pr.receiver.newThumbnail( task != null ? task.taskId : -1, thumbnail, description); if (pr.finished) { Loading
services/java/com/android/server/am/ActivityStackSupervisor.java +12 −15 Original line number Diff line number Diff line Loading @@ -305,6 +305,7 @@ public class ActivityStackSupervisor { final int nextStackId = mWindowManager.removeStack(stackId); // TODO: Perhaps we need to let the ActivityManager determine the next focus... if (mFocusedStack.mStackId == stackId) { // If this is the last app stack, set mFocusedStack to null. mFocusedStack = nextStackId == HOME_STACK_ID ? null : getStack(nextStackId); } } Loading Loading @@ -455,19 +456,16 @@ public class ActivityStackSupervisor { } ActivityRecord topRunningActivityLocked() { ActivityRecord r = null; if (mFocusedStack != null) { r = mFocusedStack.topRunningActivityLocked(null); final ActivityStack focusedStack = getFocusedStack(); ActivityRecord r = focusedStack.topRunningActivityLocked(null); if (r != null) { return r; } } for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = mStacks.get(stackNdx); if (stack.mCurrentUser != mCurrentUser) { continue; } if (stack != mFocusedStack && isFrontStack(stack)) { if (stack.mCurrentUser == mCurrentUser && stack != focusedStack && isFrontStack(stack)) { r = stack.topRunningActivityLocked(null); if (r != null) { return r; Loading Loading @@ -1162,7 +1160,7 @@ public class ActivityStackSupervisor { } ActivityStack getCorrectStack(ActivityRecord r) { if (!r.isHomeActivity) { if (!r.isHomeActivity || (r.task != null && !r.task.isHomeTask())) { int stackNdx; for (stackNdx = mStacks.size() - 1; stackNdx > 0; --stackNdx) { if (mStacks.get(stackNdx).mCurrentUser == mCurrentUser) { Loading @@ -1184,7 +1182,7 @@ public class ActivityStackSupervisor { if (r == null) { return; } if (r.isHomeActivity) { if (r.isHomeActivity || (r.task != null && r.task.isHomeTask())) { if (mStackState != STACK_STATE_HOME_IN_FRONT) { mStackState = STACK_STATE_HOME_TO_FRONT; } Loading Loading @@ -1598,10 +1596,9 @@ public class ActivityStackSupervisor { // This not being started from an existing activity, and not part // of a new task... just put it in the top task, though these days // this case should never happen. ActivityStack lastStack = getLastStack(); targetStack = lastStack != null ? lastStack : mHomeStack; targetStack = getCorrectStack(r); moveHomeStack(targetStack.isHomeStack()); ActivityRecord prev = lastStack == null ? null : targetStack.topActivity(); ActivityRecord prev = targetStack.topActivity(); r.setTask(prev != null ? prev.task : targetStack.createTaskRecord(getNextTaskId(), r.info, intent, true), null, true); Loading
services/java/com/android/server/am/TaskRecord.java +17 −18 Original line number Diff line number Diff line Loading @@ -57,6 +57,8 @@ class TaskRecord extends ThumbnailHolder { /** Current stack */ ActivityStack stack; private boolean mHomeTask; TaskRecord(int _taskId, ActivityInfo info, Intent _intent, ActivityStack _stack) { taskId = _taskId; affinity = info.taskAffinity; Loading Loading @@ -153,19 +155,16 @@ class TaskRecord extends ThumbnailHolder { } void addActivityToTop(ActivityRecord r) { // Remove r first, and if it wasn't already in the list and it's fullscreen, count it. if (!mActivities.remove(r) && r.fullscreen) { // Was not previously in list. numFullscreen++; } mActivities.add(r); addActivityAtIndex(mActivities.size(), r); } void addActivityAtIndex(int index, ActivityRecord r) { // Remove r first, and if it wasn't already in the list and it's fullscreen, count it. if (!mActivities.remove(r) && r.fullscreen) { // Was not previously in list. numFullscreen++; } mHomeTask = r.isHomeActivity; mActivities.add(index, r); } Loading @@ -183,10 +182,9 @@ class TaskRecord extends ThumbnailHolder { * task starting at a specified index. */ final void performClearTaskAtIndexLocked(int activityNdx) { final ArrayList<ActivityRecord> activities = mActivities; int numActivities = activities.size(); int numActivities = mActivities.size(); for ( ; activityNdx < numActivities; ++activityNdx) { final ActivityRecord r = activities.get(activityNdx); final ActivityRecord r = mActivities.get(activityNdx); if (r.finishing) { continue; } Loading Loading @@ -216,19 +214,18 @@ class TaskRecord extends ThumbnailHolder { * or null if none was found. */ final ActivityRecord performClearTaskLocked(ActivityRecord newR, int launchFlags) { final ArrayList<ActivityRecord> activities = mActivities; int numActivities = activities.size(); int numActivities = mActivities.size(); for (int activityNdx = numActivities - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = activities.get(activityNdx); ActivityRecord r = mActivities.get(activityNdx); if (r.finishing) { continue; } if (r.realActivity.equals(newR.realActivity)) { // Here it is! Now finish everything in front... ActivityRecord ret = r; final ActivityRecord ret = r; for (++activityNdx; activityNdx < numActivities; ++activityNdx) { r = activities.get(activityNdx); r = mActivities.get(activityNdx); if (r.finishing) { continue; } Loading @@ -249,10 +246,8 @@ class TaskRecord extends ThumbnailHolder { if (ret.launchMode == ActivityInfo.LAUNCH_MULTIPLE && (launchFlags & Intent.FLAG_ACTIVITY_SINGLE_TOP) == 0) { if (!ret.finishing) { if (activities.contains(ret)) { stack.finishActivityLocked(ret, Activity.RESULT_CANCELED, null, "clear", false); } return null; } } Loading Loading @@ -321,6 +316,10 @@ class TaskRecord extends ThumbnailHolder { return subtask.activity; } boolean isHomeTask() { return mHomeTask; } public TaskAccessInfo getTaskAccessInfoLocked(boolean inclThumbs) { final TaskAccessInfo thumbs = new TaskAccessInfo(); // How many different sub-thumbnails? Loading