DisplayDeviceInfo.java revision 3f145a2f958320766ae9240c7a57debc20d578aa
1fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/* 2fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Copyright (C) 2012 The Android Open Source Project 3fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 4fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * you may not use this file except in compliance with the License. 6fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * You may obtain a copy of the License at 7fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 8fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 10fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Unless required by applicable law or agreed to in writing, software 11fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * See the License for the specific language governing permissions and 14fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * limitations under the License. 15fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 16fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 17fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownpackage com.android.server.display; 18fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 194ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brownimport android.hardware.display.DisplayViewport; 20cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brownimport android.util.DisplayMetrics; 2192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brownimport android.view.Display; 2227f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brownimport android.view.Surface; 23cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown 243f145a2f958320766ae9240c7a57debc20d578aaMichael Wrightimport java.util.Arrays; 253f145a2f958320766ae9240c7a57debc20d578aaMichael Wright 263f145a2f958320766ae9240c7a57debc20d578aaMichael Wrightimport libcore.util.EmptyArray; 274ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport libcore.util.Objects; 284ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 29fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/** 30fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Describes the characteristics of a physical display device. 31fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 324ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownfinal class DisplayDeviceInfo { 334ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 344ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Flag: Indicates that this display device should be considered the default display 354ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * device of the system. 364ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 37bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public static final int FLAG_DEFAULT_DISPLAY = 1 << 0; 384ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 394ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 4027f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * Flag: Indicates that the orientation of this display device is coupled to the 4127f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * rotation of its associated logical display. 4227f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * <p> 4327f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * This flag should be applied to the default display to indicate that the user 4427f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * physically rotates the display when content is presented in a different orientation. 4527f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * The display manager will apply a coordinate transformation assuming that the 4627f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * physical orientation of the display matches the logical orientation of its content. 4727f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * </p><p> 4827f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * The flag should not be set when the display device is mounted in a fixed orientation 4927f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * such as on a desk. The display manager will apply a coordinate transformation 5027f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * such as a scale and translation to letterbox or pillarbox format under the 5127f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * assumption that the physical orientation of the display is invariant. 5227f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * </p> 534ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 5427f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown public static final int FLAG_ROTATES_WITH_CONTENT = 1 << 1; 55c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 56c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown /** 5777aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * Flag: Indicates that this display device has secure video output, such as HDCP. 58c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown */ 5977aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown public static final int FLAG_SECURE = 1 << 2; 6077aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown 6177aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown /** 6277aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * Flag: Indicates that this display device supports compositing 6377aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown * from gralloc protected buffers. 6477aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown */ 6577aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1 << 3; 664ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 674ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 68a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Flag: Indicates that the display device is owned by a particular application 69a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * and that no other application should be able to interact with it. 70d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown * Should typically be used together with {@link #FLAG_OWN_CONTENT_ONLY}. 71a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 72a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public static final int FLAG_PRIVATE = 1 << 4; 73a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 74a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 75a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Flag: Indicates that the display device is not blanked automatically by 76a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * the power manager. 77a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 78a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public static final int FLAG_NEVER_BLANK = 1 << 5; 79a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 80a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 817d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * Flag: Indicates that the display is suitable for presentations. 827d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown */ 837d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown public static final int FLAG_PRESENTATION = 1 << 6; 847d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown 857d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown /** 86d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown * Flag: Only show this display's own content; do not mirror 87d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown * the content of another display. 88d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown */ 89d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown public static final int FLAG_OWN_CONTENT_ONLY = 1 << 7; 90d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown 91d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown /** 92d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * Touch attachment: Display does not receive touch. 93d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown */ 94d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown public static final int TOUCH_NONE = 0; 95d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 96d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown /** 97d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * Touch attachment: Touch input is via the internal interface. 98d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown */ 99d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown public static final int TOUCH_INTERNAL = 1; 100d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 101d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown /** 102d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * Touch attachment: Touch input is via an external interface, such as USB. 103d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown */ 104d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown public static final int TOUCH_EXTERNAL = 2; 105d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 106d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown /** 107848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * Gets the name of the display device, which may be derived from 108848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * EDID or other sources. The name may be displayed to the user. 109848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown */ 110848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown public String name; 111848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown 112848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown /** 113fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The width of the display in its natural orientation, in pixels. 114fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * This value is not affected by display rotation. 115fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 116fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int width; 117fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 118fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 119fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The height of the display in its natural orientation, in pixels. 120fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * This value is not affected by display rotation. 121fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 122fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int height; 123fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 124cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown /** 125e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * The refresh rate of the display, in frames per second. 126cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown */ 127fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float refreshRate; 128cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown 129cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown /** 1303f145a2f958320766ae9240c7a57debc20d578aaMichael Wright * The supported refresh rates of the display at the current resolution in frames per second. 1313f145a2f958320766ae9240c7a57debc20d578aaMichael Wright */ 1323f145a2f958320766ae9240c7a57debc20d578aaMichael Wright public float[] supportedRefreshRates = EmptyArray.FLOAT; 1333f145a2f958320766ae9240c7a57debc20d578aaMichael Wright 1343f145a2f958320766ae9240c7a57debc20d578aaMichael Wright /** 135cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * The nominal apparent density of the display in DPI used for layout calculations. 136cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * This density is sensitive to the viewing distance. A big TV and a tablet may have 137cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * the same apparent density even though the pixels on the TV are much bigger than 138cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * those on the tablet. 139cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown */ 140908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn public int densityDpi; 141cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown 142cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown /** 143cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * The physical density of the display in DPI in the X direction. 144cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * This density should specify the physical size of each pixel. 145cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown */ 146fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float xDpi; 147cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown 148cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown /** 149cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * The physical density of the display in DPI in the X direction. 150cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * This density should specify the physical size of each pixel. 151cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown */ 152fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float yDpi; 153fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 154cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown /** 155e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * This is a positive value indicating the phase offset of the VSYNC events provided by 156e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * Choreographer relative to the display refresh. For example, if Choreographer reports 157e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * that the refresh occurred at time N, it actually occurred at (N - appVsyncOffsetNanos). 158e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden */ 159e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden public long appVsyncOffsetNanos; 160e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden 161e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden /** 162e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * This is how far in advance a buffer must be queued for presentation at 163e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * a given time. If you want a buffer to appear on the screen at 164e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * time N, you must submit the buffer before (N - bufferDeadlineNanos). 165e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden */ 166e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden public long presentationDeadlineNanos; 167e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden 168e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden /** 169cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * Display flags. 170cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown */ 171bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public int flags; 172bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 173d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown /** 174d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * The touch attachment, per {@link DisplayViewport#touch}. 175d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown */ 176d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown public int touch; 177d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 17827f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown /** 17927f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * The additional rotation to apply to all content presented on the display device 18027f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * relative to its physical coordinate system. Default is {@link Surface#ROTATION_0}. 18127f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * <p> 18227f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * This field can be used to compensate for the fact that the display has been 18327f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * physically rotated relative to its natural orientation such as an HDMI monitor 18427f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * that has been mounted sideways to appear to be portrait rather than landscape. 18527f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown * </p> 18627f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown */ 18727f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown public int rotation = Surface.ROTATION_0; 18827f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown 18992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 19092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type. 19192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 19292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public int type; 19392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 19492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 19592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display address, or null if none. 19692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Interpretation varies by display type. 19792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 19892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public String address; 19992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 200a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 201037c33eae74bee2774897d969d48947f9abe254fJeff Brown * Display state. 202037c33eae74bee2774897d969d48947f9abe254fJeff Brown */ 203037c33eae74bee2774897d969d48947f9abe254fJeff Brown public int state = Display.STATE_ON; 204037c33eae74bee2774897d969d48947f9abe254fJeff Brown 205037c33eae74bee2774897d969d48947f9abe254fJeff Brown /** 206a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * The UID of the application that owns this display, or zero if it is owned by the system. 207a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 208a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * If the display is private, then only the owner can use it. 209a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 210a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 211a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public int ownerUid; 212a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 213a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 214a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * The package name of the application that owns this display, or null if it is 215a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * owned by the system. 216a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 217a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * If the display is private, then only the owner can use it. 218a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 219a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 220a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public String ownerPackageName; 221a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 222cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown public void setAssumedDensityForExternalDisplay(int width, int height) { 223cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown densityDpi = Math.min(width, height) * DisplayMetrics.DENSITY_XHIGH / 1080; 224cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown // Technically, these values should be smaller than the apparent density 225cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown // but we don't know the physical size of the display. 226cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown xDpi = densityDpi; 227cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown yDpi = densityDpi; 228cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown } 229cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown 2304ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 2314ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(Object o) { 2324ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return o instanceof DisplayDeviceInfo && equals((DisplayDeviceInfo)o); 2334ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2344ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 2354ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(DisplayDeviceInfo other) { 2364ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return other != null 2374ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && Objects.equal(name, other.name) 2384ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && width == other.width 2394ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && height == other.height 2404ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && refreshRate == other.refreshRate 2413f145a2f958320766ae9240c7a57debc20d578aaMichael Wright && Arrays.equals(supportedRefreshRates, other.supportedRefreshRates) 2424ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && densityDpi == other.densityDpi 2434ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && xDpi == other.xDpi 2444ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && yDpi == other.yDpi 245e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden && appVsyncOffsetNanos == other.appVsyncOffsetNanos 246e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden && presentationDeadlineNanos == other.presentationDeadlineNanos 247d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown && flags == other.flags 24827f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown && touch == other.touch 24992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && rotation == other.rotation 25092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && type == other.type 251a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && Objects.equal(address, other.address) 252037c33eae74bee2774897d969d48947f9abe254fJeff Brown && state == other.state 253a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && ownerUid == other.ownerUid 254a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && Objects.equal(ownerPackageName, other.ownerPackageName); 2554ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2564ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 2574ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 2584ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int hashCode() { 2594ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return 0; // don't care 2604ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2614ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 262fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void copyFrom(DisplayDeviceInfo other) { 263848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown name = other.name; 264fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown width = other.width; 265fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown height = other.height; 266fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown refreshRate = other.refreshRate; 2673f145a2f958320766ae9240c7a57debc20d578aaMichael Wright supportedRefreshRates = other.supportedRefreshRates; 268908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn densityDpi = other.densityDpi; 269fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown xDpi = other.xDpi; 270fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown yDpi = other.yDpi; 271e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden appVsyncOffsetNanos = other.appVsyncOffsetNanos; 272e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden presentationDeadlineNanos = other.presentationDeadlineNanos; 273bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown flags = other.flags; 274d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown touch = other.touch; 27527f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown rotation = other.rotation; 27692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown type = other.type; 27792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown address = other.address; 278037c33eae74bee2774897d969d48947f9abe254fJeff Brown state = other.state; 279a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerUid = other.ownerUid; 280a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerPackageName = other.ownerPackageName; 281fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 282fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 283848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown // For debugging purposes 284fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Override 285fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public String toString() { 286a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown StringBuilder sb = new StringBuilder(); 287a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append("DisplayDeviceInfo{\""); 288a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(name).append("\": ").append(width).append(" x ").append(height); 2893f145a2f958320766ae9240c7a57debc20d578aaMichael Wright sb.append(", ").append(refreshRate).append(" fps"); 2903f145a2f958320766ae9240c7a57debc20d578aaMichael Wright sb.append(", supportedRefreshRates ").append(Arrays.toString(supportedRefreshRates)); 2913f145a2f958320766ae9240c7a57debc20d578aaMichael Wright sb.append(", density ").append(densityDpi); 292a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", ").append(xDpi).append(" x ").append(yDpi).append(" dpi"); 293e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(", appVsyncOff ").append(appVsyncOffsetNanos); 294e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(", presDeadline ").append(presentationDeadlineNanos); 295a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", touch ").append(touchToString(touch)); 296a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", rotation ").append(rotation); 297a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", type ").append(Display.typeToString(type)); 298a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if (address != null) { 299a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", address ").append(address); 300a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 301037c33eae74bee2774897d969d48947f9abe254fJeff Brown sb.append(", state ").append(Display.stateToString(state)); 302a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if (ownerUid != 0 || ownerPackageName != null) { 303a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", owner ").append(ownerPackageName); 304a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(" (uid ").append(ownerUid).append(")"); 305a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 306a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(flagsToString(flags)); 307a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append("}"); 308a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return sb.toString(); 309d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 310d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 311d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown private static String touchToString(int touch) { 312d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown switch (touch) { 313d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown case TOUCH_NONE: 314d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown return "NONE"; 315d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown case TOUCH_INTERNAL: 316d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown return "INTERNAL"; 317d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown case TOUCH_EXTERNAL: 318d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown return "EXTERNAL"; 319d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown default: 320d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown return Integer.toString(touch); 321d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 322bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 323bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 324bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private static String flagsToString(int flags) { 325bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown StringBuilder msg = new StringBuilder(); 326bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown if ((flags & FLAG_DEFAULT_DISPLAY) != 0) { 327bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown msg.append(", FLAG_DEFAULT_DISPLAY"); 328bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 32927f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown if ((flags & FLAG_ROTATES_WITH_CONTENT) != 0) { 33027f1d674bf9fb53af7facdcb746912e036d5bf75Jeff Brown msg.append(", FLAG_ROTATES_WITH_CONTENT"); 331c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 33277aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown if ((flags & FLAG_SECURE) != 0) { 33377aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown msg.append(", FLAG_SECURE"); 33477aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown } 33577aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown if ((flags & FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) { 33677aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown msg.append(", FLAG_SUPPORTS_PROTECTED_BUFFERS"); 337bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 338a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if ((flags & FLAG_PRIVATE) != 0) { 339a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown msg.append(", FLAG_PRIVATE"); 340a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 341a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if ((flags & FLAG_NEVER_BLANK) != 0) { 342a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown msg.append(", FLAG_NEVER_BLANK"); 343a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 3447d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown if ((flags & FLAG_PRESENTATION) != 0) { 3457d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown msg.append(", FLAG_PRESENTATION"); 3467d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown } 347d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown if ((flags & FLAG_OWN_CONTENT_ONLY) != 0) { 348d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown msg.append(", FLAG_OWN_CONTENT_ONLY"); 349d14c8c9039c0056e1f30ad5d410c8fde20d63df5Jeff Brown } 350bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return msg.toString(); 351fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 352fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown} 353