Skip to content

Commit

Permalink
DO NOT MERGE. Integrate from MR 1 to fix issue #5366535: Lockscreen...
Browse files Browse the repository at this point in the history
...has wrong layout but corrects itself

Maybe fix issue #5405788: Device continuously opening and closing...

...the "Complete action using" dialog

I have never been able to reproduce this consistently, but here is
another stab in the twilight.  It looks like during boot we have
a potential race where we could reset the config sequence number after
we had gone through a config change, causing ActivityThread to ignore
a following config change.  Maybe this change will help.

Change-Id: I7199b6de370488e8d897d6a78ff6f15624da862c
  • Loading branch information
Dianne Hackborn authored and The Android Automerger committed Dec 8, 2011
1 parent 81cab17 commit 260fdd3
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
28 changes: 15 additions & 13 deletions services/java/com/android/server/am/ActivityManagerService.java
Expand Up @@ -1451,6 +1451,7 @@ private ActivityManagerService() {

mConfiguration.setToDefaults();
mConfiguration.locale = Locale.getDefault();
mConfigurationSeq = mConfiguration.seq = 1;
mProcessStats.init();

mCompatModePackages = new CompatModePackages(this, systemDir);
Expand Down Expand Up @@ -2407,7 +2408,7 @@ public void setRequestedOrientation(IBinder token,
r.mayFreezeScreenLocked(r.app) ? r : null);
if (config != null) {
r.frozenBeforeDestroy = true;
if (!updateConfigurationLocked(config, r, false)) {
if (!updateConfigurationLocked(config, r, false, false)) {
mMainStack.resumeTopActivityLocked(null);
}
}
Expand Down Expand Up @@ -3724,7 +3725,7 @@ private final boolean attachApplicationLocked(IApplicationThread thread,
app.instrumentationClass, profileFile, profileFd, profileAutoStop,
app.instrumentationArguments, app.instrumentationWatcher, testMode,
isRestrictedBackupMode || !normalMode, app.persistent,
mConfiguration, app.compat, getCommonServicesLocked(),
new Configuration(mConfiguration), app.compat, getCommonServicesLocked(),
mCoreSettingsObserver.getCoreSettingsLocked());
updateLruProcessLocked(app, false, true);
app.lastRequestedGc = app.lastLowMemory = SystemClock.uptimeMillis();
Expand Down Expand Up @@ -6633,8 +6634,7 @@ private void retrieveSettings() {
mAlwaysFinishActivities = alwaysFinishActivities;
// This happens before any activities are started, so we can
// change mConfiguration in-place.
mConfiguration.updateFrom(configuration);
mConfigurationSeq = mConfiguration.seq = 1;
updateConfigurationLocked(configuration, null, false, true);
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Initial config: " + mConfiguration);
}
}
Expand Down Expand Up @@ -12838,7 +12838,7 @@ public void updatePersistentConfiguration(Configuration values) {

synchronized(this) {
final long origId = Binder.clearCallingIdentity();
updateConfigurationLocked(values, null, true);
updateConfigurationLocked(values, null, true, false);
Binder.restoreCallingIdentity(origId);
}
}
Expand All @@ -12861,7 +12861,7 @@ public void updateConfiguration(Configuration values) {
if (values != null) {
Settings.System.clearConfiguration(values);
}
updateConfigurationLocked(values, null, false);
updateConfigurationLocked(values, null, false, false);
Binder.restoreCallingIdentity(origId);
}
}
Expand All @@ -12875,7 +12875,7 @@ public void updateConfiguration(Configuration values) {
* @param persistent TODO
*/
public boolean updateConfigurationLocked(Configuration values,
ActivityRecord starting, boolean persistent) {
ActivityRecord starting, boolean persistent, boolean initLocale) {
int changes = 0;

boolean kept = true;
Expand All @@ -12890,7 +12890,7 @@ public boolean updateConfigurationLocked(Configuration values,

EventLog.writeEvent(EventLogTags.CONFIGURATION_CHANGED, changes);

if (values.locale != null) {
if (values.locale != null && !initLocale) {
saveLocaleLocked(values.locale,
!values.locale.equals(mConfiguration.locale),
values.userSetLocale);
Expand All @@ -12903,10 +12903,12 @@ public boolean updateConfigurationLocked(Configuration values,
newConfig.seq = mConfigurationSeq;
mConfiguration = newConfig;
Slog.i(TAG, "Config changed: " + newConfig);


final Configuration configCopy = new Configuration(mConfiguration);

AttributeCache ac = AttributeCache.instance();
if (ac != null) {
ac.updateConfiguration(mConfiguration);
ac.updateConfiguration(configCopy);
}

// Make sure all resources in our process are updated
Expand All @@ -12916,11 +12918,11 @@ public boolean updateConfigurationLocked(Configuration values,
// boot, where the first config change needs to guarantee
// all resources have that config before following boot
// code is executed.
mSystemThread.applyConfigurationToResources(newConfig);
mSystemThread.applyConfigurationToResources(configCopy);

if (persistent && Settings.System.hasInterestingConfigurationChanges(changes)) {
Message msg = mHandler.obtainMessage(UPDATE_CONFIGURATION_MSG);
msg.obj = new Configuration(mConfiguration);
msg.obj = new Configuration(configCopy);
mHandler.sendMessage(msg);
}

Expand All @@ -12930,7 +12932,7 @@ public boolean updateConfigurationLocked(Configuration values,
if (app.thread != null) {
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Sending to proc "
+ app.processName + " new config " + mConfiguration);
app.thread.scheduleConfigurationChanged(mConfiguration);
app.thread.scheduleConfigurationChanged(configCopy);
}
} catch (Exception e) {
}
Expand Down
11 changes: 6 additions & 5 deletions services/java/com/android/server/am/ActivityStack.java
Expand Up @@ -529,7 +529,7 @@ final boolean realStartActivityLocked(ActivityRecord r,
Configuration config = mService.mWindowManager.updateOrientationFromAppTokens(
mService.mConfiguration,
r.mayFreezeScreenLocked(app) ? r : null);
mService.updateConfigurationLocked(config, r, false);
mService.updateConfigurationLocked(config, r, false, false);
}

r.app = app;
Expand Down Expand Up @@ -591,7 +591,8 @@ final boolean realStartActivityLocked(ActivityRecord r,
}
}
app.thread.scheduleLaunchActivity(new Intent(r.intent), r,
System.identityHashCode(r), r.info, mService.mConfiguration,
System.identityHashCode(r), r.info,
new Configuration(mService.mConfiguration),
r.compat, r.icicle, results, newIntents, !andResume,
mService.isNextTransitionForward(), profileFile, profileFd,
profileAutoStop);
Expand Down Expand Up @@ -1453,7 +1454,7 @@ final boolean resumeTopActivityLocked(ActivityRecord prev) {
if (config != null) {
next.frozenBeforeDestroy = true;
}
updated = mService.updateConfigurationLocked(config, next, false);
updated = mService.updateConfigurationLocked(config, next, false, false);
}
}
if (!updated) {
Expand Down Expand Up @@ -2900,7 +2901,7 @@ final int startActivityMayWait(IApplicationThread caller, int callingUid,
mConfigWillChange = false;
if (DEBUG_CONFIGURATION) Slog.v(TAG,
"Updating to new configuration after starting activity.");
mService.updateConfigurationLocked(config, null, false);
mService.updateConfigurationLocked(config, null, false, false);
}

Binder.restoreCallingIdentity(origId);
Expand Down Expand Up @@ -4171,7 +4172,7 @@ private final boolean relaunchActivityLocked(ActivityRecord r,
if (DEBUG_SWITCH) Slog.i(TAG, "Switch is restarting resumed " + r);
r.forceNewConfig = false;
r.app.thread.scheduleRelaunchActivity(r, results, newIntents,
changes, !andResume, mService.mConfiguration);
changes, !andResume, new Configuration(mService.mConfiguration));
// Note: don't need to call pauseIfSleepingLocked() here, because
// the caller will only pass in 'andResume' if this activity is
// currently resumed, which implies we aren't sleeping.
Expand Down

0 comments on commit 260fdd3

Please sign in to comment.