summaryrefslogtreecommitdiffstats
path: root/core/java/android/app
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/app')
-rw-r--r--core/java/android/app/ActivityThread.java24
-rw-r--r--core/java/android/app/WallpaperManager.java18
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();