summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android (Google) Code Review <android-gerrit@google.com> 2009-07-14 16:13:38 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2009-07-14 16:13:38 -0700
commitb5c735d35c8c1d2fb4e4654fbffcdb62d5acab4d (patch)
tree0f52ccbf5aa992d59fe5cfe173b33bf1e475b283
parentb3948bbd8dfba7fac64d2c06d871386c987692c2 (diff)
parentddd12535f095d8d056716c3290faf50ec52a538a (diff)
Merge change 7106 into donut
* changes: Return adjusted display for WindowManager.getDefaultDisplay()
-rw-r--r--core/java/android/content/res/Resources.java20
-rw-r--r--core/java/android/view/Display.java27
-rw-r--r--core/java/android/view/Window.java8
3 files changed, 53 insertions, 2 deletions
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 8de938d58df2..a9aa1ee6b835 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -34,6 +34,7 @@ import android.util.Log;
import android.util.SparseArray;
import android.util.TypedValue;
import android.util.LongSparseArray;
+import android.view.Display;
import java.io.IOException;
import java.io.InputStream;
@@ -87,6 +88,7 @@ public class Resources {
PluralRules mPluralRule;
private final CompatibilityInfo mCompatibilityInfo;
+ private Display mDefaultDisplay;
private static final LongSparseArray<Object> EMPTY_ARRAY = new LongSparseArray<Object>() {
@Override
@@ -1915,6 +1917,24 @@ public class Resources {
+ Integer.toHexString(id));
}
+ /**
+ * Returns the display adjusted for the Resources' metrics.
+ * @hide
+ */
+ public Display getDefaultDisplay(Display defaultDisplay) {
+ if (mDefaultDisplay == null) {
+ if (!mCompatibilityInfo.isScalingRequired() && mCompatibilityInfo.supportsScreen()) {
+ // the app supports the display. just use the default one.
+ mDefaultDisplay = defaultDisplay;
+ } else {
+ // display needs adjustment.
+ mDefaultDisplay = Display.createMetricsBasedDisplay(
+ defaultDisplay.getDisplayId(), mMetrics);
+ }
+ }
+ return mDefaultDisplay;
+ }
+
private TypedArray getCachedStyledAttributes(int len) {
synchronized (mTmpValue) {
TypedArray attrs = mCachedStyledAttributes;
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 09ebeed543e1..5551f64bcde3 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -117,5 +117,32 @@ public class Display
private static final Object mStaticInit = new Object();
private static boolean mInitialized = false;
+
+ /**
+ * Returns a display object which uses the metric's width/height instead.
+ * @hide
+ */
+ public static Display createMetricsBasedDisplay(int displayId, DisplayMetrics metrics) {
+ return new CompatibleDisplay(displayId, metrics);
+ }
+
+ private static class CompatibleDisplay extends Display {
+ private final DisplayMetrics mMetrics;
+
+ private CompatibleDisplay(int displayId, DisplayMetrics metrics) {
+ super(displayId);
+ mMetrics = metrics;
+ }
+
+ @Override
+ public int getWidth() {
+ return mMetrics.widthPixels;
+ }
+
+ @Override
+ public int getHeight() {
+ return mMetrics.heightPixels;
+ }
+ }
}
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index d7457a030468..576c8c1a8483 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -358,6 +358,8 @@ public abstract class Window {
private class LocalWindowManager implements WindowManager {
LocalWindowManager(WindowManager wm) {
mWindowManager = wm;
+ mDefaultDisplay = mContext.getResources().getDefaultDisplay(
+ mWindowManager.getDefaultDisplay());
}
public final void addView(View view, ViewGroup.LayoutParams params) {
@@ -420,10 +422,12 @@ public abstract class Window {
}
public Display getDefaultDisplay() {
- return mWindowManager.getDefaultDisplay();
+ return mDefaultDisplay;
}
- WindowManager mWindowManager;
+ private final WindowManager mWindowManager;
+
+ private final Display mDefaultDisplay;
}
/**