diff options
3 files changed, 39 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/wm/TaskRecord.java b/services/core/java/com/android/server/wm/TaskRecord.java index 1d56f0489a8d..4a553cf59bc9 100644 --- a/services/core/java/com/android/server/wm/TaskRecord.java +++ b/services/core/java/com/android/server/wm/TaskRecord.java @@ -974,10 +974,11 @@ class TaskRecord extends ConfigurationContainer { */ boolean isSameIntentFilter(ActivityRecord r) { final Intent intent = new Intent(r.intent); - // Correct the activity intent for aliasing. The task record intent will always be based on - // the real activity that will be launched not the alias, so we need to use an intent with - // the component name pointing to the real activity not the alias in the activity record. - intent.setComponent(r.mActivityComponent); + // Make sure the component are the same if the input activity has the same real activity + // as the one in the task because either one of them could be the alias activity. + if (Objects.equals(realActivity, r.mActivityComponent) && this.intent != null) { + intent.setComponent(this.intent.getComponent()); + } return intent.filterEquals(this.intent); } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java index ee336a8c87f2..bd29d2a3a884 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java @@ -169,6 +169,7 @@ class ActivityTestsBase { private final ActivityTaskManagerService mService; private ComponentName mComponent; + private String mTargetActivity; private TaskRecord mTaskRecord; private int mUid; private boolean mCreateTask; @@ -185,6 +186,11 @@ class ActivityTestsBase { return this; } + ActivityBuilder setTargetActivity(String targetActivity) { + mTargetActivity = targetActivity; + return this; + } + static ComponentName getDefaultComponent() { return ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, DEFAULT_COMPONENT_PACKAGE_NAME); @@ -239,6 +245,10 @@ class ActivityTestsBase { aInfo.applicationInfo = new ApplicationInfo(); aInfo.applicationInfo.packageName = mComponent.getPackageName(); aInfo.applicationInfo.uid = mUid; + aInfo.packageName = mComponent.getPackageName(); + if (mTargetActivity != null) { + aInfo.targetActivity = mTargetActivity; + } aInfo.flags |= mActivityFlags; aInfo.launchMode = mLaunchMode; diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java index 00bec3fa4936..8a98cbe5cd52 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java @@ -268,19 +268,38 @@ public class TaskRecordTests extends ActivityTestsBase { /** Ensures that the alias intent won't have target component resolved. */ @Test public void testTaskIntentActivityAlias() { - final String aliasActivity = DEFAULT_COMPONENT_PACKAGE_NAME + ".aliasActivity"; - final String targetActivity = DEFAULT_COMPONENT_PACKAGE_NAME + ".targetActivity"; + final String aliasClassName = DEFAULT_COMPONENT_PACKAGE_NAME + ".aliasActivity"; + final String targetClassName = DEFAULT_COMPONENT_PACKAGE_NAME + ".targetActivity"; + final ComponentName aliasComponent = + new ComponentName(DEFAULT_COMPONENT_PACKAGE_NAME, aliasClassName); + final ComponentName targetComponent = + new ComponentName(DEFAULT_COMPONENT_PACKAGE_NAME, targetClassName); + final Intent intent = new Intent(); - intent.setComponent(new ComponentName(DEFAULT_COMPONENT_PACKAGE_NAME, aliasActivity)); + intent.setComponent(aliasComponent); final ActivityInfo info = new ActivityInfo(); info.applicationInfo = new ApplicationInfo(); info.packageName = DEFAULT_COMPONENT_PACKAGE_NAME; - info.targetActivity = targetActivity; + info.targetActivity = targetClassName; final TaskRecord task = TaskRecord.create(mService, 1 /* taskId */, info, intent, null /* taskDescription */); - assertEquals("The alias activity component should be saved in task intent.", aliasActivity, + assertEquals("The alias activity component should be saved in task intent.", aliasClassName, task.intent.getComponent().getClassName()); + + ActivityRecord aliasActivity = new ActivityBuilder(mService).setComponent( + aliasComponent).setTargetActivity(targetClassName).build(); + assertEquals("Should be the same intent filter.", true, + task.isSameIntentFilter(aliasActivity)); + + ActivityRecord targetActivity = new ActivityBuilder(mService).setComponent( + targetComponent).build(); + assertEquals("Should be the same intent filter.", true, + task.isSameIntentFilter(targetActivity)); + + ActivityRecord defaultActivity = new ActivityBuilder(mService).build(); + assertEquals("Should not be the same intent filter.", false, + task.isSameIntentFilter(defaultActivity)); } private void testStackBoundsConfiguration(int windowingMode, Rect parentBounds, Rect bounds, |