Merge "Fix issue with multiple recent tasks showing after restarting the device" into pi-dev

am: 20ebb32825

Change-Id: Icf92ea2e9573d41157c973690fe5a0457abc2207
This commit is contained in:
Winson Chung
2018-03-27 00:45:24 +00:00
committed by android-build-merger
3 changed files with 35 additions and 5 deletions

View File

@@ -1243,15 +1243,13 @@ class RecentTasks {
*/ */
private int findRemoveIndexForAddTask(TaskRecord task) { private int findRemoveIndexForAddTask(TaskRecord task) {
final int recentsCount = mTasks.size(); final int recentsCount = mTasks.size();
final int taskActivityType = task.getActivityType();
final Intent intent = task.intent; final Intent intent = task.intent;
final boolean document = intent != null && intent.isDocument(); final boolean document = intent != null && intent.isDocument();
int maxRecents = task.maxRecents - 1; int maxRecents = task.maxRecents - 1;
for (int i = 0; i < recentsCount; i++) { for (int i = 0; i < recentsCount; i++) {
final TaskRecord tr = mTasks.get(i); final TaskRecord tr = mTasks.get(i);
final int trActivityType = tr.getActivityType();
if (task != tr) { if (task != tr) {
if (taskActivityType != trActivityType || task.userId != tr.userId) { if (!task.hasCompatibleActivityType(tr)) {
continue; continue;
} }
final Intent trIntent = tr.intent; final Intent trIntent = tr.intent;

View File

@@ -42,11 +42,13 @@ import static java.lang.Integer.MAX_VALUE;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.ActivityManager.RecentTaskInfo; import android.app.ActivityManager.RecentTaskInfo;
import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.RunningTaskInfo;
import android.app.WindowConfiguration;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice; import android.content.pm.ParceledListSlice;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.content.res.Configuration;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Bundle; import android.os.Bundle;
import android.os.Debug; import android.os.Debug;
@@ -101,8 +103,8 @@ public class RecentTasksTest extends ActivityTestsBase {
private TestRecentTasks mRecentTasks; private TestRecentTasks mRecentTasks;
private TestRunningTasks mRunningTasks; private TestRunningTasks mRunningTasks;
private static ArrayList<TaskRecord> mTasks = new ArrayList<>(); private ArrayList<TaskRecord> mTasks;
private static ArrayList<TaskRecord> mSameDocumentTasks = new ArrayList<>(); private ArrayList<TaskRecord> mSameDocumentTasks;
private CallbacksRecorder mCallbacksRecorder; private CallbacksRecorder mCallbacksRecorder;
@@ -155,12 +157,14 @@ public class RecentTasksTest extends ActivityTestsBase {
mRecentTasks.registerCallback(mCallbacksRecorder); mRecentTasks.registerCallback(mCallbacksRecorder);
QUIET_USER_INFO.flags = UserInfo.FLAG_MANAGED_PROFILE | UserInfo.FLAG_QUIET_MODE; QUIET_USER_INFO.flags = UserInfo.FLAG_MANAGED_PROFILE | UserInfo.FLAG_QUIET_MODE;
mTasks = new ArrayList<>();
mTasks.add(createTaskBuilder(".Task1").build()); mTasks.add(createTaskBuilder(".Task1").build());
mTasks.add(createTaskBuilder(".Task2").build()); mTasks.add(createTaskBuilder(".Task2").build());
mTasks.add(createTaskBuilder(".Task3").build()); mTasks.add(createTaskBuilder(".Task3").build());
mTasks.add(createTaskBuilder(".Task4").build()); mTasks.add(createTaskBuilder(".Task4").build());
mTasks.add(createTaskBuilder(".Task5").build()); mTasks.add(createTaskBuilder(".Task5").build());
mSameDocumentTasks = new ArrayList<>();
mSameDocumentTasks.add(createDocumentTask(".DocumentTask1")); mSameDocumentTasks.add(createDocumentTask(".DocumentTask1"));
mSameDocumentTasks.add(createDocumentTask(".DocumentTask1")); mSameDocumentTasks.add(createDocumentTask(".DocumentTask1"));
} }
@@ -294,7 +298,32 @@ public class RecentTasksTest extends ActivityTestsBase {
assertTrue(mCallbacksRecorder.added.contains(task2)); assertTrue(mCallbacksRecorder.added.contains(task2));
assertTrue(mCallbacksRecorder.trimmed.isEmpty()); assertTrue(mCallbacksRecorder.trimmed.isEmpty());
assertTrue(mCallbacksRecorder.removed.isEmpty()); assertTrue(mCallbacksRecorder.removed.isEmpty());
}
@Test
public void testAddTaskCompatibleActivityType_expectRemove() throws Exception {
Configuration config1 = new Configuration();
config1.windowConfiguration.setActivityType(ACTIVITY_TYPE_UNDEFINED);
TaskRecord task1 = createTaskBuilder(".Task1")
.setFlags(FLAG_ACTIVITY_NEW_TASK)
.setStack(mStack)
.build();
task1.onConfigurationChanged(config1);
assertTrue(task1.getActivityType() == ACTIVITY_TYPE_UNDEFINED);
mRecentTasks.add(task1);
mCallbacksRecorder.clear();
TaskRecord task2 = createTaskBuilder(".Task1")
.setFlags(FLAG_ACTIVITY_NEW_TASK)
.setStack(mStack)
.build();
assertTrue(task2.getActivityType() == ACTIVITY_TYPE_STANDARD);
mRecentTasks.add(task2);
assertTrue(mCallbacksRecorder.added.size() == 1);
assertTrue(mCallbacksRecorder.added.contains(task2));
assertTrue(mCallbacksRecorder.trimmed.isEmpty());
assertTrue(mCallbacksRecorder.removed.size() == 1);
assertTrue(mCallbacksRecorder.removed.contains(task1));
} }
@Test @Test

View File

@@ -29,6 +29,9 @@ import com.android.server.am.TaskPersister;
import java.io.File; import java.io.File;
import java.util.Random; import java.util.Random;
/**
* atest FrameworksServicesTests:TaskPersisterTest
*/
public class TaskPersisterTest extends AndroidTestCase { public class TaskPersisterTest extends AndroidTestCase {
private static final String TEST_USER_NAME = "AM-Test-User"; private static final String TEST_USER_NAME = "AM-Test-User";