Loading services/core/java/com/android/server/wm/TaskRecord.java +5 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading @@ -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; Loading services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java +24 −5 Original line number Diff line number Diff line Loading @@ -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, Loading Loading
services/core/java/com/android/server/wm/TaskRecord.java +5 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading
services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading @@ -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; Loading
services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java +24 −5 Original line number Diff line number Diff line Loading @@ -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, Loading