Merge "Reduce parceled data size between system & sysui" into rvc-dev am: b16c3b1fb5 am: 598192fd2c
Change-Id: I1bac516c8a0f500055de66414c9a11c90a962c4b
This commit is contained in:
@@ -2800,14 +2800,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
userId = handleIncomingUser(Binder.getCallingPid(), callingUid, userId, "getRecentTasks");
|
||||
final boolean allowed = isGetTasksAllowed("getRecentTasks", Binder.getCallingPid(),
|
||||
callingUid);
|
||||
final boolean detailed = checkGetTasksPermission(
|
||||
android.Manifest.permission.GET_DETAILED_TASKS, Binder.getCallingPid(),
|
||||
UserHandle.getAppId(callingUid))
|
||||
== PackageManager.PERMISSION_GRANTED;
|
||||
|
||||
synchronized (mGlobalLock) {
|
||||
return mRecentTasks.getRecentTasks(maxNum, flags, allowed, detailed, userId,
|
||||
callingUid);
|
||||
return mRecentTasks.getRecentTasks(maxNum, flags, allowed, userId, callingUid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,6 @@ import android.content.pm.ParceledListSlice;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
@@ -874,16 +873,16 @@ class RecentTasks {
|
||||
* @return the list of recent tasks for presentation.
|
||||
*/
|
||||
ParceledListSlice<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags,
|
||||
boolean getTasksAllowed, boolean getDetailedTasks, int userId, int callingUid) {
|
||||
boolean getTasksAllowed, int userId, int callingUid) {
|
||||
return new ParceledListSlice<>(getRecentTasksImpl(maxNum, flags, getTasksAllowed,
|
||||
getDetailedTasks, userId, callingUid));
|
||||
userId, callingUid));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the list of recent tasks for presentation.
|
||||
*/
|
||||
private ArrayList<ActivityManager.RecentTaskInfo> getRecentTasksImpl(int maxNum, int flags,
|
||||
boolean getTasksAllowed, boolean getDetailedTasks, int userId, int callingUid) {
|
||||
boolean getTasksAllowed, int userId, int callingUid) {
|
||||
final boolean withExcluded = (flags & RECENT_WITH_EXCLUDED) != 0;
|
||||
|
||||
if (!isUserRunning(userId, FLAG_AND_UNLOCKED)) {
|
||||
@@ -961,12 +960,7 @@ class RecentTasks {
|
||||
continue;
|
||||
}
|
||||
|
||||
final ActivityManager.RecentTaskInfo rti = createRecentTaskInfo(task);
|
||||
if (!getDetailedTasks) {
|
||||
rti.baseIntent.replaceExtras((Bundle) null);
|
||||
}
|
||||
|
||||
res.add(rti);
|
||||
res.add(createRecentTaskInfo(task));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@@ -1745,8 +1739,7 @@ class RecentTasks {
|
||||
// Reset the header flag for the next block
|
||||
printedHeader = false;
|
||||
ArrayList<ActivityManager.RecentTaskInfo> tasks = getRecentTasksImpl(Integer.MAX_VALUE,
|
||||
0, true /* getTasksAllowed */, false /* getDetailedTasks */,
|
||||
mService.getCurrentUserId(), SYSTEM_UID);
|
||||
0, true /* getTasksAllowed */, mService.getCurrentUserId(), SYSTEM_UID);
|
||||
for (int i = 0; i < tasks.size(); i++) {
|
||||
final ActivityManager.RecentTaskInfo taskInfo = tasks.get(i);
|
||||
if (!printedHeader) {
|
||||
|
||||
@@ -28,7 +28,6 @@ import android.util.ArraySet;
|
||||
import com.android.internal.util.function.pooled.PooledConsumer;
|
||||
import com.android.internal.util.function.pooled.PooledLambda;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -44,7 +43,6 @@ class RunningTasks {
|
||||
(o1, o2) -> Long.signum(o2.lastActiveTime - o1.lastActiveTime);
|
||||
|
||||
private final TreeSet<Task> mTmpSortedSet = new TreeSet<>(LAST_ACTIVE_TIME_COMPARATOR);
|
||||
private final ArrayList<Task> mTmpStackTasks = new ArrayList<>();
|
||||
|
||||
private int mCallingUid;
|
||||
private int mUserId;
|
||||
@@ -132,8 +130,7 @@ class RunningTasks {
|
||||
|
||||
/** Constructs a {@link RunningTaskInfo} from a given {@param task}. */
|
||||
private RunningTaskInfo createRunningTaskInfo(Task task) {
|
||||
final RunningTaskInfo rti = new RunningTaskInfo();
|
||||
task.fillTaskInfo(rti);
|
||||
final RunningTaskInfo rti = task.getTaskInfo();
|
||||
// Fill in some deprecated values
|
||||
rti.id = rti.taskId;
|
||||
return rti;
|
||||
|
||||
@@ -3281,8 +3281,8 @@ class Task extends WindowContainer<WindowContainer> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Fills in a {@link TaskInfo} with information from this task.
|
||||
* @param info the {@link TaskInfo} to fill in
|
||||
* Fills in a {@link TaskInfo} with information from this task. Note that the base intent in the
|
||||
* task info will not include any extras or clip data.
|
||||
*/
|
||||
void fillTaskInfo(TaskInfo info) {
|
||||
getNumRunningActivities(mReuseActivitiesReport);
|
||||
@@ -3294,7 +3294,7 @@ class Task extends WindowContainer<WindowContainer> {
|
||||
final Intent baseIntent = getBaseIntent();
|
||||
// Make a copy of base intent because this is like a snapshot info.
|
||||
// Besides, {@link RecentTasks#getRecentTasksImpl} may modify it.
|
||||
info.baseIntent = baseIntent == null ? new Intent() : new Intent(baseIntent);
|
||||
info.baseIntent = baseIntent == null ? new Intent() : baseIntent.cloneFilter();
|
||||
info.baseActivity = mReuseActivitiesReport.base != null
|
||||
? mReuseActivitiesReport.base.intent.getComponent()
|
||||
: null;
|
||||
|
||||
@@ -253,8 +253,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub
|
||||
final int nextId = display.getNextStackId();
|
||||
TaskTile tile = new TaskTile(mService, nextId, windowingMode);
|
||||
display.addTile(tile);
|
||||
RunningTaskInfo out = new RunningTaskInfo();
|
||||
tile.fillTaskInfo(out);
|
||||
RunningTaskInfo out = tile.getTaskInfo();
|
||||
mLastSentTaskInfos.put(tile, out);
|
||||
return out;
|
||||
}
|
||||
@@ -412,9 +411,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub
|
||||
&& !ArrayUtils.contains(activityTypes, as.getActivityType())) {
|
||||
continue;
|
||||
}
|
||||
final RunningTaskInfo info = new RunningTaskInfo();
|
||||
as.fillTaskInfo(info);
|
||||
out.add(info);
|
||||
out.add(as.getTaskInfo());
|
||||
}
|
||||
}
|
||||
return out;
|
||||
@@ -447,9 +444,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub
|
||||
&& !ArrayUtils.contains(activityTypes, task.getActivityType())) {
|
||||
continue;
|
||||
}
|
||||
final RunningTaskInfo info = new RunningTaskInfo();
|
||||
task.fillTaskInfo(info);
|
||||
out.add(info);
|
||||
out.add(task.getTaskInfo());
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.service.voice.IVoiceInteractionSession;
|
||||
|
||||
@@ -112,6 +113,7 @@ class ActivityTestsBase extends SystemServiceTestsBase {
|
||||
private int mLaunchedFromPid;
|
||||
private int mLaunchedFromUid;
|
||||
private WindowProcessController mWpc;
|
||||
private Bundle mIntentExtras;
|
||||
|
||||
ActivityBuilder(ActivityTaskManagerService service) {
|
||||
mService = service;
|
||||
@@ -127,6 +129,11 @@ class ActivityTestsBase extends SystemServiceTestsBase {
|
||||
return this;
|
||||
}
|
||||
|
||||
ActivityBuilder setIntentExtras(Bundle extras) {
|
||||
mIntentExtras = extras;
|
||||
return this;
|
||||
}
|
||||
|
||||
static ComponentName getDefaultComponent() {
|
||||
return ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME,
|
||||
DEFAULT_COMPONENT_PACKAGE_NAME);
|
||||
@@ -231,6 +238,9 @@ class ActivityTestsBase extends SystemServiceTestsBase {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setComponent(mComponent);
|
||||
if (mIntentExtras != null) {
|
||||
intent.putExtras(mIntentExtras);
|
||||
}
|
||||
final ActivityInfo aInfo = new ActivityInfo();
|
||||
aInfo.applicationInfo = new ApplicationInfo();
|
||||
aInfo.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||||
|
||||
@@ -1020,6 +1020,29 @@ public class RecentTasksTest extends ActivityTestsBase {
|
||||
verify(controller, times(4)).notifyTaskListUpdated();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTaskInfo_expectNoExtras() {
|
||||
doNothing().when(mRecentTasks).loadUserRecentsLocked(anyInt());
|
||||
doReturn(true).when(mRecentTasks).isUserRunning(anyInt(), anyInt());
|
||||
|
||||
final Bundle data = new Bundle();
|
||||
data.putInt("key", 100);
|
||||
final Task task1 = createTaskBuilder(".Task").build();
|
||||
final ActivityRecord r1 = new ActivityBuilder(mService)
|
||||
.setTask(task1)
|
||||
.setIntentExtras(data)
|
||||
.build();
|
||||
mRecentTasks.add(r1.getTask());
|
||||
|
||||
final List<RecentTaskInfo> infos = mRecentTasks.getRecentTasks(MAX_VALUE, 0 /* flags */,
|
||||
true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList();
|
||||
assertTrue(infos.size() == 1);
|
||||
for (int i = 0; i < infos.size(); i++) {
|
||||
final Bundle extras = infos.get(i).baseIntent.getExtras();
|
||||
assertTrue(extras == null || extras.isEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the raw recent tasks list is in the provided order. Note that the expected tasks
|
||||
* should be ordered from least to most recent.
|
||||
@@ -1040,8 +1063,7 @@ public class RecentTasksTest extends ActivityTestsBase {
|
||||
doNothing().when(mRecentTasks).loadUserRecentsLocked(anyInt());
|
||||
doReturn(true).when(mRecentTasks).isUserRunning(anyInt(), anyInt());
|
||||
List<RecentTaskInfo> infos = mRecentTasks.getRecentTasks(MAX_VALUE, getRecentTaskFlags,
|
||||
true /* getTasksAllowed */, false /* getDetailedTasks */,
|
||||
TEST_USER_0_ID, 0).getList();
|
||||
true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList();
|
||||
assertTrue(expectedTasks.length == infos.size());
|
||||
for (int i = 0; i < infos.size(); i++) {
|
||||
assertTrue(expectedTasks[i].mTaskId == infos.get(i).taskId);
|
||||
@@ -1329,11 +1351,9 @@ public class RecentTasksTest extends ActivityTestsBase {
|
||||
|
||||
@Override
|
||||
ParceledListSlice<RecentTaskInfo> getRecentTasks(int maxNum, int flags,
|
||||
boolean getTasksAllowed,
|
||||
boolean getDetailedTasks, int userId, int callingUid) {
|
||||
boolean getTasksAllowed, int userId, int callingUid) {
|
||||
mLastAllowed = getTasksAllowed;
|
||||
return super.getRecentTasks(maxNum, flags, getTasksAllowed, getDetailedTasks, userId,
|
||||
callingUid);
|
||||
return super.getRecentTasks(maxNum, flags, getTasksAllowed, userId, callingUid);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -22,9 +22,11 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import android.app.ActivityManager.RunningTaskInfo;
|
||||
import android.content.ComponentName;
|
||||
import android.os.Bundle;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
import android.util.ArraySet;
|
||||
|
||||
@@ -58,8 +60,7 @@ public class RunningTasksTest extends ActivityTestsBase {
|
||||
public void testCollectTasksByLastActiveTime() {
|
||||
// Create a number of stacks with tasks (of incrementing active time)
|
||||
final ArrayList<DisplayContent> displays = new ArrayList<>();
|
||||
final DisplayContent display =
|
||||
new TestDisplayContent.Builder(mService, 1000, 2500).build();
|
||||
final DisplayContent display = new TestDisplayContent.Builder(mService, 1000, 2500).build();
|
||||
displays.add(display);
|
||||
|
||||
final int numStacks = 2;
|
||||
@@ -74,7 +75,7 @@ public class RunningTasksTest extends ActivityTestsBase {
|
||||
final int numTasks = 10;
|
||||
int activeTime = 0;
|
||||
for (int i = 0; i < numTasks; i++) {
|
||||
createTask(display.getStackAt(i % numStacks), ".Task" + i, i, activeTime++);
|
||||
createTask(display.getStackAt(i % numStacks), ".Task" + i, i, activeTime++, null);
|
||||
}
|
||||
|
||||
// Ensure that the latest tasks were returned in order of decreasing last active time,
|
||||
@@ -101,11 +102,39 @@ public class RunningTasksTest extends ActivityTestsBase {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTaskInfo_expectNoExtras() {
|
||||
final DisplayContent display = new TestDisplayContent.Builder(mService, 1000, 2500).build();
|
||||
final int numTasks = 10;
|
||||
for (int i = 0; i < numTasks; i++) {
|
||||
final ActivityStack stack = new StackBuilder(mRootWindowContainer)
|
||||
.setCreateActivity(false)
|
||||
.setDisplay(display)
|
||||
.setOnTop(true)
|
||||
.build();
|
||||
final Bundle data = new Bundle();
|
||||
data.putInt("key", 100);
|
||||
createTask(stack, ".Task" + i, i, i, data);
|
||||
}
|
||||
|
||||
final int numFetchTasks = 5;
|
||||
final ArrayList<RunningTaskInfo> tasks = new ArrayList<>();
|
||||
mRunningTasks.getTasks(numFetchTasks, tasks, ACTIVITY_TYPE_UNDEFINED,
|
||||
WINDOWING_MODE_UNDEFINED, mRootWindowContainer, -1 /* callingUid */,
|
||||
true /* allowed */, true /*crossUser */, PROFILE_IDS);
|
||||
assertThat(tasks).hasSize(numFetchTasks);
|
||||
for (int i = 0; i < tasks.size(); i++) {
|
||||
final Bundle extras = tasks.get(i).baseIntent.getExtras();
|
||||
assertTrue(extras == null || extras.isEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a task with a single activity in it, with the given last active time.
|
||||
*/
|
||||
private Task createTask(ActivityStack stack, String className, int taskId,
|
||||
int lastActiveTime) {
|
||||
int lastActiveTime, Bundle extras) {
|
||||
final Task task = new TaskBuilder(mService.mStackSupervisor)
|
||||
.setComponent(new ComponentName(mContext.getPackageName(), className))
|
||||
.setTaskId(taskId)
|
||||
@@ -115,6 +144,7 @@ public class RunningTasksTest extends ActivityTestsBase {
|
||||
final ActivityRecord activity = new ActivityBuilder(mService)
|
||||
.setTask(task)
|
||||
.setComponent(new ComponentName(mContext.getPackageName(), ".TaskActivity"))
|
||||
.setIntentExtras(extras)
|
||||
.build();
|
||||
return task;
|
||||
}
|
||||
|
||||
@@ -293,8 +293,7 @@ public class TaskOrganizerTests extends WindowTestsBase {
|
||||
|
||||
// Info should reflect new membership
|
||||
List<TaskTile> tiles = getTaskTiles(mDisplayContent);
|
||||
info1 = new RunningTaskInfo();
|
||||
tiles.get(0).fillTaskInfo(info1);
|
||||
info1 = tiles.get(0).getTaskInfo();
|
||||
assertEquals(ACTIVITY_TYPE_STANDARD, info1.topActivityType);
|
||||
|
||||
// Children inherit configuration
|
||||
@@ -307,9 +306,8 @@ public class TaskOrganizerTests extends WindowTestsBase {
|
||||
|
||||
tile1.removeChild(stack);
|
||||
assertEquals(mDisplayContent.getWindowingMode(), stack.getWindowingMode());
|
||||
info1 = new RunningTaskInfo();
|
||||
tiles = getTaskTiles(mDisplayContent);
|
||||
tiles.get(0).fillTaskInfo(info1);
|
||||
info1 = tiles.get(0).getTaskInfo();
|
||||
assertEquals(ACTIVITY_TYPE_UNDEFINED, info1.topActivityType);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user