Display.java revision d9273d6f289d9b55da3fd0db2f659fdfb48106a8
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 1948d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautnerimport android.content.res.CompatibilityInfo; 20fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.graphics.PixelFormat; 21ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.graphics.Point; 22ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.graphics.Rect; 23bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brownimport android.hardware.display.DisplayManagerGlobal; 24a506a6ec94863a35acca9feb165db76ddac3892cJeff Brownimport android.os.Process; 25ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackbornimport android.os.SystemClock; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.DisplayMetrics; 27fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.util.Log; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown/** 30fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Provides information about the size and density of a logical display. 31fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 32fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The display area is described in two different ways. 33fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <ul> 34fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <li>The application display area specifies the part of the display that may contain 35fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * an application window, excluding the system decorations. The application display area may 36fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * be smaller than the real display area because the system subtracts the space needed 37fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * for decor elements such as the status bar. Use the following methods to query the 38fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * application display area: {@link #getSize}, {@link #getRectSize} and {@link #getMetrics}.</li> 39fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <li>The real display area specifies the part of the display that contains content 40fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * including the system decorations. Even so, the real display area may be smaller than the 41fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * physical size of the display if the window manager is emulating a smaller display 42fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * using (adb shell am display-size). Use the following methods to query the 43fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * real display area: {@link #getRealSize}, {@link #getRealMetrics}.</li> 44fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </ul> 45fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p><p> 46fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * A logical display does not necessarily represent a particular physical display device 47fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * such as the built-in screen or an external monitor. The contents of a logical 48fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * display may be presented on one or more physical displays according to the devices 49fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * that are currently attached and whether mirroring has been enabled. 50fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 51bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown */ 52fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownpublic final class Display { 53fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private static final String TAG = "Display"; 54bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private static final boolean DEBUG = false; 55fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 56bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private final DisplayManagerGlobal mGlobal; 57fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private final int mDisplayId; 584ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private final int mLayerStack; 5992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown private final int mFlags; 6092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown private final int mType; 6192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown private final String mAddress; 62a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown private final int mOwnerUid; 63a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown private final String mOwnerPackageName; 6448d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner private final DisplayAdjustments mDisplayAdjustments; 65bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 66bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private DisplayInfo mDisplayInfo; // never null 67bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private boolean mIsValid; 68fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 69fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown // Temporary display metrics structure used for compatibility mode. 70fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private final DisplayMetrics mTempMetrics = new DisplayMetrics(); 71fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 72fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown // We cache the app width and height properties briefly between calls 73fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown // to getHeight() and getWidth() to ensure that applications perceive 74fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown // consistent results when the size changes (most of the time). 75fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown // Applications should now be using getSize() instead. 76fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private static final int CACHED_APP_SIZE_DURATION_MILLIS = 20; 77fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private long mLastCachedAppSizeUpdate; 78fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private int mCachedAppWidthCompat; 79fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private int mCachedAppHeightCompat; 805fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8298365d7663cbd82979a5700faf0050220b01084dJeff Brown * The default Display id, which is the id of the built-in primary display 8398365d7663cbd82979a5700faf0050220b01084dJeff Brown * assuming there is one. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_DISPLAY = 0; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8877aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * Display flag: Indicates that the display supports compositing content 8977aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * that is stored in protected graphics buffers. 90c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * <p> 91f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * If this flag is set then the display device supports compositing protected buffers. 92f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * </p><p> 93f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * If this flag is not set then the display device may not support compositing 94f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * protected buffers; the user may see a blank region on the screen instead of 95f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * the protected content. 96f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * </p><p> 9777aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * Secure (DRM) video decoders may allocate protected graphics buffers to request that 9877aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * a hardware-protected path be provided between the video decoder and the external 9977aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * display sink. If a hardware-protected path is not available, then content stored 10077aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * in protected graphics buffers may not be composited. 101c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * </p><p> 102f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * An application can use the absence of this flag as a hint that it should not use protected 103f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * buffers for this display because the content may not be visible. For example, 104f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * if the flag is not set then the application may choose not to show content on this 105f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * display, show an informative error message, select an alternate content stream 106f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * or adopt a different strategy for decoding content that does not rely on 107f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * protected buffers. 108c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * </p> 109f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * 110f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * @see #getFlags 111c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown */ 11277aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1 << 0; 113c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 114c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown /** 115f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * Display flag: Indicates that the display has a secure video output and 116f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * supports compositing secure surfaces. 117f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * <p> 118f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * If this flag is set then the display device has a secure video output 119f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * and is capable of showing secure surfaces. It may also be capable of 120f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * showing {@link #FLAG_SUPPORTS_PROTECTED_BUFFERS protected buffers}. 121f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * </p><p> 122f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * If this flag is not set then the display device may not have a secure video 123f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * output; the user may see a blank region on the screen instead of 124f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * the contents of secure surfaces or protected buffers. 125f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * </p><p> 126f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * Secure surfaces are used to prevent content rendered into those surfaces 127f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * by applications from appearing in screenshots or from being viewed 128f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * on non-secure displays. Protected buffers are used by secure video decoders 129f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * for a similar purpose. 130f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * </p><p> 131f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * An application creates a window with a secure surface by specifying the 132f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * {@link WindowManager.LayoutParams#FLAG_SECURE} window flag. 133f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * Likewise, an application creates a {@link SurfaceView} with a secure surface 134f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * by calling {@link SurfaceView#setSecure} before attaching the secure view to 135f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * its containing window. 136f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * </p><p> 137f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * An application can use the absence of this flag as a hint that it should not create 138f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * secure surfaces or protected buffers on this display because the content may 139f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * not be visible. For example, if the flag is not set then the application may 140f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * choose not to show content on this display, show an informative error message, 141f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * select an alternate content stream or adopt a different strategy for decoding 142f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * content that does not rely on secure surfaces or protected buffers. 143f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * </p> 144f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * 145f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * @see #getFlags 146f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown */ 147f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown public static final int FLAG_SECURE = 1 << 1; 148f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown 149f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown /** 150a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Display flag: Indicates that the display is private. Only the application that 151a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * owns the display can create windows on it. 1527d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * 1537d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * @see #getFlags 1547d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown */ 1557d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown public static final int FLAG_PRIVATE = 1 << 2; 1567d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown 1577d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown /** 1587d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * Display flag: Indicates that the display is a presentation display. 159a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 1607d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * This flag identifies secondary displays that are suitable for 1617d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * use as presentation displays such as HDMI or Wireless displays. Applications 1627d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * may automatically project their content to presentation displays to provide 1637d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * richer second screen experiences. 164a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 165a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * 166a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * @see #getFlags 167a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 1687d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown public static final int FLAG_PRESENTATION = 1 << 3; 169a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 170a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 17192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type: Unknown display type. 17292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 17392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 17492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public static final int TYPE_UNKNOWN = 0; 17592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 17692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 17792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type: Built-in display. 17892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 17992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 18092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public static final int TYPE_BUILT_IN = 1; 18192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 18292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 18392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type: HDMI display. 18492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 18592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 18692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public static final int TYPE_HDMI = 2; 18792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 18892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 18992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type: WiFi display. 19092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 19192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 19292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public static final int TYPE_WIFI = 3; 19392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 19492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 19592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type: Overlay display. 19692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 19792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 19892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public static final int TYPE_OVERLAY = 4; 19992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 20092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 201a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Display type: Virtual display. 202a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * @hide 203a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 204a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public static final int TYPE_VIRTUAL = 5; 205a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 206a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 207fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Internal method to create a display. 208fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Applications should use {@link android.view.WindowManager#getDefaultDisplay()} 20998365d7663cbd82979a5700faf0050220b01084dJeff Brown * or {@link android.hardware.display.DisplayManager#getDisplay} 21098365d7663cbd82979a5700faf0050220b01084dJeff Brown * to get a display object. 211fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 212fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * @hide 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 214bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public Display(DisplayManagerGlobal global, 215bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown int displayId, DisplayInfo displayInfo /*not null*/, 21648d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner DisplayAdjustments daj) { 217bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mGlobal = global; 218fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown mDisplayId = displayId; 219bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mDisplayInfo = displayInfo; 2201abaa53dccccc5c94a395bad5fa54cf6783b6974Craig Mautner mDisplayAdjustments = new DisplayAdjustments(daj); 221bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mIsValid = true; 22292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 22392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown // Cache properties that cannot change as long as the display is valid. 22492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown mLayerStack = displayInfo.layerStack; 22592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown mFlags = displayInfo.flags; 22692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown mType = displayInfo.type; 22792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown mAddress = displayInfo.address; 228a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown mOwnerUid = displayInfo.ownerUid; 229a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown mOwnerPackageName = displayInfo.ownerPackageName; 2305fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn } 2315fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 233fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Gets the display id. 234fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 235fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Each logical display has a unique id. 236fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The default display has id {@link #DEFAULT_DISPLAY}. 237fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getDisplayId() { 240fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return mDisplayId; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 244bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * Returns true if this display is still valid, false if the display has been removed. 245bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * 246bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * If the display is invalid, then the methods of this class will 247bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * continue to report the most recently observed display information. 248bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * However, it is unwise (and rather fruitless) to continue using a 249bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * {@link Display} object after the display's demise. 250bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * 251bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * It's possible for a display that was previously invalid to become 252bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * valid again if a display with the same id is reconnected. 253bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * 254bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * @return True if the display is still valid. 255bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown */ 256bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public boolean isValid() { 257bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown synchronized (this) { 258bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown updateDisplayInfoLocked(); 259bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mIsValid; 260bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 261bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 262bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 263bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown /** 2642ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown * Gets a full copy of the display information. 2652ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown * 2662ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown * @param outDisplayInfo The object to receive the copy of the display information. 267bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * @return True if the display is still valid. 2682ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown * @hide 2692ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown */ 270bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public boolean getDisplayInfo(DisplayInfo outDisplayInfo) { 2712ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown synchronized (this) { 2722ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown updateDisplayInfoLocked(); 2732ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown outDisplayInfo.copyFrom(mDisplayInfo); 274bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mIsValid; 2752ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown } 2762ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown } 2772ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown 2782ab1b7d9abc1b720b63ae01abcf1df0dc780eed4Jeff Brown /** 27998365d7663cbd82979a5700faf0050220b01084dJeff Brown * Gets the display's layer stack. 28098365d7663cbd82979a5700faf0050220b01084dJeff Brown * 28198365d7663cbd82979a5700faf0050220b01084dJeff Brown * Each display has its own independent layer stack upon which surfaces 28298365d7663cbd82979a5700faf0050220b01084dJeff Brown * are placed to be managed by surface flinger. 28398365d7663cbd82979a5700faf0050220b01084dJeff Brown * 2844ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * @return The display's layer stack number. 28598365d7663cbd82979a5700faf0050220b01084dJeff Brown * @hide 28698365d7663cbd82979a5700faf0050220b01084dJeff Brown */ 28798365d7663cbd82979a5700faf0050220b01084dJeff Brown public int getLayerStack() { 2884ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return mLayerStack; 28998365d7663cbd82979a5700faf0050220b01084dJeff Brown } 29098365d7663cbd82979a5700faf0050220b01084dJeff Brown 29198365d7663cbd82979a5700faf0050220b01084dJeff Brown /** 292c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * Returns a combination of flags that describe the capabilities of the display. 293c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * 294c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * @return The display flags. 295c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * 29677aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * @see #FLAG_SUPPORTS_PROTECTED_BUFFERS 297f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown * @see #FLAG_SECURE 298a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * @see #FLAG_PRIVATE 299c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown */ 300c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown public int getFlags() { 30192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return mFlags; 30292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown } 30392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 30492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 30592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Gets the display type. 30692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * 30792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @return The display type. 30892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * 30992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @see #TYPE_UNKNOWN 31092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @see #TYPE_BUILT_IN 31192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @see #TYPE_HDMI 31292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @see #TYPE_WIFI 31392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @see #TYPE_OVERLAY 314a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * @see #TYPE_VIRTUAL 31592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 31692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 31792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public int getType() { 31892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return mType; 31992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown } 32092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 32192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 32292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Gets the display address, or null if none. 32392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Interpretation varies by display type. 32492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * 32592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @return The display address. 32692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 32792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 32892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public String getAddress() { 32992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return mAddress; 330c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 331c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 332c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown /** 333a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Gets the UID of the application that owns this display, or zero if it is 334a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * owned by the system. 335a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 336a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * If the display is private, then only the owner can use it. 337a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 338a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * 339a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * @hide 340a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 341a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public int getOwnerUid() { 342a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return mOwnerUid; 343a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 344a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 345a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 346a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Gets the package name of the application that owns this display, or null if it is 347a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * owned by the system. 348a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 349a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * If the display is private, then only the owner can use it. 350a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 351a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * 352a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * @hide 353a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 354a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public String getOwnerPackageName() { 355a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return mOwnerPackageName; 356a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 357a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 358a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 35998365d7663cbd82979a5700faf0050220b01084dJeff Brown * Gets the compatibility info used by this display instance. 36098365d7663cbd82979a5700faf0050220b01084dJeff Brown * 36148d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner * @return The display adjustments holder, or null if none is required. 36298365d7663cbd82979a5700faf0050220b01084dJeff Brown * @hide 36398365d7663cbd82979a5700faf0050220b01084dJeff Brown */ 36448d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public DisplayAdjustments getDisplayAdjustments() { 36548d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner return mDisplayAdjustments; 36698365d7663cbd82979a5700faf0050220b01084dJeff Brown } 36798365d7663cbd82979a5700faf0050220b01084dJeff Brown 36898365d7663cbd82979a5700faf0050220b01084dJeff Brown /** 3694ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gets the name of the display. 37092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * <p> 37192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Note that some displays may be renamed by the user. 37292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * </p> 37392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * 3744ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * @return The display's name. 3754ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 3764ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public String getName() { 37792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown synchronized (this) { 37892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown updateDisplayInfoLocked(); 37992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return mDisplayInfo.name; 38092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown } 3814ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 3824ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 3834ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 384bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * Gets the size of the display, in pixels. 385bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * <p> 386bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * Note that this value should <em>not</em> be used for computing layouts, 387bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * since a device will typically have screen decoration (such as a status bar) 3885cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * along the edges of the display that reduce the amount of application 389bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * space available from the size returned here. Layouts should instead use 390bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * the window size. 391bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * </p><p> 392bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * The size is adjusted based on the current rotation of the display. 393bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * </p><p> 394bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * The size returned by this method does not necessarily represent the 395bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * actual raw size (native resolution) of the display. The returned size may 396fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * be adjusted to exclude certain system decoration elements that are always visible. 397bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * It may also be scaled to provide compatibility with older applications that 398bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * were originally designed for smaller displays. 399bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * </p> 400bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * 401bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * @param outSize A {@link Point} object to receive the size information. 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 403ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public void getSize(Point outSize) { 404fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 405fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 40648d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner mDisplayInfo.getAppMetrics(mTempMetrics, mDisplayAdjustments); 407fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outSize.x = mTempMetrics.widthPixels; 408fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outSize.y = mTempMetrics.heightPixels; 409ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 410ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 411fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 413bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * Gets the size of the display as a rectangle, in pixels. 414bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * 415bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * @param outSize A {@link Rect} object to receive the size information. 416bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * @see #getSize(Point) 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 418ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public void getRectSize(Rect outSize) { 419fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 420fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 42148d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner mDisplayInfo.getAppMetrics(mTempMetrics, mDisplayAdjustments); 422fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outSize.set(0, 0, mTempMetrics.widthPixels, mTempMetrics.heightPixels); 423ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 424ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 426ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** 42768c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * Return the range of display sizes an application can expect to encounter 42868c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * under normal operation, as long as there is no physical change in screen 42968c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * size. This is basically the sizes you will see as the orientation 43068c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * changes, taking into account whatever screen decoration there is in 43168c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * each rotation. For example, the status bar is always at the top of the 43268c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * screen, so it will reduce the height both in landscape and portrait, and 43368c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * the smallest height returned here will be the smaller of the two. 43468c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * 43568c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * This is intended for applications to get an idea of the range of sizes 43668c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * they will encounter while going through device rotations, to provide a 43768c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * stable UI through rotation. The sizes here take into account all standard 43868c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * system decorations that reduce the size actually available to the 43968c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * application: the status bar, navigation bar, system bar, etc. It does 44068c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * <em>not</em> take into account more transient elements like an IME 44168c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * soft keyboard. 44268c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * 44368c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * @param outSmallestSize Filled in with the smallest width and height 44468c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * that the application will encounter, in pixels (not dp units). The x 44568c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * (width) dimension here directly corresponds to 44668c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * {@link android.content.res.Configuration#smallestScreenWidthDp 44768c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * Configuration.smallestScreenWidthDp}, except the value here is in raw 44868c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * screen pixels rather than dp units. Your application may of course 44968c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * still get smaller space yet if, for example, a soft keyboard is 45068c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * being displayed. 45168c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * @param outLargestSize Filled in with the largest width and height 45268c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * that the application will encounter, in pixels (not dp units). Your 45368c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * application may of course still get larger space than this if, 45468c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn * for example, screen decorations like the status bar are being hidden. 45568c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn */ 45668c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn public void getCurrentSizeRange(Point outSmallestSize, Point outLargestSize) { 457fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 458fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 459fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outSmallestSize.x = mDisplayInfo.smallestNominalAppWidth; 460fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outSmallestSize.y = mDisplayInfo.smallestNominalAppHeight; 461fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outLargestSize.x = mDisplayInfo.largestNominalAppWidth; 462fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outLargestSize.y = mDisplayInfo.largestNominalAppHeight; 46368c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn } 46468c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn } 46568c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn 46668c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3Dianne Hackborn /** 467ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * Return the maximum screen size dimension that will happen. This is 468ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * mostly for wallpapers. 469ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * @hide 470ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn */ 471ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public int getMaximumSizeDimension() { 472fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 473fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 474fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return Math.max(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight); 475ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 476ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 477ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 478ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** 479ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * @deprecated Use {@link #getSize(Point)} instead. 480ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn */ 481ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn @Deprecated 482ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public int getWidth() { 483fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 484fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateCachedAppSizeIfNeededLocked(); 485fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return mCachedAppWidthCompat; 486ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 487ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 488ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 489ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn /** 490ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn * @deprecated Use {@link #getSize(Point)} instead. 491ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn */ 492ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn @Deprecated 493ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn public int getHeight() { 494fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 495fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateCachedAppSizeIfNeededLocked(); 496fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return mCachedAppHeightCompat; 497bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown } 498bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown } 499ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn 500bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown /** 501c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * @hide 502c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * Return a rectangle defining the insets of the overscan region of the display. 503c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * Each field of the rectangle is the number of pixels the overscan area extends 504c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * into the display on that side. 505c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn */ 506c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn public void getOverscanInsets(Rect outRect) { 507c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn synchronized (this) { 508c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn updateDisplayInfoLocked(); 509c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn outRect.set(mDisplayInfo.overscanLeft, mDisplayInfo.overscanTop, 510c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn mDisplayInfo.overscanRight, mDisplayInfo.overscanBottom); 511c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn } 512c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn } 513c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn 514c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn /** 5155cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * Returns the rotation of the screen from its "natural" orientation. 5165cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * The returned value may be {@link Surface#ROTATION_0 Surface.ROTATION_0} 5175cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * (no rotation), {@link Surface#ROTATION_90 Surface.ROTATION_90}, 5185cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * {@link Surface#ROTATION_180 Surface.ROTATION_180}, or 5195cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * {@link Surface#ROTATION_270 Surface.ROTATION_270}. For 5205cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * example, if a device has a naturally tall screen, and the user has 5215cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * turned it on its side to go into a landscape orientation, the value 5225cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * returned here may be either {@link Surface#ROTATION_90 Surface.ROTATION_90} 5235cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * or {@link Surface#ROTATION_270 Surface.ROTATION_270} depending on 5245cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * the direction it was turned. The angle is the rotation of the drawn 5255cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * graphics on the screen, which is the opposite direction of the physical 5265cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * rotation of the device. For example, if the device is rotated 90 5275cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * degrees counter-clockwise, to compensate rendering will be rotated by 5285cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * 90 degrees clockwise and thus the returned value here will be 5295cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn * {@link Surface#ROTATION_90 Surface.ROTATION_90}. 5305cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn */ 531d9273d6f289d9b55da3fd0db2f659fdfb48106a8Tor Norbye @Surface.Rotation 5325cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn public int getRotation() { 533fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 534fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 535fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return mDisplayInfo.rotation; 536fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 5375cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn } 538fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 5395cb70b54156fb305d579a1cc167424c8705bfdf7Dianne Hackborn /** 5404c904a3bf3dbe98607b5e3f706ee8ef8887ee104Joe Onorato * @deprecated use {@link #getRotation} 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return orientation of this display. 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 543fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Deprecated 544d9273d6f289d9b55da3fd0db2f659fdfb48106a8Tor Norbye @Surface.Rotation 545fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int getOrientation() { 546fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return getRotation(); 547fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 550fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Gets the pixel format of the display. 551fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * @return One of the constants defined in {@link android.graphics.PixelFormat}. 552fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 553fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * @deprecated This method is no longer supported. 554fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The result is always {@link PixelFormat#RGBA_8888}. 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 556fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Deprecated 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getPixelFormat() { 558fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return PixelFormat.RGBA_8888; 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 560fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 562fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Gets the refresh rate of this display in frames per second. 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getRefreshRate() { 565fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 566fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 567fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return mDisplayInfo.refreshRate; 568fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 570fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 572bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * Gets display metrics that describe the size and density of this display. 573bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * <p> 574bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * The size is adjusted based on the current rotation of the display. 575bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * </p><p> 576bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * The size returned by this method does not necessarily represent the 577bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * actual raw size (native resolution) of the display. The returned size may 578bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * be adjusted to exclude certain system decor elements that are always visible. 579bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * It may also be scaled to provide compatibility with older applications that 580bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * were originally designed for smaller displays. 581bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * </p> 582bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * 583bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown * @param outMetrics A {@link DisplayMetrics} object to receive the metrics. 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getMetrics(DisplayMetrics outMetrics) { 586fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 587fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 58848d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner mDisplayInfo.getAppMetrics(outMetrics, mDisplayAdjustments); 58968066c2f38e47b56f0510c56eafd827731a0dc08Dianne Hackborn } 59068066c2f38e47b56f0510c56eafd827731a0dc08Dianne Hackborn } 59168066c2f38e47b56f0510c56eafd827731a0dc08Dianne Hackborn 59268066c2f38e47b56f0510c56eafd827731a0dc08Dianne Hackborn /** 593fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Gets the real size of the display without subtracting any window decor or 594fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * applying any compatibility scale factors. 595fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 596fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The size is adjusted based on the current rotation of the display. 597fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p><p> 598fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The real size may be smaller than the physical size of the screen when the 599fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * window manager is emulating a smaller display (using adb shell am display-size). 600fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 601fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 602fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * @param outSize Set to the real size of the display. 60368066c2f38e47b56f0510c56eafd827731a0dc08Dianne Hackborn */ 604fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void getRealSize(Point outSize) { 605fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 606fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 607fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outSize.x = mDisplayInfo.logicalWidth; 608fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outSize.y = mDisplayInfo.logicalHeight; 609bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown } 610bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown } 611bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown 612bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown /** 613fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Gets display metrics based on the real size of this display. 614fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 615fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The size is adjusted based on the current rotation of the display. 616fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p><p> 617fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The real size may be smaller than the physical size of the screen when the 618fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * window manager is emulating a smaller display (using adb shell am display-size). 619fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 620fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 621fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * @param outMetrics A {@link DisplayMetrics} object to receive the metrics. 62293de746e5554bc9397ca8109f57875d92e64eabcJeff Brown */ 623fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void getRealMetrics(DisplayMetrics outMetrics) { 624fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown synchronized (this) { 625fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 62648d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner mDisplayInfo.getLogicalMetrics(outMetrics, 62748d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, 62848d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner mDisplayAdjustments.getActivityToken()); 629fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 63093de746e5554bc9397ca8109f57875d92e64eabcJeff Brown } 63193de746e5554bc9397ca8109f57875d92e64eabcJeff Brown 632a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 633a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Returns true if the specified UID has access to this display. 634a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * @hide 635a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 636a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public boolean hasAccess(int uid) { 637a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return Display.hasAccess(uid, mFlags, mOwnerUid); 638a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 639a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 640a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** @hide */ 641a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public static boolean hasAccess(int uid, int flags, int ownerUid) { 642a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return (flags & Display.FLAG_PRIVATE) == 0 643a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown || uid == ownerUid 644a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown || uid == Process.SYSTEM_UID 645a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown || uid == 0; 646a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 647a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 648fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private void updateDisplayInfoLocked() { 649bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown // Note: The display manager caches display info objects on our behalf. 650bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown DisplayInfo newInfo = mGlobal.getDisplayInfo(mDisplayId); 651bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown if (newInfo == null) { 652bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown // Preserve the old mDisplayInfo after the display is removed. 653bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown if (mIsValid) { 654bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mIsValid = false; 655bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown if (DEBUG) { 656bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown Log.d(TAG, "Logical display " + mDisplayId + " was removed."); 657bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 658bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 659bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } else { 660bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown // Use the new display info. (It might be the same object if nothing changed.) 661bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mDisplayInfo = newInfo; 662bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown if (!mIsValid) { 663bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mIsValid = true; 664bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown if (DEBUG) { 665bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown Log.d(TAG, "Logical display " + mDisplayId + " was recreated."); 666bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 667bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 668fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 671fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private void updateCachedAppSizeIfNeededLocked() { 672fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown long now = SystemClock.uptimeMillis(); 673fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown if (now > mLastCachedAppSizeUpdate + CACHED_APP_SIZE_DURATION_MILLIS) { 674fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown updateDisplayInfoLocked(); 67548d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner mDisplayInfo.getAppMetrics(mTempMetrics, mDisplayAdjustments); 676fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown mCachedAppWidthCompat = mTempMetrics.widthPixels; 677fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown mCachedAppHeightCompat = mTempMetrics.heightPixels; 678fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown mLastCachedAppSizeUpdate = now; 679fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 680ac8dea12c17aa047e03a358110aeb60401d36aa2Dianne Hackborn } 681bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown 682bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown // For debugging purposes 683bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown @Override 684bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown public String toString() { 685bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown synchronized (this) { 686bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown updateDisplayInfoLocked(); 68748d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner mDisplayInfo.getAppMetrics(mTempMetrics, mDisplayAdjustments); 688bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown return "Display id " + mDisplayId + ": " + mDisplayInfo 689bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown + ", " + mTempMetrics + ", isValid=" + mIsValid; 690bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown } 691bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown } 69292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 69392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 69492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * @hide 69592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 69692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public static String typeToString(int type) { 69792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown switch (type) { 69892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown case TYPE_UNKNOWN: 69992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return "UNKNOWN"; 70092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown case TYPE_BUILT_IN: 70192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return "BUILT_IN"; 70292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown case TYPE_HDMI: 70392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return "HDMI"; 70492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown case TYPE_WIFI: 70592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return "WIFI"; 70692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown case TYPE_OVERLAY: 70792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return "OVERLAY"; 708a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown case TYPE_VIRTUAL: 709a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return "VIRTUAL"; 71092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown default: 71192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown return Integer.toString(type); 71292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown } 71392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown } 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 716