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.
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 + "}";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user