blob: 34d7935dd2f9da483f7a13098fc6cc047abbcaea [file] [log] [blame]
/*
* Copyright (C) 2006 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.view;
import android.util.DisplayMetrics;
public class Display
{
/**
* Specify the default Display
*/
public static final int DEFAULT_DISPLAY = 0;
/**
* Use {@link android.view.WindowManager#getDefaultDisplay()
* WindowManager.getDefaultDisplay()} to create a Display object.
* Display gives you access to some information about a particular display
* connected to the device.
*/
Display(int display) {
// initalize the statics when this class is first instansiated. This is
// done here instead of in the static block because Zygote
synchronized (mStaticInit) {
if (!mInitialized) {
nativeClassInit();
mInitialized = true;
}
}
mDisplay = display;
init(display);
}
/**
* Returns the index of this display. This is currently undefined; do
* not use.
*/
public int getDisplayId() {
return mDisplay;
}
/**
* Returns the number of displays connected to the device. This is
* currently undefined; do not use.
*/
native static int getDisplayCount();
/**
* Returns the raw width of the display, in pixels. Note that this
* should <em>not</em> generally be used for computing layouts, since
* a device will typically have screen decoration (such as a status bar)
* along the edges of the display that reduce the amount of application
* space available from the raw size returned here. This value is
* adjusted for you based on the current rotation of the display.
*/
native public int getWidth();
/**
* Returns the raw height of the display, in pixels. Note that this
* should <em>not</em> generally be used for computing layouts, since
* a device will typically have screen decoration (such as a status bar)
* along the edges of the display that reduce the amount of application
* space available from the raw size returned here. This value is
* adjusted for you based on the current rotation of the display.
*/
native public int getHeight();
/**
* 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},
* {@link Surface#ROTATION_180 Surface.ROTATION_180}, or
* {@link Surface#ROTATION_270 Surface.ROTATION_270}. For
* example, if a device has a naturally tall screen, and the user has
* turned it on its side to go into a landscape orientation, the value
* returned here may be either {@link Surface#ROTATION_90 Surface.ROTATION_90}
* or {@link Surface#ROTATION_270 Surface.ROTATION_270} depending on
* the direction it was turned. The angle is the rotation of the drawn
* graphics on the screen, which is the opposite direction of the physical
* rotation of the device. For example, if the device is rotated 90
* degrees counter-clockwise, to compensate rendering will be rotated by
* 90 degrees clockwise and thus the returned value here will be
* {@link Surface#ROTATION_90 Surface.ROTATION_90}.
*/
public int getRotation() {
return getOrientation();
}
/**
* @deprecated use {@link #getRotation}
* @return orientation of this display.
*/
@Deprecated native public int getOrientation();
/**
* Return the native pixel format of the display. The returned value
* may be one of the constants int {@link android.graphics.PixelFormat}.
*/
public int getPixelFormat() {
return mPixelFormat;
}
/**
* Return the refresh rate of this display in frames per second.
*/
public float getRefreshRate() {
return mRefreshRate;
}
/**
* Initialize a DisplayMetrics object from this display's data.
*
* @param outMetrics
*/
public void getMetrics(DisplayMetrics outMetrics) {
outMetrics.widthPixels = getWidth();
outMetrics.heightPixels = getHeight();
outMetrics.density = mDensity;
outMetrics.densityDpi = (int)((mDensity*DisplayMetrics.DENSITY_DEFAULT)+.5f);
outMetrics.scaledDensity= outMetrics.density;
outMetrics.xdpi = mDpiX;
outMetrics.ydpi = mDpiY;
}
/*
* We use a class initializer to allow the native code to cache some
* field offsets.
*/
native private static void nativeClassInit();
private native void init(int display);
private int mDisplay;
// Following fields are initialized from native code
private int mPixelFormat;
private float mRefreshRate;
private float mDensity;
private float mDpiX;
private float mDpiY;
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;
}
}
}