Merge "Consolidate logging of global configuration" into main
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 3d58082..5e03066 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -4626,7 +4626,12 @@
return kept;
}
- /** Update default (global) configuration and notify listeners about changes. */
+ /**
+ * Updates default (global) configuration and notifies listeners about changes.
+ *
+ * @param values The new configuration. It must always be a new instance from the caller, and
+ * it won't be modified after calling this method.
+ */
int updateGlobalConfigurationLocked(@NonNull Configuration values, boolean initLocale,
boolean persistent, int userId) {
@@ -4640,24 +4645,6 @@
ProtoLog.i(WM_DEBUG_CONFIGURATION, "Updating global configuration "
+ "to: %s", values);
writeConfigurationChanged(changes);
- FrameworkStatsLog.write(FrameworkStatsLog.RESOURCE_CONFIGURATION_CHANGED,
- values.colorMode,
- values.densityDpi,
- values.fontScale,
- values.hardKeyboardHidden,
- values.keyboard,
- values.keyboardHidden,
- values.mcc,
- values.mnc,
- values.navigation,
- values.navigationHidden,
- values.orientation,
- values.screenHeightDp,
- values.screenLayout,
- values.screenWidthDp,
- values.smallestScreenWidthDp,
- values.touchscreen,
- values.uiMode);
// Note: certain tests currently run as platform_app which is not allowed
// to set debug system properties. To ensure that system properties are set
@@ -4705,13 +4692,6 @@
// resources have that config before following boot code is executed.
mSystemThread.applyConfigurationToResources(mTempConfig);
- if (persistent && Settings.System.hasInterestingConfigurationChanges(changes)) {
- final Message msg = PooledLambda.obtainMessage(
- ActivityTaskManagerService::sendPutConfigurationForUserMsg,
- this, userId, new Configuration(mTempConfig));
- mH.sendMessage(msg);
- }
-
SparseArray<WindowProcessController> pidMap = mProcessMap.getPidMap();
for (int i = pidMap.size() - 1; i >= 0; i--) {
final int pid = pidMap.keyAt(i);
@@ -4721,19 +4701,32 @@
app.onConfigurationChanged(mTempConfig);
}
- final Message msg = PooledLambda.obtainMessage(
- ActivityManagerInternal::broadcastGlobalConfigurationChanged,
- mAmInternal, changes, initLocale);
- mH.sendMessage(msg);
+ final Configuration configurationForSettings =
+ persistent && Settings.System.hasInterestingConfigurationChanges(changes)
+ ? new Configuration(mTempConfig) : null;
+ mH.post(() -> {
+ FrameworkStatsLog.write(FrameworkStatsLog.RESOURCE_CONFIGURATION_CHANGED,
+ values.colorMode, values.densityDpi, values.fontScale,
+ values.hardKeyboardHidden, values.keyboard, values.keyboardHidden,
+ values.mcc, values.mnc, values.navigation, values.navigationHidden,
+ values.orientation, values.screenHeightDp, values.screenLayout,
+ values.screenWidthDp, values.smallestScreenWidthDp, values.touchscreen,
+ values.uiMode);
+ if ((changes & ActivityInfo.CONFIG_ORIENTATION) != 0) {
+ FrameworkStatsLog.write(FrameworkStatsLog.DEVICE_ORIENTATION_CHANGED,
+ values.orientation);
+ }
+ if (configurationForSettings != null) {
+ Settings.System.putConfigurationForUser(mContext.getContentResolver(),
+ configurationForSettings, userId);
+ }
+ mAmInternal.broadcastGlobalConfigurationChanged(changes, initLocale);
+ });
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "RootConfigChange");
// Update stored global config and notify everyone about the change.
mRootWindowContainer.onConfigurationChanged(mTempConfig);
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
- if ((changes & ActivityInfo.CONFIG_ORIENTATION) != 0) {
- FrameworkStatsLog.write(FrameworkStatsLog.DEVICE_ORIENTATION_CHANGED,
- values.orientation);
- }
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
return changes;
@@ -4883,11 +4876,6 @@
mWindowManager.setEventDispatching(booted && !mShuttingDown);
}
- private void sendPutConfigurationForUserMsg(int userId, Configuration config) {
- final ContentResolver resolver = mContext.getContentResolver();
- Settings.System.putConfigurationForUser(resolver, config, userId);
- }
-
boolean isActivityStartsLoggingEnabled() {
return mAmInternal.isActivityStartsLoggingEnabled();
}