summaryrefslogtreecommitdiffstats
path: root/core/java/android/content/res
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2011-05-31 17:59:49 -0700
committerDianne Hackborn <hackbod@google.com>2011-05-31 18:04:14 -0700
commit2f0b17573d4324832f7a20402a3d2b5920bc4866 (patch)
treeeb85b9344237741f21f4989950677692b3bdbbda /core/java/android/content/res
parent8ede62745faa02265f927941d1195b6c1bf05ebb (diff)
downloadframeworks_base-2f0b17573d4324832f7a20402a3d2b5920bc4866.zip
frameworks_base-2f0b17573d4324832f7a20402a3d2b5920bc4866.tar.gz
frameworks_base-2f0b17573d4324832f7a20402a3d2b5920bc4866.tar.bz2
Fix issue #4502672: Wrong xml resources used for homescreen widgets.
There was a race in the system process between applying the initial configuration and executing code in higher-level system services like the app widget service that relies on the config. For some reason it starting showing up more after my code changes; it should now be completely fixed. Also fix the activity starting window to run in compatibility mode if its application is going to be in compatibility mode. And some various cleanup and small fixes. Change-Id: I0566933bf1bbb4259c1d99a60c0a3c19af1542e5
Diffstat (limited to 'core/java/android/content/res')
-rw-r--r--core/java/android/content/res/CompatibilityInfo.java15
-rw-r--r--core/java/android/content/res/Configuration.java6
-rwxr-xr-xcore/java/android/content/res/Resources.java14
3 files changed, 19 insertions, 16 deletions
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java
index e42caca..b7b6de6 100644
--- a/core/java/android/content/res/CompatibilityInfo.java
+++ b/core/java/android/content/res/CompatibilityInfo.java
@@ -243,11 +243,11 @@ public class CompatibilityInfo implements Parcelable {
}
public boolean neverSupportsScreen() {
- return (mCompatibilityFlags&NEVER_NEEDS_COMPAT) != 0;
+ return (mCompatibilityFlags&ALWAYS_NEEDS_COMPAT) != 0;
}
public boolean alwaysSupportsScreen() {
- return (mCompatibilityFlags&ALWAYS_NEEDS_COMPAT) != 0;
+ return (mCompatibilityFlags&NEVER_NEEDS_COMPAT) != 0;
}
/**
@@ -406,7 +406,7 @@ public class CompatibilityInfo implements Parcelable {
if (!supportsScreen()) {
// This is a larger screen device and the app is not
// compatible with large screens, so diddle it.
- CompatibilityInfo.updateCompatibleScreenFrame(inoutDm, null, inoutDm);
+ CompatibilityInfo.computeCompatibleScaling(inoutDm, inoutDm);
} else {
inoutDm.widthPixels = inoutDm.unscaledWidthPixels;
inoutDm.heightPixels = inoutDm.unscaledHeightPixels;
@@ -443,8 +443,7 @@ public class CompatibilityInfo implements Parcelable {
* @param outRect the output parameter which will contain the result.
* @return Returns the scaling factor for the window.
*/
- public static float updateCompatibleScreenFrame(DisplayMetrics dm,
- Rect outRect, DisplayMetrics outDm) {
+ public static float computeCompatibleScaling(DisplayMetrics dm, DisplayMetrics outDm) {
final int width = dm.unscaledWidthPixels;
final int height = dm.unscaledHeightPixels;
int shortSize, longSize;
@@ -477,12 +476,6 @@ public class CompatibilityInfo implements Parcelable {
scale = 1;
}
- if (outRect != null) {
- final int left = (int)((width-(newWidth*scale))/2);
- final int top = (int)((height-(newHeight*scale))/2);
- outRect.set(left, top, left+newWidth, top+newHeight);
- }
-
if (outDm != null) {
outDm.widthPixels = newWidth;
outDm.heightPixels = newHeight;
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index d476997..6409aac 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -330,17 +330,17 @@ public final class Configuration implements Parcelable, Comparable<Configuration
if (smallestScreenWidthDp != SMALLEST_SCREEN_WIDTH_DP_UNDEFINED) {
sb.append(" sw"); sb.append(smallestScreenWidthDp); sb.append("dp");
} else {
- sb.append("?swdp");
+ sb.append(" ?swdp");
}
if (screenWidthDp != SCREEN_WIDTH_DP_UNDEFINED) {
sb.append(" w"); sb.append(screenWidthDp); sb.append("dp");
} else {
- sb.append("?wdp");
+ sb.append(" ?wdp");
}
if (screenHeightDp != SCREEN_HEIGHT_DP_UNDEFINED) {
sb.append(" h"); sb.append(screenHeightDp); sb.append("dp");
} else {
- sb.append("?hdp");
+ sb.append(" ?hdp");
}
switch ((screenLayout&SCREENLAYOUT_SIZE_MASK)) {
case SCREENLAYOUT_SIZE_UNDEFINED: sb.append(" ?lsize"); break;
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 81dc46a..70bf524 100755
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -28,14 +28,13 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable.ConstantState;
import android.os.Build;
import android.os.Bundle;
-import android.os.SystemProperties;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
+import android.util.Slog;
import android.util.SparseArray;
import android.util.TypedValue;
import android.util.LongSparseArray;
-import android.view.Display;
import java.io.IOException;
import java.io.InputStream;
@@ -1406,6 +1405,12 @@ public class Resources {
public void updateConfiguration(Configuration config,
DisplayMetrics metrics, CompatibilityInfo compat) {
synchronized (mTmpValue) {
+ if (false) {
+ Slog.i(TAG, "**** Updating config of " + this + ": old config is "
+ + mConfiguration + " old compat is " + mCompatibilityInfo);
+ Slog.i(TAG, "**** Updating config of " + this + ": new config is "
+ + config + " new compat is " + compat);
+ }
if (compat != null) {
mCompatibilityInfo = compat;
}
@@ -1471,6 +1476,11 @@ public class Resources {
mConfiguration.screenLayout, mConfiguration.uiMode,
Build.VERSION.RESOURCES_SDK_INT);
+ if (false) {
+ Slog.i(TAG, "**** Updating config of " + this + ": final config is " + mConfiguration
+ + " final compat is " + mCompatibilityInfo);
+ }
+
clearDrawableCache(mDrawableCache, configChanges);
clearDrawableCache(mColorDrawableCache, configChanges);