Loading services/core/java/com/android/server/am/AppErrors.java +2 −1 Original line number Diff line number Diff line Loading @@ -476,7 +476,8 @@ class AppErrors { } catch (IllegalArgumentException e) { // Hmm, that didn't work, app might have crashed before creating a // recents entry. Let's see if we have a safe-to-restart intent. final Set<String> cats = task.intent.getCategories(); final Set<String> cats = task.intent != null ? task.intent.getCategories() : null; if (cats != null && cats.contains(Intent.CATEGORY_LAUNCHER)) { mService.getActivityStartController().startActivityInPackage( task.mCallingUid, callingPid, callingUid, task.mCallingPackage, Loading services/core/java/com/android/server/am/LockTaskController.java +3 −2 Original line number Diff line number Diff line Loading @@ -555,11 +555,12 @@ public class LockTaskController { return; } if (mLockTaskModeTasks.isEmpty()) { final Intent taskIntent = task.intent; if (mLockTaskModeTasks.isEmpty() && taskIntent != null) { mSupervisor.mRecentTasks.onLockTaskModeStateChanged(lockTaskModeState, task.userId); // Start lock task on the handler thread mHandler.post(() -> performStartLockTask( task.intent.getComponent().getPackageName(), taskIntent.getComponent().getPackageName(), task.userId, lockTaskModeState)); } Loading services/core/java/com/android/server/am/RecentTasks.java +1 −1 Original line number Diff line number Diff line Loading @@ -550,7 +550,7 @@ class RecentTasks { continue; } ComponentName cn = tr.intent.getComponent(); ComponentName cn = tr.intent != null ? tr.intent.getComponent() : null; final boolean sameComponent = cn != null && cn.getPackageName().equals(packageName) && (filterByClasses == null || filterByClasses.contains(cn.getClassName())); if (sameComponent) { Loading services/core/java/com/android/server/am/TaskRecord.java +9 −6 Original line number Diff line number Diff line Loading @@ -203,7 +203,8 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi String rootAffinity; // Initial base affinity, or null; does not change from initial root. final IVoiceInteractionSession voiceSession; // Voice interaction session driving task final IVoiceInteractor voiceInteractor; // Associated interactor to provide to app Intent intent; // The original intent that started the task. Intent intent; // The original intent that started the task. Note that this value can // be null. Intent affinityIntent; // Intent of affinity-moved activity that started this task. int effectiveUid; // The current effective uid of the identity of this task. ComponentName origActivity; // The non-alias activity component of the intent. Loading Loading @@ -897,12 +898,12 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi // 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.realActivity); return this.intent.filterEquals(intent); return intent.filterEquals(this.intent); } boolean returnsToHomeStack() { final int returnHomeFlags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME; return (intent.getFlags() & returnHomeFlags) == returnHomeFlags; return intent != null && (intent.getFlags() & returnHomeFlags) == returnHomeFlags; } void setPrevAffiliate(TaskRecord prevAffiliate) { Loading Loading @@ -2165,9 +2166,11 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi out.endTag(null, TAG_AFFINITYINTENT); } if (intent != null) { out.startTag(null, TAG_INTENT); intent.saveToXml(out); out.endTag(null, TAG_INTENT); } final ArrayList<ActivityRecord> activities = mActivities; final int numActivities = activities.size(); Loading services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java +16 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package com.android.server.am; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; Loading Loading @@ -62,7 +65,7 @@ import java.util.Comparator; * Tests for exercising {@link TaskRecord}. * * Build/Install/Run: * bit FrameworksServicesTests:com.android.server.am.TaskRecordTests * atest FrameworksServicesTests:com.android.server.am.TaskRecordTests */ @MediumTest @Presubmit Loading Loading @@ -113,6 +116,18 @@ public class TaskRecordTests extends ActivityTestsBase { assertTrue(factory.mCreated); } @Test public void testReturnsToHomeStack() throws Exception { final TaskRecord task = createTaskRecord(1); assertFalse(task.returnsToHomeStack()); task.intent = null; assertFalse(task.returnsToHomeStack()); task.intent = new Intent(); assertFalse(task.returnsToHomeStack()); task.intent.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME); assertTrue(task.returnsToHomeStack()); } private File serializeToFile(TaskRecord r) throws IOException, XmlPullParserException { final File tmpFile = File.createTempFile(r.taskId + "_task_", "xml"); Loading Loading
services/core/java/com/android/server/am/AppErrors.java +2 −1 Original line number Diff line number Diff line Loading @@ -476,7 +476,8 @@ class AppErrors { } catch (IllegalArgumentException e) { // Hmm, that didn't work, app might have crashed before creating a // recents entry. Let's see if we have a safe-to-restart intent. final Set<String> cats = task.intent.getCategories(); final Set<String> cats = task.intent != null ? task.intent.getCategories() : null; if (cats != null && cats.contains(Intent.CATEGORY_LAUNCHER)) { mService.getActivityStartController().startActivityInPackage( task.mCallingUid, callingPid, callingUid, task.mCallingPackage, Loading
services/core/java/com/android/server/am/LockTaskController.java +3 −2 Original line number Diff line number Diff line Loading @@ -555,11 +555,12 @@ public class LockTaskController { return; } if (mLockTaskModeTasks.isEmpty()) { final Intent taskIntent = task.intent; if (mLockTaskModeTasks.isEmpty() && taskIntent != null) { mSupervisor.mRecentTasks.onLockTaskModeStateChanged(lockTaskModeState, task.userId); // Start lock task on the handler thread mHandler.post(() -> performStartLockTask( task.intent.getComponent().getPackageName(), taskIntent.getComponent().getPackageName(), task.userId, lockTaskModeState)); } Loading
services/core/java/com/android/server/am/RecentTasks.java +1 −1 Original line number Diff line number Diff line Loading @@ -550,7 +550,7 @@ class RecentTasks { continue; } ComponentName cn = tr.intent.getComponent(); ComponentName cn = tr.intent != null ? tr.intent.getComponent() : null; final boolean sameComponent = cn != null && cn.getPackageName().equals(packageName) && (filterByClasses == null || filterByClasses.contains(cn.getClassName())); if (sameComponent) { Loading
services/core/java/com/android/server/am/TaskRecord.java +9 −6 Original line number Diff line number Diff line Loading @@ -203,7 +203,8 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi String rootAffinity; // Initial base affinity, or null; does not change from initial root. final IVoiceInteractionSession voiceSession; // Voice interaction session driving task final IVoiceInteractor voiceInteractor; // Associated interactor to provide to app Intent intent; // The original intent that started the task. Intent intent; // The original intent that started the task. Note that this value can // be null. Intent affinityIntent; // Intent of affinity-moved activity that started this task. int effectiveUid; // The current effective uid of the identity of this task. ComponentName origActivity; // The non-alias activity component of the intent. Loading Loading @@ -897,12 +898,12 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi // 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.realActivity); return this.intent.filterEquals(intent); return intent.filterEquals(this.intent); } boolean returnsToHomeStack() { final int returnHomeFlags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME; return (intent.getFlags() & returnHomeFlags) == returnHomeFlags; return intent != null && (intent.getFlags() & returnHomeFlags) == returnHomeFlags; } void setPrevAffiliate(TaskRecord prevAffiliate) { Loading Loading @@ -2165,9 +2166,11 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi out.endTag(null, TAG_AFFINITYINTENT); } if (intent != null) { out.startTag(null, TAG_INTENT); intent.saveToXml(out); out.endTag(null, TAG_INTENT); } final ArrayList<ActivityRecord> activities = mActivities; final int numActivities = activities.size(); Loading
services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java +16 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package com.android.server.am; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; Loading Loading @@ -62,7 +65,7 @@ import java.util.Comparator; * Tests for exercising {@link TaskRecord}. * * Build/Install/Run: * bit FrameworksServicesTests:com.android.server.am.TaskRecordTests * atest FrameworksServicesTests:com.android.server.am.TaskRecordTests */ @MediumTest @Presubmit Loading Loading @@ -113,6 +116,18 @@ public class TaskRecordTests extends ActivityTestsBase { assertTrue(factory.mCreated); } @Test public void testReturnsToHomeStack() throws Exception { final TaskRecord task = createTaskRecord(1); assertFalse(task.returnsToHomeStack()); task.intent = null; assertFalse(task.returnsToHomeStack()); task.intent = new Intent(); assertFalse(task.returnsToHomeStack()); task.intent.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME); assertTrue(task.returnsToHomeStack()); } private File serializeToFile(TaskRecord r) throws IOException, XmlPullParserException { final File tmpFile = File.createTempFile(r.taskId + "_task_", "xml"); Loading