Display.java revision ac8dea12c17aa047e03a358110aeb60401d36aa2
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.graphics.Point; 20ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.graphics.Rect; 21ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.os.RemoteException; 22ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.os.ServiceManager; 23ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.os.SystemClock; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.DisplayMetrics; 25ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.util.Slog; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornpublic class Display { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Specify the default Display 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_DISPLAY = 0; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35833533c9292f860e4dfc060a4eba6429cd259ed4Mathias Agopian * Use {@link android.view.WindowManager#getDefaultDisplay() 36833533c9292f860e4dfc060a4eba6429cd259ed4Mathias Agopian * WindowManager.getDefaultDisplay()} to create a Display object. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Display gives you access to some information about a particular display 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connected to the device. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Display(int display) { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // initalize the statics when this class is first instansiated. This is 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // done here instead of in the static block because Zygote 43ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn synchronized (sStaticInit) { 44ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn if (!sInitialized) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nativeClassInit(); 46ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn sInitialized = true; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDisplay = display; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(display); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 545cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * Returns the index of this display. This is currently undefined; do 555cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * not use. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getDisplayId() { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDisplay; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 625cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * Returns the number of displays connected to the device. This is 635cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * currently undefined; do not use. 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native static int getDisplayCount(); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 68ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * Returns the raw size of the display, in pixels. Note that this 695cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * should <em>not</em> generally be used for computing layouts, since 705cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * a device will typically have screen decoration (such as a status bar) 715cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * along the edges of the display that reduce the amount of application 725cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * space available from the raw size returned here. This value is 735cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * adjusted for you based on the current rotation of the display. 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 75ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public void getSize(Point outSize) { 76ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn try { 77ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn IWindowManager wm = getWindowManager(); 78ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn if (wm != null) { 79ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn wm.getDisplaySize(outSize); 80ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } else { 81ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn // This is just for boot-strapping, initializing the 82ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn // system process before the window manager is up. 83ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn outSize.y = getRealHeight(); 84ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 85ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } catch (RemoteException e) { 86ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn Slog.w("Display", "Unable to get display size", e); 87ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 88ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 91ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * This is just easier for some parts of the framework. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 93ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public void getRectSize(Rect outSize) { 94ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn synchronized (mTmpPoint) { 95ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn getSize(mTmpPoint); 96ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn outSize.set(0, 0, mTmpPoint.x, mTmpPoint.y); 97ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 98ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 100ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** 101ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * Return the maximum screen size dimension that will happen. This is 102ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * mostly for wallpapers. 103ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * @hide 104ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn */ 105ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public int getMaximumSizeDimension() { 106ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn try { 107ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn IWindowManager wm = getWindowManager(); 108ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn return wm.getMaximumSizeDimension(); 109ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } catch (RemoteException e) { 110ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn Slog.w("Display", "Unable to get display maximum size dimension", e); 111ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn return 0; 112ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 113ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 114ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 115ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** 116ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * @deprecated Use {@link #getSize(Point)} instead. 117ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn */ 118ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn @Deprecated 119ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public int getWidth() { 120ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn synchronized (mTmpPoint) { 121ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn long now = SystemClock.uptimeMillis(); 122ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn if (now > (mLastGetTime+20)) { 123ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn getSize(mTmpPoint); 124ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn mLastGetTime = now; 125ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 126ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn return mTmpPoint.x; 127ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 128ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 129ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 130ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** 131ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * @deprecated Use {@link #getSize(Point)} instead. 132ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn */ 133ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn @Deprecated 134ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public int getHeight() { 135ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn synchronized (mTmpPoint) { 136ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn long now = SystemClock.uptimeMillis(); 137ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn if (now > (mLastGetTime+20)) { 138ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn getSize(mTmpPoint); 139ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn mLastGetTime = now; 140ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 141ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn return mTmpPoint.y; 142ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 143ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 144ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 145ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** @hide Returns the actual screen size, not including any decor. */ 14699aac7beca18b6d73e40db5e8e49f52f94be638eDianne Hackborn native public int getRealWidth(); 147ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** @hide Returns the actual screen size, not including any decor. */ 14899aac7beca18b6d73e40db5e8e49f52f94be638eDianne Hackborn native public int getRealHeight(); 149ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 150ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** @hide special for when we are faking the screen size. */ 151ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn native public int getRawWidth(); 152ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** @hide special for when we are faking the screen size. */ 153ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn native public int getRawHeight(); 15499aac7beca18b6d73e40db5e8e49f52f94be638eDianne Hackborn 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1565cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * Returns the rotation of the screen from its "natural" orientation. 1575cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * The returned value may be {@link Surface#ROTATION_0 Surface.ROTATION_0} 1585cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * (no rotation), {@link Surface#ROTATION_90 Surface.ROTATION_90}, 1595cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * {@link Surface#ROTATION_180 Surface.ROTATION_180}, or 1605cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * {@link Surface#ROTATION_270 Surface.ROTATION_270}. For 1615cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * example, if a device has a naturally tall screen, and the user has 1625cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * turned it on its side to go into a landscape orientation, the value 1635cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * returned here may be either {@link Surface#ROTATION_90 Surface.ROTATION_90} 1645cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * or {@link Surface#ROTATION_270 Surface.ROTATION_270} depending on 1655cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * the direction it was turned. The angle is the rotation of the drawn 1665cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * graphics on the screen, which is the opposite direction of the physical 1675cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * rotation of the device. For example, if the device is rotated 90 1685cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * degrees counter-clockwise, to compensate rendering will be rotated by 1695cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * 90 degrees clockwise and thus the returned value here will be 1705cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * {@link Surface#ROTATION_90 Surface.ROTATION_90}. 1715cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn */ 1725cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn public int getRotation() { 1735cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn return getOrientation(); 1745cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn } 1755cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn 1765cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn /** 1774c904a3bf3dbe98607b5e3f706ee8ef8887ee104Joe Onorato * @deprecated use {@link #getRotation} 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return orientation of this display. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1805cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn @Deprecated native public int getOrientation(); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1835cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * Return the native pixel format of the display. The returned value 1845cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * may be one of the constants int {@link android.graphics.PixelFormat}. 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getPixelFormat() { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPixelFormat; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1915cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * Return the refresh rate of this display in frames per second. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getRefreshRate() { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRefreshRate; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Initialize a DisplayMetrics object from this display's data. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outMetrics 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getMetrics(DisplayMetrics outMetrics) { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outMetrics.widthPixels = getWidth(); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outMetrics.heightPixels = getHeight(); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outMetrics.density = mDensity; 20611ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn outMetrics.densityDpi = (int)((mDensity*DisplayMetrics.DENSITY_DEFAULT)+.5f); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outMetrics.scaledDensity= outMetrics.density; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outMetrics.xdpi = mDpiX; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outMetrics.ydpi = mDpiY; 210e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 211e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn outMetrics.realWidthPixels = outMetrics.widthPixels; 212e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn outMetrics.realHeightPixels = outMetrics.heightPixels; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 215ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn static IWindowManager getWindowManager() { 216ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn synchronized (sStaticInit) { 217ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn if (sWindowManager == null) { 218ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn sWindowManager = IWindowManager.Stub.asInterface( 219ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn ServiceManager.getService("window")); 220ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 221ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn return sWindowManager; 222ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 223ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 224ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * We use a class initializer to allow the native code to cache some 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * field offsets. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native private static void nativeClassInit(); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private native void init(int display); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mDisplay; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Following fields are initialized from native code 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mPixelFormat; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mRefreshRate; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mDensity; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mDpiX; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mDpiY; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 241ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn private final Point mTmpPoint = new Point(); 242ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn private float mLastGetTime; 243ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 244ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn private static final Object sStaticInit = new Object(); 245ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn private static boolean sInitialized = false; 246ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn private static IWindowManager sWindowManager; 247ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima 248ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima /** 249ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima * Returns a display object which uses the metric's width/height instead. 250ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima * @hide 251ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima */ 252ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima public static Display createMetricsBasedDisplay(int displayId, DisplayMetrics metrics) { 253ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima return new CompatibleDisplay(displayId, metrics); 254ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima } 255ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima 256ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima private static class CompatibleDisplay extends Display { 257ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima private final DisplayMetrics mMetrics; 258ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima 259ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima private CompatibleDisplay(int displayId, DisplayMetrics metrics) { 260ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima super(displayId); 261ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima mMetrics = metrics; 262ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima } 263ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima 264ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima @Override 265ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima public int getWidth() { 266ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima return mMetrics.widthPixels; 267ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima } 268ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima 269ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima @Override 270ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima public int getHeight() { 271ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima return mMetrics.heightPixels; 272ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima } 273ddd12535f095d8d056716c3290faf50ec52a538aMitsuru Oshima } 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 276