summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java9
-rw-r--r--services/core/java/com/android/server/wm/Task.java18
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)