diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-11 21:20:55 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-11 21:20:55 -0700 |
commit | 7e3e04c144182c6807c66646b3f988beaba1720e (patch) | |
tree | 24ad99d46086e3d431ea12b78fe950ad5ab869d0 | |
parent | 4010ac35b1e49d659d7a32cc191302b8e2d8758a (diff) | |
parent | 58feea74b42bbaaa0552d76af23873bdd0b5dca2 (diff) | |
download | frameworks_base-7e3e04c144182c6807c66646b3f988beaba1720e.zip frameworks_base-7e3e04c144182c6807c66646b3f988beaba1720e.tar.gz frameworks_base-7e3e04c144182c6807c66646b3f988beaba1720e.tar.bz2 |
Merge change 1408 into donut
* changes:
* update all metrics data when updating density. * Keyboard should use DisplayMetrics from Resource rather than getting it from WindowManager as the display metrics can differ under compatibility mode.
-rw-r--r-- | core/java/android/app/ActivityThread.java | 16 | ||||
-rwxr-xr-x | core/java/android/inputmethodservice/Keyboard.java | 12 | ||||
-rw-r--r-- | core/java/android/util/DisplayMetrics.java | 20 |
3 files changed, 33 insertions, 15 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 2fc476e..5cb9fe2 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -191,16 +191,11 @@ public final class ActivityThread { usePreloaded = false; DisplayMetrics newMetrics = new DisplayMetrics(); newMetrics.setTo(metrics); - float invertedScale = 1.0f / applicationScale; - newMetrics.density *= invertedScale; - newMetrics.xdpi *= invertedScale; - newMetrics.ydpi *= invertedScale; - newMetrics.widthPixels *= invertedScale; - newMetrics.heightPixels *= invertedScale; + float newDensity = metrics.density / applicationScale; + newMetrics.updateDensity(newDensity); metrics = newMetrics; } - //Log.i(TAG, "Resource:" + appDir + ", density " + newMetrics.density + ", orig density:" + - // metrics.density); + //Log.i(TAG, "Resource:" + appDir + ", display metrics=" + metrics); r = new Resources(assets, metrics, getConfiguration(), usePreloaded); //Log.i(TAG, "Created app resources " + r + ": " + r.getConfiguration()); // XXX need to remove entries when weak references go away @@ -3502,8 +3497,11 @@ public final class ActivityThread { Resources r = v.get(); if (r != null) { // keep the original density based on application cale. - appDm.density = r.getDisplayMetrics().density; + appDm.updateDensity(r.getDisplayMetrics().density); + Log.i("oshima", "Updated app display metrics " + appDm); r.updateConfiguration(config, appDm); + // reset + appDm.setTo(dm); //Log.i(TAG, "Updated app resources " + v.getKey() // + " " + r + ": " + r.getConfiguration()); } else { diff --git a/core/java/android/inputmethodservice/Keyboard.java b/core/java/android/inputmethodservice/Keyboard.java index 6a560ce..fea63be 100755 --- a/core/java/android/inputmethodservice/Keyboard.java +++ b/core/java/android/inputmethodservice/Keyboard.java @@ -27,8 +27,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.TypedValue; import android.util.Xml; -import android.view.Display; -import android.view.WindowManager; +import android.util.DisplayMetrics; import java.io.IOException; import java.util.ArrayList; @@ -510,10 +509,11 @@ public class Keyboard { * @param modeId keyboard mode identifier */ public Keyboard(Context context, int xmlLayoutResId, int modeId) { - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - final Display display = wm.getDefaultDisplay(); - mDisplayWidth = display.getWidth(); - mDisplayHeight = display.getHeight(); + DisplayMetrics dm = context.getResources().getDisplayMetrics(); + mDisplayWidth = dm.widthPixels; + mDisplayHeight = dm.heightPixels; + //Log.v(TAG, "keyboard's display metrics:" + dm); + mDefaultHorizontalGap = 0; mDefaultWidth = mDisplayWidth / 10; mDefaultVerticalGap = 0; diff --git a/core/java/android/util/DisplayMetrics.java b/core/java/android/util/DisplayMetrics.java index 095f4f4..e4dd020 100644 --- a/core/java/android/util/DisplayMetrics.java +++ b/core/java/android/util/DisplayMetrics.java @@ -99,4 +99,24 @@ public class DisplayMetrics { xdpi = DEVICE_DENSITY; ydpi = DEVICE_DENSITY; } + + /** + * Set the display metrics' density and update parameters depend on it. + * @hide + */ + public void updateDensity(float newDensity) { + float ratio = newDensity / density; + density = newDensity; + scaledDensity = density; + widthPixels *= ratio; + heightPixels *= ratio; + xdpi *= ratio; + ydpi *= ratio; + } + + public String toString() { + return "DisplayMetrics{density=" + density + ", width=" + widthPixels + + ", height=" + heightPixels + ", scaledDensity=" + scaledDensity + + ", xdpi=" + xdpi + ", ydpi=" + ydpi + "}"; + } } |