Merge \"Don\'t make redundant launch while updating configuration\" into nyc-mr1-dev

am: 4c7b339411

Change-Id: I84bce1a3980bf78eb20f7473b4cee687481d8bf2
This commit is contained in:
Andrii Kulian
2016-07-13 02:32:44 +00:00
committed by android-build-merger
2 changed files with 34 additions and 15 deletions

View File

@@ -18669,7 +18669,7 @@ public final class ActivityManagerService extends ActivityManagerNative
synchronized(this) {
final long origId = Binder.clearCallingIdentity();
updateConfigurationLocked(values, null, false, true, userId);
updateConfigurationLocked(values, null, false, true, userId, false /* deferResume */);
Binder.restoreCallingIdentity(origId);
}
}
@@ -18737,11 +18737,16 @@ public final class ActivityManagerService extends ActivityManagerNative
updateConfigurationLocked(configuration, null, false);
}
boolean updateConfigurationLocked(Configuration values,
ActivityRecord starting, boolean initLocale) {
boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
boolean initLocale) {
return updateConfigurationLocked(values, starting, initLocale, false /* deferResume */);
}
boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
boolean initLocale, boolean deferResume) {
// pass UserHandle.USER_NULL as userId because we don't persist configuration for any user
return updateConfigurationLocked(values, starting, initLocale, false,
UserHandle.USER_NULL);
return updateConfigurationLocked(values, starting, initLocale, false /* persistent */,
UserHandle.USER_NULL, deferResume);
}
// To cache the list of supported system locales
@@ -18757,8 +18762,8 @@ public final class ActivityManagerService extends ActivityManagerNative
* @param userId is only used when persistent parameter is set to true to persist configuration
* for that particular user
*/
private boolean updateConfigurationLocked(Configuration values,
ActivityRecord starting, boolean initLocale, boolean persistent, int userId) {
private boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
boolean initLocale, boolean persistent, int userId, boolean deferResume) {
int changes = 0;
if (mWindowManager != null) {
@@ -18886,7 +18891,7 @@ public final class ActivityManagerService extends ActivityManagerNative
for (int stackId : resizedStacks) {
final Rect newBounds = mWindowManager.getBoundsForNewConfiguration(stackId);
mStackSupervisor.resizeStackLocked(
stackId, newBounds, null, null, false, false, !DEFER_RESUME);
stackId, newBounds, null, null, false, false, deferResume);
}
}
}
@@ -21783,7 +21788,8 @@ public final class ActivityManagerService extends ActivityManagerNative
Preconditions.checkNotNull(values, "Configuration must not be null");
Preconditions.checkArgumentNonnegative(userId, "userId " + userId + " not supported");
synchronized (ActivityManagerService.this) {
updateConfigurationLocked(values, null, false, true, userId);
updateConfigurationLocked(values, null, false, true, userId,
false /* deferResume */);
}
}

View File

@@ -1189,7 +1189,10 @@ public final class ActivityStackSupervisor implements DisplayListener {
Configuration config = mWindowManager.updateOrientationFromAppTokens(
mService.mConfiguration,
r.mayFreezeScreenLocked(app) ? r.appToken : null);
mService.updateConfigurationLocked(config, r, false);
// Deferring resume here because we're going to launch new activity shortly.
// We don't want to perform a redundant launch of the same record while ensuring
// configurations and trying to resume top activity of focused stack.
mService.updateConfigurationLocked(config, r, false, true /* deferResume */);
}
r.app = app;
@@ -2004,7 +2007,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
boolean preserveWindows, boolean allowResizeInDockedMode, boolean deferResume) {
if (stackId == DOCKED_STACK_ID) {
resizeDockedStackLocked(bounds, tempTaskBounds, tempTaskInsetBounds, null, null,
preserveWindows);
preserveWindows, deferResume);
return;
}
final ActivityStack stack = getStack(stackId);
@@ -2154,8 +2157,16 @@ public final class ActivityStackSupervisor implements DisplayListener {
}
void resizeDockedStackLocked(Rect dockedBounds, Rect tempDockedTaskBounds,
Rect tempDockedTaskInsetBounds,
Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds, boolean preserveWindows) {
Rect tempDockedTaskInsetBounds, Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds,
boolean preserveWindows) {
resizeDockedStackLocked(dockedBounds, tempDockedTaskBounds, tempDockedTaskInsetBounds,
tempOtherTaskBounds, tempOtherTaskInsetBounds, preserveWindows,
false /* deferResume */);
}
void resizeDockedStackLocked(Rect dockedBounds, Rect tempDockedTaskBounds,
Rect tempDockedTaskInsetBounds, Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds,
boolean preserveWindows, boolean deferResume) {
if (!mAllowDockedStackResize) {
// Docked stack resize currently disabled.
@@ -2198,11 +2209,13 @@ public final class ActivityStackSupervisor implements DisplayListener {
if (StackId.isResizeableByDockedStack(i) && getStack(i) != null) {
resizeStackLocked(i, tempRect, tempOtherTaskBounds,
tempOtherTaskInsetBounds, preserveWindows,
true /* allowResizeInDockedMode */, !DEFER_RESUME);
true /* allowResizeInDockedMode */, deferResume);
}
}
}
stack.ensureVisibleActivitiesConfigurationLocked(r, preserveWindows);
if (!deferResume) {
stack.ensureVisibleActivitiesConfigurationLocked(r, preserveWindows);
}
} finally {
mAllowDockedStackResize = true;
mWindowManager.continueSurfaceLayout();