4041 final void handleConfigurationChanged(Configuration config, CompatibilityInfo compat) {
4042
4043 int configDiff = 0;
4044
4045 synchronized (mResourcesManager) {
4046 if (mPendingConfiguration != null) {
4047 if (!mPendingConfiguration.isOtherSeqNewer(config)) {
4048 config = mPendingConfiguration;
4049 mCurDefaultDisplayDpi = config.densityDpi;
4050 updateDefaultDensity();
4051 }
4052 mPendingConfiguration = null;
4053 }
4054
4055 if (config == null) {
4056 return;
4057 }
4058
4059 if (DEBUG_CONFIGURATION) Slog.v(TAG, "Handle configuration changed: "
4060 + config);
4061
4062 mResourcesManager.applyConfigurationToResourcesLocked(config, compat);
4063
4064 if (mConfiguration == null) {
4065 mConfiguration = new Configuration();
4066 }
4067 if (!mConfiguration.isOtherSeqNewer(config) && compat == null) {
4068 return;
4069 }
4070 configDiff = mConfiguration.diff(config);
4071 mConfiguration.updateFrom(config);
4072 config = applyCompatConfiguration(mCurDefaultDisplayDpi);
4073 }
4074
4075 ArrayList<ComponentCallbacks2> callbacks = collectComponentCallbacks(false, config);
4076
4077 freeTextLayoutCachesIfNeeded(configDiff);
4078
4079 if (callbacks != null) {
4080 final int N = callbacks.size();
4081 for (int i=0; i<N; i++) {
4082 performConfigurationChanged(callbacks.get(i), config);
4083 }
4084 }
4085 }