diff options
| author | Dianne Hackborn <hackbod@google.com> | 2011-05-31 17:59:49 -0700 |
|---|---|---|
| committer | Dianne Hackborn <hackbod@google.com> | 2011-05-31 18:04:14 -0700 |
| commit | 2f0b17573d4324832f7a20402a3d2b5920bc4866 (patch) | |
| tree | eb85b9344237741f21f4989950677692b3bdbbda /core/java/android/content/res | |
| parent | 8ede62745faa02265f927941d1195b6c1bf05ebb (diff) | |
| download | frameworks_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.java | 15 | ||||
| -rw-r--r-- | core/java/android/content/res/Configuration.java | 6 | ||||
| -rwxr-xr-x | core/java/android/content/res/Resources.java | 14 |
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); |
