Merge "Reduce parceled data size between system & sysui" into rvc-dev am: b16c3b1fb5 am: 598192fd2c

Change-Id: I1bac516c8a0f500055de66414c9a11c90a962c4b
This commit is contained in:
Automerger Merge Worker
2020-03-05 01:33:36 +00:00
9 changed files with 85 additions and 48 deletions

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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);
}