diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 9 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 18 |
2 files changed, 19 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index a327a426204a..cb928251f17f 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -9059,8 +9059,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } if (activityType != ACTIVITY_TYPE_UNDEFINED && activityType != getActivityType()) { - Slog.w(TAG, "Can't change activity type once set: " + this - + " activityType=" + activityTypeToString(getActivityType())); + final String errorMessage = "Can't change activity type once set: " + this + + " activityType=" + activityTypeToString(getActivityType()) + ", was " + + activityTypeToString(activityType); + if (Build.IS_DEBUGGABLE) { + throw new IllegalStateException(errorMessage); + } + Slog.w(TAG, errorMessage); } // Configuration's equality doesn't consider seq so if only seq number changes in resolved diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 699e02e8cc6a..fce3ec728f1a 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1429,14 +1429,22 @@ class Task extends TaskFragment { // Only set this based on the first activity if (!hadActivity) { - if (r.getActivityType() == ACTIVITY_TYPE_UNDEFINED) { + int activityOverrideType = + r.getRequestedOverrideConfiguration().windowConfiguration.getActivityType(); + if (activityOverrideType == ACTIVITY_TYPE_UNDEFINED) { // Normally non-standard activity type for the activity record will be set when the // object is created, however we delay setting the standard application type until // this point so that the task can set the type for additional activities added in // the else condition below. - r.setActivityType(ACTIVITY_TYPE_STANDARD); - } - setActivityType(r.getActivityType()); + activityOverrideType = activityType != ACTIVITY_TYPE_UNDEFINED ? activityType + : ACTIVITY_TYPE_STANDARD; + // Set the Activity's requestedOverrideConfiguration directly to reduce + // WC#onConfigurationChanged calls since it will be called while setting the + // Task's activity type below. + r.getRequestedOverrideConfiguration().windowConfiguration.setActivityType( + activityOverrideType); + } + setActivityType(activityOverrideType); isPersistable = r.isPersistable(); mCallingUid = r.launchedFromUid; mCallingPackage = r.launchedFromPackage; @@ -5775,8 +5783,6 @@ class Task extends TaskFragment { final int activityType = getActivityType(); task = new Task.Builder(mAtmService) .setTaskId(taskId) - .setActivityType(activityType != ACTIVITY_TYPE_UNDEFINED ? activityType - : ACTIVITY_TYPE_STANDARD) .setActivityInfo(info) .setActivityOptions(options) .setIntent(intent) |