@@ -166,6 +166,7 @@ public final class ActivityThread {
166166 = new HashMap <IBinder , Service >();
167167 AppBindData mBoundApplication ;
168168 Profiler mProfiler ;
169+ int mCurDefaultDisplayDpi ;
169170 Configuration mConfiguration ;
170171 Configuration mCompatConfiguration ;
171172 Configuration mResConfiguration ;
@@ -1306,6 +1307,7 @@ public void handleMessage(Message msg) {
13061307 break ;
13071308 case CONFIGURATION_CHANGED :
13081309 Trace .traceBegin (Trace .TRACE_TAG_ACTIVITY_MANAGER , "configChanged" );
1310+ mCurDefaultDisplayDpi = ((Configuration )msg .obj ).densityDpi ;
13091311 handleConfigurationChanged ((Configuration )msg .obj , null );
13101312 Trace .traceEnd (Trace .TRACE_TAG_ACTIVITY_MANAGER );
13111313 break ;
@@ -1539,14 +1541,15 @@ DisplayMetrics getDisplayMetricsLocked(CompatibilityInfo ci, boolean forceUpdate
15391541 }
15401542
15411543 private Configuration mMainThreadConfig = new Configuration ();
1542- Configuration applyConfigCompatMainThread (Configuration config , CompatibilityInfo compat ) {
1544+ Configuration applyConfigCompatMainThread (int displayDensity , Configuration config ,
1545+ CompatibilityInfo compat ) {
15431546 if (config == null ) {
15441547 return null ;
15451548 }
15461549 if (compat != null && !compat .supportsScreen ()) {
15471550 mMainThreadConfig .setTo (config );
15481551 config = mMainThreadConfig ;
1549- compat .applyToConfiguration (config );
1552+ compat .applyToConfiguration (displayDensity , config );
15501553 }
15511554 return config ;
15521555 }
@@ -3464,6 +3467,7 @@ private void handleRelaunchActivity(ActivityClientRecord tmp) {
34643467
34653468 // If there was a pending configuration change, execute it first.
34663469 if (changedConfig != null ) {
3470+ mCurDefaultDisplayDpi = changedConfig .densityDpi ;
34673471 handleConfigurationChanged (changedConfig , null );
34683472 }
34693473
@@ -3546,8 +3550,8 @@ ArrayList<ComponentCallbacks2> collectComponentCallbacksLocked(
35463550 for (ActivityClientRecord ar : mActivities .values ()) {
35473551 Activity a = ar .activity ;
35483552 if (a != null ) {
3549- Configuration thisConfig = applyConfigCompatMainThread (newConfig ,
3550- ar .packageInfo .mCompatibilityInfo .getIfNeeded ());
3553+ Configuration thisConfig = applyConfigCompatMainThread (mCurDefaultDisplayDpi ,
3554+ newConfig , ar .packageInfo .mCompatibilityInfo .getIfNeeded ());
35513555 if (!ar .activity .mFinished && (allActivities || !ar .paused )) {
35523556 // If the activity is currently resumed, its configuration
35533557 // needs to change right now.
@@ -3691,14 +3695,14 @@ final boolean applyConfigurationToResourcesLocked(Configuration config,
36913695 return changes != 0 ;
36923696 }
36933697
3694- final Configuration applyCompatConfiguration () {
3698+ final Configuration applyCompatConfiguration (int displayDensity ) {
36953699 Configuration config = mConfiguration ;
36963700 if (mCompatConfiguration == null ) {
36973701 mCompatConfiguration = new Configuration ();
36983702 }
36993703 mCompatConfiguration .setTo (mConfiguration );
37003704 if (mResCompatibilityInfo != null && !mResCompatibilityInfo .supportsScreen ()) {
3701- mResCompatibilityInfo .applyToConfiguration (mCompatConfiguration );
3705+ mResCompatibilityInfo .applyToConfiguration (displayDensity , mCompatConfiguration );
37023706 config = mCompatConfiguration ;
37033707 }
37043708 return config ;
@@ -3713,6 +3717,7 @@ final void handleConfigurationChanged(Configuration config, CompatibilityInfo co
37133717 if (mPendingConfiguration != null ) {
37143718 if (!mPendingConfiguration .isOtherSeqNewer (config )) {
37153719 config = mPendingConfiguration ;
3720+ mCurDefaultDisplayDpi = config .densityDpi ;
37163721 }
37173722 mPendingConfiguration = null ;
37183723 }
@@ -3734,7 +3739,7 @@ final void handleConfigurationChanged(Configuration config, CompatibilityInfo co
37343739 }
37353740 configDiff = mConfiguration .diff (config );
37363741 mConfiguration .updateFrom (config );
3737- config = applyCompatConfiguration ();
3742+ config = applyCompatConfiguration (mCurDefaultDisplayDpi );
37383743 callbacks = collectComponentCallbacksLocked (false , config );
37393744 }
37403745
@@ -3933,7 +3938,7 @@ private void handleBindApplication(AppBindData data) {
39333938 // Persistent processes on low-memory devices do not get to
39343939 // use hardware accelerated drawing, since this can add too much
39353940 // overhead to the process.
3936- Display display = WindowManagerImpl .getDefault ().getDefaultDisplay ();
3941+ final Display display = WindowManagerImpl .getDefault ().getDefaultDisplay ();
39373942 if (!ActivityManager .isHighEndGfx (display )) {
39383943 HardwareRenderer .disable (false );
39393944 }
@@ -3970,7 +3975,8 @@ private void handleBindApplication(AppBindData data) {
39703975 * in AppBindData can be safely assumed to be up to date
39713976 */
39723977 applyConfigurationToResourcesLocked (data .config , data .compatInfo );
3973- applyCompatConfiguration ();
3978+ mCurDefaultDisplayDpi = data .config .densityDpi ;
3979+ applyCompatConfiguration (mCurDefaultDisplayDpi );
39743980
39753981 data .info = getPackageInfoNoCheck (data .appInfo , data .compatInfo );
39763982
0 commit comments