diff options
Diffstat (limited to 'core/java/android/app')
-rw-r--r-- | core/java/android/app/ActivityThread.java | 24 | ||||
-rw-r--r-- | core/java/android/app/WallpaperManager.java | 18 |
2 files changed, 26 insertions, 16 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 7011bc1..f8d01de 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -166,6 +166,7 @@ public final class ActivityThread { = new HashMap<IBinder, Service>(); AppBindData mBoundApplication; Profiler mProfiler; + int mCurDefaultDisplayDpi; Configuration mConfiguration; Configuration mCompatConfiguration; Configuration mResConfiguration; @@ -1306,6 +1307,7 @@ public final class ActivityThread { break; case CONFIGURATION_CHANGED: Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "configChanged"); + mCurDefaultDisplayDpi = ((Configuration)msg.obj).densityDpi; handleConfigurationChanged((Configuration)msg.obj, null); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); break; @@ -1539,14 +1541,15 @@ public final class ActivityThread { } private Configuration mMainThreadConfig = new Configuration(); - Configuration applyConfigCompatMainThread(Configuration config, CompatibilityInfo compat) { + Configuration applyConfigCompatMainThread(int displayDensity, Configuration config, + CompatibilityInfo compat) { if (config == null) { return null; } if (compat != null && !compat.supportsScreen()) { mMainThreadConfig.setTo(config); config = mMainThreadConfig; - compat.applyToConfiguration(config); + compat.applyToConfiguration(displayDensity, config); } return config; } @@ -3464,6 +3467,7 @@ public final class ActivityThread { // If there was a pending configuration change, execute it first. if (changedConfig != null) { + mCurDefaultDisplayDpi = changedConfig.densityDpi; handleConfigurationChanged(changedConfig, null); } @@ -3546,8 +3550,8 @@ public final class ActivityThread { for (ActivityClientRecord ar : mActivities.values()) { Activity a = ar.activity; if (a != null) { - Configuration thisConfig = applyConfigCompatMainThread(newConfig, - ar.packageInfo.mCompatibilityInfo.getIfNeeded()); + Configuration thisConfig = applyConfigCompatMainThread(mCurDefaultDisplayDpi, + newConfig, ar.packageInfo.mCompatibilityInfo.getIfNeeded()); if (!ar.activity.mFinished && (allActivities || !ar.paused)) { // If the activity is currently resumed, its configuration // needs to change right now. @@ -3691,14 +3695,14 @@ public final class ActivityThread { return changes != 0; } - final Configuration applyCompatConfiguration() { + final Configuration applyCompatConfiguration(int displayDensity) { Configuration config = mConfiguration; if (mCompatConfiguration == null) { mCompatConfiguration = new Configuration(); } mCompatConfiguration.setTo(mConfiguration); if (mResCompatibilityInfo != null && !mResCompatibilityInfo.supportsScreen()) { - mResCompatibilityInfo.applyToConfiguration(mCompatConfiguration); + mResCompatibilityInfo.applyToConfiguration(displayDensity, mCompatConfiguration); config = mCompatConfiguration; } return config; @@ -3713,6 +3717,7 @@ public final class ActivityThread { if (mPendingConfiguration != null) { if (!mPendingConfiguration.isOtherSeqNewer(config)) { config = mPendingConfiguration; + mCurDefaultDisplayDpi = config.densityDpi; } mPendingConfiguration = null; } @@ -3734,7 +3739,7 @@ public final class ActivityThread { } configDiff = mConfiguration.diff(config); mConfiguration.updateFrom(config); - config = applyCompatConfiguration(); + config = applyCompatConfiguration(mCurDefaultDisplayDpi); callbacks = collectComponentCallbacksLocked(false, config); } @@ -3933,7 +3938,7 @@ public final class ActivityThread { // Persistent processes on low-memory devices do not get to // use hardware accelerated drawing, since this can add too much // overhead to the process. - Display display = WindowManagerImpl.getDefault().getDefaultDisplay(); + final Display display = WindowManagerImpl.getDefault().getDefaultDisplay(); if (!ActivityManager.isHighEndGfx(display)) { HardwareRenderer.disable(false); } @@ -3970,7 +3975,8 @@ public final class ActivityThread { * in AppBindData can be safely assumed to be up to date */ applyConfigurationToResourcesLocked(data.config, data.compatInfo); - applyCompatConfiguration(); + mCurDefaultDisplayDpi = data.config.densityDpi; + applyCompatConfiguration(mCurDefaultDisplayDpi); data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo); diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index c131549..27843ac 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -42,6 +42,7 @@ import android.os.ServiceManager; import android.util.DisplayMetrics; import android.util.Log; import android.view.ViewRootImpl; +import android.view.WindowManager; import java.io.FileOutputStream; import java.io.IOException; @@ -241,7 +242,7 @@ public class WallpaperManager { } mWallpaper = null; try { - mWallpaper = getCurrentWallpaperLocked(); + mWallpaper = getCurrentWallpaperLocked(context); } catch (OutOfMemoryError e) { Log.w(TAG, "No memory load current wallpaper", e); } @@ -264,7 +265,7 @@ public class WallpaperManager { } } - private Bitmap getCurrentWallpaperLocked() { + private Bitmap getCurrentWallpaperLocked(Context context) { try { Bundle params = new Bundle(); ParcelFileDescriptor fd = mService.getWallpaper(this, params); @@ -276,7 +277,7 @@ public class WallpaperManager { BitmapFactory.Options options = new BitmapFactory.Options(); Bitmap bm = BitmapFactory.decodeFileDescriptor( fd.getFileDescriptor(), null, options); - return generateBitmap(bm, width, height); + return generateBitmap(context, bm, width, height); } catch (OutOfMemoryError e) { Log.w(TAG, "Can't decode file", e); } finally { @@ -304,7 +305,7 @@ public class WallpaperManager { try { BitmapFactory.Options options = new BitmapFactory.Options(); Bitmap bm = BitmapFactory.decodeStream(is, null, options); - return generateBitmap(bm, width, height); + return generateBitmap(context, bm, width, height); } catch (OutOfMemoryError e) { Log.w(TAG, "Can't decode stream", e); } finally { @@ -768,12 +769,15 @@ public class WallpaperManager { setResource(com.android.internal.R.drawable.default_wallpaper); } - static Bitmap generateBitmap(Bitmap bm, int width, int height) { + static Bitmap generateBitmap(Context context, Bitmap bm, int width, int height) { if (bm == null) { return null; } - bm.setDensity(DisplayMetrics.DENSITY_DEVICE); + WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics metrics = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(metrics); + bm.setDensity(metrics.noncompatDensityDpi); if (width <= 0 || height <= 0 || (bm.getWidth() == width && bm.getHeight() == height)) { @@ -783,7 +787,7 @@ public class WallpaperManager { // This is the final bitmap we want to return. try { Bitmap newbm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - newbm.setDensity(DisplayMetrics.DENSITY_DEVICE); + newbm.setDensity(metrics.noncompatDensityDpi); Canvas c = new Canvas(newbm); Rect targetRect = new Rect(); |