diff options
Diffstat (limited to 'core/java/android/view')
-rw-r--r-- | core/java/android/view/Display.java | 14 | ||||
-rw-r--r-- | core/java/android/view/DisplayInfo.java | 101 | ||||
-rw-r--r-- | core/java/android/view/IWindowManager.aidl | 2 | ||||
-rw-r--r-- | core/java/android/view/WindowManager.java | 16 | ||||
-rw-r--r-- | core/java/android/view/WindowManagerPolicy.java | 6 |
5 files changed, 122 insertions, 17 deletions
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index 758abb5..e6a7950 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -437,6 +437,20 @@ public final class Display { } /** + * @hide + * Return a rectangle defining the insets of the overscan region of the display. + * Each field of the rectangle is the number of pixels the overscan area extends + * into the display on that side. + */ + public void getOverscanInsets(Rect outRect) { + synchronized (this) { + updateDisplayInfoLocked(); + outRect.set(mDisplayInfo.overscanLeft, mDisplayInfo.overscanTop, + mDisplayInfo.overscanRight, mDisplayInfo.overscanBottom); + } + } + + /** * Returns the rotation of the screen from its "natural" orientation. * The returned value may be {@link Surface#ROTATION_0 Surface.ROTATION_0} * (no rotation), {@link Surface#ROTATION_90 Surface.ROTATION_90}, diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java index 305fd5c..9fcd9b1 100644 --- a/core/java/android/view/DisplayInfo.java +++ b/core/java/android/view/DisplayInfo.java @@ -109,6 +109,30 @@ public final class DisplayInfo implements Parcelable { public int logicalHeight; /** + * @hide + * Number of overscan pixels on the left side of the display. + */ + public int overscanLeft; + + /** + * @hide + * Number of overscan pixels on the top side of the display. + */ + public int overscanTop; + + /** + * @hide + * Number of overscan pixels on the right side of the display. + */ + public int overscanRight; + + /** + * @hide + * Number of overscan pixels on the bottom side of the display. + */ + public int overscanBottom; + + /** * The rotation of the display relative to its natural orientation. * May be one of {@link android.view.Surface#ROTATION_0}, * {@link android.view.Surface#ROTATION_90}, {@link android.view.Surface#ROTATION_180}, @@ -196,6 +220,10 @@ public final class DisplayInfo implements Parcelable { && largestNominalAppHeight == other.largestNominalAppHeight && logicalWidth == other.logicalWidth && logicalHeight == other.logicalHeight + && overscanLeft == other.overscanLeft + && overscanTop == other.overscanTop + && overscanRight == other.overscanRight + && overscanBottom == other.overscanBottom && rotation == other.rotation && refreshRate == other.refreshRate && logicalDensityDpi == other.logicalDensityDpi @@ -222,6 +250,10 @@ public final class DisplayInfo implements Parcelable { largestNominalAppHeight = other.largestNominalAppHeight; logicalWidth = other.logicalWidth; logicalHeight = other.logicalHeight; + overscanLeft = other.overscanLeft; + overscanTop = other.overscanTop; + overscanRight = other.overscanRight; + overscanBottom = other.overscanBottom; rotation = other.rotation; refreshRate = other.refreshRate; logicalDensityDpi = other.logicalDensityDpi; @@ -243,6 +275,10 @@ public final class DisplayInfo implements Parcelable { largestNominalAppHeight = source.readInt(); logicalWidth = source.readInt(); logicalHeight = source.readInt(); + overscanLeft = source.readInt(); + overscanTop = source.readInt(); + overscanRight = source.readInt(); + overscanBottom = source.readInt(); rotation = source.readInt(); refreshRate = source.readFloat(); logicalDensityDpi = source.readInt(); @@ -265,6 +301,10 @@ public final class DisplayInfo implements Parcelable { dest.writeInt(largestNominalAppHeight); dest.writeInt(logicalWidth); dest.writeInt(logicalHeight); + dest.writeInt(overscanLeft); + dest.writeInt(overscanTop); + dest.writeInt(overscanRight); + dest.writeInt(overscanBottom); dest.writeInt(rotation); dest.writeFloat(refreshRate); dest.writeInt(logicalDensityDpi); @@ -318,18 +358,55 @@ public final class DisplayInfo implements Parcelable { // For debugging purposes @Override public String toString() { - return "DisplayInfo{\"" + name + "\", app " + appWidth + " x " + appHeight - + ", real " + logicalWidth + " x " + logicalHeight - + ", largest app " + largestNominalAppWidth + " x " + largestNominalAppHeight - + ", smallest app " + smallestNominalAppWidth + " x " + smallestNominalAppHeight - + ", " + refreshRate + " fps" - + ", rotation " + rotation - + ", density " + logicalDensityDpi - + ", " + physicalXDpi + " x " + physicalYDpi + " dpi" - + ", layerStack " + layerStack - + ", type " + Display.typeToString(type) - + ", address " + address - + flagsToString(flags) + "}"; + StringBuilder sb = new StringBuilder(); + sb.append("DisplayInfo{\""); + sb.append(name); + sb.append("\", app "); + sb.append(appWidth); + sb.append(" x "); + sb.append(appHeight); + sb.append(", real "); + sb.append(logicalWidth); + sb.append(" x "); + sb.append(logicalHeight); + if (overscanLeft != 0 || overscanTop != 0 || overscanRight != 0 || overscanBottom != 0) { + sb.append(", overscan ("); + sb.append(overscanLeft); + sb.append(","); + sb.append(overscanTop); + sb.append(","); + sb.append(overscanRight); + sb.append(","); + sb.append(overscanBottom); + sb.append(")"); + } + sb.append(", largest app "); + sb.append(largestNominalAppWidth); + sb.append(" x "); + sb.append(largestNominalAppHeight); + sb.append(", smallest app "); + sb.append(smallestNominalAppWidth); + sb.append(" x "); + sb.append(smallestNominalAppHeight); + sb.append(", "); + sb.append(refreshRate); + sb.append(" fps, rotation"); + sb.append(rotation); + sb.append(", density "); + sb.append(logicalDensityDpi); + sb.append(" ("); + sb.append(physicalXDpi); + sb.append(" x "); + sb.append(physicalYDpi); + sb.append(") dpi, layerStack "); + sb.append(layerStack); + sb.append(", type "); + sb.append(Display.typeToString(type)); + sb.append(", address "); + sb.append(address); + sb.append(flagsToString(flags)); + sb.append("}"); + return sb.toString(); } private static String flagsToString(int flags) { diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 885327c..e4ecb5c 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -65,6 +65,8 @@ interface IWindowManager void setForcedDisplayDensity(int displayId, int density); void clearForcedDisplayDensity(int displayId); + void setOverscan(int displayId, int left, int top, int right, int bottom); + // Is the device configured to have a full system bar for larger screens? boolean hasSystemNavBar(); diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 6a67d8b..d236561 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -735,20 +735,20 @@ public interface WindowManager extends ViewManager { /** * <p>Indicates whether this window should be hardware accelerated. * Requesting hardware acceleration does not guarantee it will happen.</p> - * + * * <p>This flag can be controlled programmatically <em>only</em> to enable * hardware acceleration. To enable hardware acceleration for a given * window programmatically, do the following:</p> - * + * * <pre> * Window w = activity.getWindow(); // in Activity's onCreate() for instance * w.setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, * WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); * </pre> - * + * * <p>It is important to remember that this flag <strong>must</strong> * be set before setting the content view of your activity or dialog.</p> - * + * * <p>This flag cannot be used to disable hardware acceleration after it * was enabled in your manifest using * {@link android.R.attr#hardwareAccelerated}. If you need to selectively @@ -756,13 +756,19 @@ public interface WindowManager extends ViewManager { * for instance), make sure it is turned off in your manifest and enable it * on your activity or dialog when you need it instead, using the method * described above.</p> - * + * * <p>This flag is automatically set by the system if the * {@link android.R.attr#hardwareAccelerated android:hardwareAccelerated} * XML attribute is set to true on an activity or on the application.</p> */ public static final int FLAG_HARDWARE_ACCELERATED = 0x01000000; + /** Window flag: allow window contents to extend in to the screen's + * overscan area, if there is one. The window should still correctly + * position its contents to take the overscan area into account. + */ + public static final int FLAG_LAYOUT_IN_OVERSCAN = 0x02000000; + // ----- HIDDEN FLAGS. // These start at the high bit and go down. diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index b5d216a..192eded 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -458,6 +458,12 @@ public interface WindowManagerPolicy { public void setInitialDisplaySize(Display display, int width, int height, int density); /** + * Called by window manager to set the overscan region that should be used for the + * given display. + */ + public void setDisplayOverscan(Display display, int left, int top, int right, int bottom); + + /** * Check permissions when adding a window. * * @param attrs The window's LayoutParams. |