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 android.view; 18fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 19fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.content.res.CompatibilityInfo; 2048d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautnerimport android.os.IBinder; 21fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.os.Parcel; 22fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.os.Parcelable; 23fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.util.DisplayMetrics; 24fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 253f145a2f958320766ae9240c7a57debc20d578aaMichael Wrightimport java.util.Arrays; 263f145a2f958320766ae9240c7a57debc20d578aaMichael Wright 273f145a2f958320766ae9240c7a57debc20d578aaMichael Wrightimport libcore.util.EmptyArray; 284ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport libcore.util.Objects; 294ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 30fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/** 31fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Describes the characteristics of a particular logical display. 32fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * @hide 33fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 34fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownpublic final class DisplayInfo implements Parcelable { 35fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 364ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The surface flinger layer stack associated with this logical display. 374ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 384ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int layerStack; 394ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 404ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 41c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * Display flags. 42c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown */ 43c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown public int flags; 44c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 45c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown /** 4692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type. 4792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 4892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public int type; 4992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 5092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 5192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display address, or null if none. 5292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Interpretation varies by display type. 5392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 5492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public String address; 5592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 5692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 574ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The human-readable name of the display. 584ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 594ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public String name; 604ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 614ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 62361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale * Unique identifier for the display. Shouldn't be displayed to the user. 63361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale */ 64361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale public String uniqueId; 65361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale 66361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale /** 67fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The width of the portion of the display that is available to applications, in pixels. 68fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the size of the display minus any system decorations. 69fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 70fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int appWidth; 71fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 72fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 73fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The height of the portion of the display that is available to applications, in pixels. 74fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the size of the display minus any system decorations. 75fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 76fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int appHeight; 77fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 78fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 79fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The smallest value of {@link #appWidth} that an application is likely to encounter, 80fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the width may be even smaller due to the presence 81fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * of a soft keyboard, for example. 82fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 83fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int smallestNominalAppWidth; 84fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 85fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 86fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The smallest value of {@link #appHeight} that an application is likely to encounter, 87fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the height may be even smaller due to the presence 88fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * of a soft keyboard, for example. 89fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 90fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int smallestNominalAppHeight; 91fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 92fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 93fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The largest value of {@link #appWidth} that an application is likely to encounter, 94fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the width may be even larger due to system decorations 95fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * such as the status bar being hidden, for example. 96fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 97fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int largestNominalAppWidth; 98fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 99fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 100fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The largest value of {@link #appHeight} that an application is likely to encounter, 101fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the height may be even larger due to system decorations 102fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * such as the status bar being hidden, for example. 103fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 104fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int largestNominalAppHeight; 105fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 106fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 107fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The logical width of the display, in pixels. 108fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the usable size of the display which may be smaller than the 109fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * physical size when the system is emulating a smaller display. 110fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 111fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int logicalWidth; 112fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 113fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 114fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The logical height of the display, in pixels. 115fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the usable size of the display which may be smaller than the 116fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * physical size when the system is emulating a smaller display. 117fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 118fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int logicalHeight; 119fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 120fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 121c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * @hide 122c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * Number of overscan pixels on the left side of the display. 123c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn */ 124c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn public int overscanLeft; 125c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn 126c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn /** 127c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * @hide 128c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * Number of overscan pixels on the top side of the display. 129c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn */ 130c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn public int overscanTop; 131c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn 132c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn /** 133c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * @hide 134c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * Number of overscan pixels on the right side of the display. 135c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn */ 136c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn public int overscanRight; 137c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn 138c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn /** 139c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * @hide 140c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn * Number of overscan pixels on the bottom side of the display. 141c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn */ 142c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn public int overscanBottom; 143c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn 144c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn /** 145fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The rotation of the display relative to its natural orientation. 146fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * May be one of {@link android.view.Surface#ROTATION_0}, 147fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * {@link android.view.Surface#ROTATION_90}, {@link android.view.Surface#ROTATION_180}, 148fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * {@link android.view.Surface#ROTATION_270}. 149fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 150fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 151fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 152fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 153fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 154d9273d6f289d9b55da3fd0db2f659fdfb48106a8Tor Norbye @Surface.Rotation 155fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int rotation; 156fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 157fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 158fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The refresh rate of this display in frames per second. 159fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 160fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 161fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 162fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 163fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 164fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float refreshRate; 165fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 166fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 1673f145a2f958320766ae9240c7a57debc20d578aaMichael Wright * The supported refresh rates of this display at the current resolution in frames per second. 1683f145a2f958320766ae9240c7a57debc20d578aaMichael Wright */ 1693f145a2f958320766ae9240c7a57debc20d578aaMichael Wright public float[] supportedRefreshRates = EmptyArray.FLOAT; 1703f145a2f958320766ae9240c7a57debc20d578aaMichael Wright 1713f145a2f958320766ae9240c7a57debc20d578aaMichael Wright /** 172908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * The logical display density which is the basis for density-independent 173908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * pixels. 174fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 175908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn public int logicalDensityDpi; 176fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 177fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 178fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The exact physical pixels per inch of the screen in the X dimension. 179fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 180fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 181fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 182fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 183fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 184fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float physicalXDpi; 185fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 186fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 187fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The exact physical pixels per inch of the screen in the Y dimension. 188fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 189fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 190fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 191fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 192fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 193fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float physicalYDpi; 194fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 195a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 196e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * This is a positive value indicating the phase offset of the VSYNC events provided by 197e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * Choreographer relative to the display refresh. For example, if Choreographer reports 198e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * that the refresh occurred at time N, it actually occurred at (N - appVsyncOffsetNanos). 199e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden */ 200e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden public long appVsyncOffsetNanos; 201e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden 202e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden /** 203e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * This is how far in advance a buffer must be queued for presentation at 204e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * a given time. If you want a buffer to appear on the screen at 205e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * time N, you must submit the buffer before (N - bufferDeadlineNanos). 206e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden */ 207e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden public long presentationDeadlineNanos; 208e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden 209e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden /** 210037c33eae74bee2774897d969d48947f9abe254fJeff Brown * The state of the display, such as {@link android.view.Display#STATE_ON}. 211037c33eae74bee2774897d969d48947f9abe254fJeff Brown */ 212037c33eae74bee2774897d969d48947f9abe254fJeff Brown public int state; 213037c33eae74bee2774897d969d48947f9abe254fJeff Brown 214037c33eae74bee2774897d969d48947f9abe254fJeff Brown /** 215a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * The UID of the application that owns this display, or zero if it is 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 int ownerUid; 221a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 222a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 223a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * The package name of the application that owns this display, or null if it is 224a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * owned by the system. 225a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 226a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * If the display is private, then only the owner can use it. 227a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 228a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 229a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public String ownerPackageName; 230a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 231fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public static final Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() { 23292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown @Override 233fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo createFromParcel(Parcel source) { 234fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return new DisplayInfo(source); 235fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 236fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 23792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown @Override 238fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo[] newArray(int size) { 239fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return new DisplayInfo[size]; 240fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 241fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown }; 242fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 243fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo() { 244fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 245fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 246bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public DisplayInfo(DisplayInfo other) { 247bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown copyFrom(other); 248bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 249bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 250fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private DisplayInfo(Parcel source) { 251fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown readFromParcel(source); 252fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 253fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 254fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Override 2554ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(Object o) { 2564ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return o instanceof DisplayInfo && equals((DisplayInfo)o); 2574ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2584ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 2594ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(DisplayInfo other) { 2604ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return other != null 2614ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && layerStack == other.layerStack 26292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && flags == other.flags 26392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && type == other.type 26492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && Objects.equal(address, other.address) 265361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale && Objects.equal(uniqueId, other.uniqueId) 2664ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && appWidth == other.appWidth 2674ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && appHeight == other.appHeight 2684ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && smallestNominalAppWidth == other.smallestNominalAppWidth 2694ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && smallestNominalAppHeight == other.smallestNominalAppHeight 2704ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && largestNominalAppWidth == other.largestNominalAppWidth 2714ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && largestNominalAppHeight == other.largestNominalAppHeight 2724ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalWidth == other.logicalWidth 2734ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalHeight == other.logicalHeight 274c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanLeft == other.overscanLeft 275c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanTop == other.overscanTop 276c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanRight == other.overscanRight 277c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanBottom == other.overscanBottom 2784ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && rotation == other.rotation 2794ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && refreshRate == other.refreshRate 2804ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalDensityDpi == other.logicalDensityDpi 2814ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && physicalXDpi == other.physicalXDpi 282a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && physicalYDpi == other.physicalYDpi 283e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden && appVsyncOffsetNanos == other.appVsyncOffsetNanos 284e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden && presentationDeadlineNanos == other.presentationDeadlineNanos 285037c33eae74bee2774897d969d48947f9abe254fJeff Brown && state == other.state 286a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && ownerUid == other.ownerUid 287a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && Objects.equal(ownerPackageName, other.ownerPackageName); 2884ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2894ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 2904ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 2914ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int hashCode() { 2924ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return 0; // don't care 293fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 294fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 295fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void copyFrom(DisplayInfo other) { 2964ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown layerStack = other.layerStack; 297c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown flags = other.flags; 29892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown type = other.type; 29992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown address = other.address; 3004ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown name = other.name; 301361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale uniqueId = other.uniqueId; 302fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appWidth = other.appWidth; 303fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appHeight = other.appHeight; 304fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppWidth = other.smallestNominalAppWidth; 305fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppHeight = other.smallestNominalAppHeight; 306fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppWidth = other.largestNominalAppWidth; 307fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppHeight = other.largestNominalAppHeight; 308fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalWidth = other.logicalWidth; 309fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalHeight = other.logicalHeight; 310c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanLeft = other.overscanLeft; 311c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanTop = other.overscanTop; 312c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanRight = other.overscanRight; 313c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanBottom = other.overscanBottom; 314fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown rotation = other.rotation; 315fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown refreshRate = other.refreshRate; 3163f145a2f958320766ae9240c7a57debc20d578aaMichael Wright supportedRefreshRates = Arrays.copyOf( 3173f145a2f958320766ae9240c7a57debc20d578aaMichael Wright other.supportedRefreshRates, other.supportedRefreshRates.length); 318908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi = other.logicalDensityDpi; 319fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalXDpi = other.physicalXDpi; 320fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalYDpi = other.physicalYDpi; 321e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden appVsyncOffsetNanos = other.appVsyncOffsetNanos; 322e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden presentationDeadlineNanos = other.presentationDeadlineNanos; 323037c33eae74bee2774897d969d48947f9abe254fJeff Brown state = other.state; 324a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerUid = other.ownerUid; 325a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerPackageName = other.ownerPackageName; 326fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 327fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 328fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void readFromParcel(Parcel source) { 3294ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown layerStack = source.readInt(); 330c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown flags = source.readInt(); 33192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown type = source.readInt(); 33292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown address = source.readString(); 3334ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown name = source.readString(); 334fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appWidth = source.readInt(); 335fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appHeight = source.readInt(); 336fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppWidth = source.readInt(); 337fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppHeight = source.readInt(); 338fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppWidth = source.readInt(); 339fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppHeight = source.readInt(); 340fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalWidth = source.readInt(); 341fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalHeight = source.readInt(); 342c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanLeft = source.readInt(); 343c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanTop = source.readInt(); 344c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanRight = source.readInt(); 345c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanBottom = source.readInt(); 346fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown rotation = source.readInt(); 347fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown refreshRate = source.readFloat(); 3483f145a2f958320766ae9240c7a57debc20d578aaMichael Wright supportedRefreshRates = source.createFloatArray(); 349908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi = source.readInt(); 350fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalXDpi = source.readFloat(); 351fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalYDpi = source.readFloat(); 352e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden appVsyncOffsetNanos = source.readLong(); 353e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden presentationDeadlineNanos = source.readLong(); 354037c33eae74bee2774897d969d48947f9abe254fJeff Brown state = source.readInt(); 355a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerUid = source.readInt(); 356a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerPackageName = source.readString(); 357361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale uniqueId = source.readString(); 358fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 359fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 360fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Override 361fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void writeToParcel(Parcel dest, int flags) { 3624ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown dest.writeInt(layerStack); 3633f2ba6220bf74cb5157d6fafee9c76f526acea68Jeff Brown dest.writeInt(this.flags); 36492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown dest.writeInt(type); 36592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown dest.writeString(address); 3664ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown dest.writeString(name); 367fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(appWidth); 368fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(appHeight); 369fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(smallestNominalAppWidth); 370fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(smallestNominalAppHeight); 371fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(largestNominalAppWidth); 372fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(largestNominalAppHeight); 373fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(logicalWidth); 374fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(logicalHeight); 375c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanLeft); 376c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanTop); 377c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanRight); 378c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanBottom); 379fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(rotation); 380fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(refreshRate); 3813f145a2f958320766ae9240c7a57debc20d578aaMichael Wright dest.writeFloatArray(supportedRefreshRates); 382908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn dest.writeInt(logicalDensityDpi); 383fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(physicalXDpi); 384fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(physicalYDpi); 385e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden dest.writeLong(appVsyncOffsetNanos); 386e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden dest.writeLong(presentationDeadlineNanos); 387037c33eae74bee2774897d969d48947f9abe254fJeff Brown dest.writeInt(state); 388a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown dest.writeInt(ownerUid); 389a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown dest.writeString(ownerPackageName); 390361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale dest.writeString(uniqueId); 391fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 392fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 3934ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 3944ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int describeContents() { 3954ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return 0; 3964ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 3974ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 39848d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public void getAppMetrics(DisplayMetrics outMetrics) { 39948d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner getAppMetrics(outMetrics, CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); 400fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 401fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 40248d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public void getAppMetrics(DisplayMetrics outMetrics, DisplayAdjustments displayAdjustments) { 40348d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner getMetricsWithSize(outMetrics, displayAdjustments.getCompatibilityInfo(), 40448d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner displayAdjustments.getActivityToken(), appWidth, appHeight); 40548d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner } 40648d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner 40748d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public void getAppMetrics(DisplayMetrics outMetrics, CompatibilityInfo ci, IBinder token) { 40848d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner getMetricsWithSize(outMetrics, ci, token, appWidth, appHeight); 40948d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner } 41048d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner 41148d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public void getLogicalMetrics(DisplayMetrics outMetrics, CompatibilityInfo compatInfo, 41248d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner IBinder token) { 41348d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner getMetricsWithSize(outMetrics, compatInfo, token, logicalWidth, logicalHeight); 414fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 415fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 4167f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown public int getNaturalWidth() { 4177f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown return rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 ? 4187f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown logicalWidth : logicalHeight; 4197f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown } 4207f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown 4217f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown public int getNaturalHeight() { 4227f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown return rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 ? 4237f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown logicalHeight : logicalWidth; 4247f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown } 4257f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown 426a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 427a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Returns true if the specified UID has access to this display. 428a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 429a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public boolean hasAccess(int uid) { 430a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return Display.hasAccess(uid, flags, ownerUid); 431a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 432a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 43348d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner private void getMetricsWithSize(DisplayMetrics outMetrics, CompatibilityInfo compatInfo, 43448d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner IBinder token, int width, int height) { 435908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn outMetrics.densityDpi = outMetrics.noncompatDensityDpi = logicalDensityDpi; 436fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.noncompatWidthPixels = outMetrics.widthPixels = width; 437fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.noncompatHeightPixels = outMetrics.heightPixels = height; 438fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 439908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn outMetrics.density = outMetrics.noncompatDensity = 440908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; 441fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.scaledDensity = outMetrics.noncompatScaledDensity = outMetrics.density; 442fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.xdpi = outMetrics.noncompatXdpi = physicalXDpi; 443fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.ydpi = outMetrics.noncompatYdpi = physicalYDpi; 444fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 44548d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner if (!compatInfo.equals(CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO)) { 44648d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner compatInfo.applyToDisplayMetrics(outMetrics); 447fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 448fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 449bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown 450bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown // For debugging purposes 451bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown @Override 452bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown public String toString() { 453c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn StringBuilder sb = new StringBuilder(); 454c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append("DisplayInfo{\""); 455c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(name); 456361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale sb.append("\", uniqueId \""); 457361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale sb.append(uniqueId); 458c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append("\", app "); 459c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(appWidth); 460c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 461c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(appHeight); 462c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", real "); 463c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(logicalWidth); 464c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 465c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(logicalHeight); 466c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn if (overscanLeft != 0 || overscanTop != 0 || overscanRight != 0 || overscanBottom != 0) { 467c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", overscan ("); 468c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanLeft); 469c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(","); 470c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanTop); 471c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(","); 472c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanRight); 473c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(","); 474c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanBottom); 475c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(")"); 476c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn } 477c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", largest app "); 478c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(largestNominalAppWidth); 479c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 480c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(largestNominalAppHeight); 481c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", smallest app "); 482c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(smallestNominalAppWidth); 483c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 484c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(smallestNominalAppHeight); 485c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", "); 486c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(refreshRate); 4873f145a2f958320766ae9240c7a57debc20d578aaMichael Wright sb.append(" fps, supportedRefreshRates "); 4883f145a2f958320766ae9240c7a57debc20d578aaMichael Wright sb.append(Arrays.toString(supportedRefreshRates)); 4893f145a2f958320766ae9240c7a57debc20d578aaMichael Wright sb.append(", rotation "); 490c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(rotation); 491c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", density "); 492c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(logicalDensityDpi); 493c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" ("); 494c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(physicalXDpi); 495c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 496c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(physicalYDpi); 497c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(") dpi, layerStack "); 498c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(layerStack); 499e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(", appVsyncOff "); 500e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(appVsyncOffsetNanos); 501e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(", presDeadline "); 502e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(presentationDeadlineNanos); 503c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", type "); 504c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(Display.typeToString(type)); 505a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if (address != null) { 506a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", address ").append(address); 507a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 508037c33eae74bee2774897d969d48947f9abe254fJeff Brown sb.append(", state "); 509037c33eae74bee2774897d969d48947f9abe254fJeff Brown sb.append(Display.stateToString(state)); 510a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if (ownerUid != 0 || ownerPackageName != null) { 511a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", owner ").append(ownerPackageName); 512a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(" (uid ").append(ownerUid).append(")"); 513a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 514c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(flagsToString(flags)); 515c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append("}"); 516c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn return sb.toString(); 517c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 518c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 519c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown private static String flagsToString(int flags) { 520c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown StringBuilder result = new StringBuilder(); 521f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown if ((flags & Display.FLAG_SECURE) != 0) { 522f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown result.append(", FLAG_SECURE"); 523f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown } 52477aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown if ((flags & Display.FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) { 52577aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown result.append(", FLAG_SUPPORTS_PROTECTED_BUFFERS"); 526c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 527a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if ((flags & Display.FLAG_PRIVATE) != 0) { 528a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown result.append(", FLAG_PRIVATE"); 529a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 5307d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown if ((flags & Display.FLAG_PRESENTATION) != 0) { 5317d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown result.append(", FLAG_PRESENTATION"); 5327d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown } 533c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown return result.toString(); 534bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown } 535fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown} 536