From f9d4954f30697c7edfee4c56e1ee641a168d4727 Mon Sep 17 00:00:00 2001 From: Bryce Lee Date: Mon, 26 Jun 2017 16:27:32 -0700 Subject: Add aborted start result. Previously, we were returning START_SUCCESS when ActivityStarter aborted launching the activity. This hides this activity and makes it harder to debug. This CL adds a new start result type to capture this internally. Bug: 38121026 Test: manual Test: go/wm-smoke Change-Id: I97699b22b1eff476724c48db0c29daa0566ad280 --- core/java/android/app/ActivityManager.java | 7 +++++++ services/core/java/com/android/server/am/ActivityStarter.java | 7 +++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index f398c8dc9d6a..aca2d9177835 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -359,6 +359,13 @@ public class ActivityManager { public static final int START_RETURN_LOCK_TASK_MODE_VIOLATION = FIRST_START_NON_FATAL_ERROR_CODE + 1; + /** + * Result for IActivityManaqer.startActivity: a new activity start was aborted. Never returned + * externally. + * @hide + */ + public static final int START_ABORTED = FIRST_START_NON_FATAL_ERROR_CODE + 2; + /** * Flag for IActivityManaqer.startActivity: do special start mode where * a new activity is launched only if it is needed. diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 902353e8a3f1..97b59b9355ab 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -17,6 +17,7 @@ package com.android.server.am; import static android.app.Activity.RESULT_CANCELED; +import static android.app.ActivityManager.START_ABORTED; import static android.app.ActivityManager.START_CANCELED; import static android.app.ActivityManager.START_CLASS_NOT_FOUND; import static android.app.ActivityManager.START_DELIVERED_TO_TOP; @@ -313,7 +314,9 @@ class ActivityStarter { // mLastStartActivityRecord[0] is set in the call to startActivity above. outActivity[0] = mLastStartActivityRecord[0]; } - return mLastStartActivityResult; + + // Aborted results are treated as successes externally, but we must track them internally. + return mLastStartActivityResult != START_ABORTED ? mLastStartActivityResult : START_SUCCESS; } /** DO NOT call this method directly. Use {@link #startActivityLocked} instead. */ @@ -500,7 +503,7 @@ class ActivityStarter { // We pretend to the caller that it was really started, but // they will just get a cancel result. ActivityOptions.abort(options); - return START_SUCCESS; + return START_ABORTED; } // If permissions need a review before any of the app components can run, we -- cgit v1.2.3-59-g8ed1b