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; 207c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwaleimport android.content.res.Configuration; 21fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.os.Parcel; 22fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.os.Parcelable; 23b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligandimport android.util.ArraySet; 24fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.util.DisplayMetrics; 25fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 264ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport libcore.util.Objects; 274ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 2867e2ae86396c6d0f989285275cbf908dee5e71f7Aurimas Liutikasimport java.util.Arrays; 2967e2ae86396c6d0f989285275cbf908dee5e71f7Aurimas Liutikas 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 /** 158b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand * The active display mode. 159b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand */ 160b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand public int modeId; 161b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand 162b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand /** 163b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand * The default display mode. 164fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 165b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand public int defaultModeId; 166fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 167fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 168b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand * The supported modes of this display. 1693f145a2f958320766ae9240c7a57debc20d578aaMichael Wright */ 170b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand public Display.Mode[] supportedModes = Display.Mode.EMPTY_ARRAY; 1713f145a2f958320766ae9240c7a57debc20d578aaMichael Wright 1721c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright /** The active color mode. */ 1731c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright public int colorMode; 17458e829f71d2c525309e5bb5a1c02dc64397df221Michael Wright 1751c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright /** The list of supported color modes */ 1761c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright public int[] supportedColorModes = { Display.COLOR_MODE_DEFAULT }; 17758e829f71d2c525309e5bb5a1c02dc64397df221Michael Wright 1789ff94c0251722c44eece7c3561b4ed36b286d4a8Michael Wright /** The display's HDR capabilities */ 1799ff94c0251722c44eece7c3561b4ed36b286d4a8Michael Wright public Display.HdrCapabilities hdrCapabilities; 1809ff94c0251722c44eece7c3561b4ed36b286d4a8Michael Wright 1813f145a2f958320766ae9240c7a57debc20d578aaMichael Wright /** 182908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * The logical display density which is the basis for density-independent 183908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * pixels. 184fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 185908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn public int logicalDensityDpi; 186fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 187fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 188fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The exact physical pixels per inch of the screen in the X dimension. 189fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 190fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 191fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 192fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 193fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 194fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float physicalXDpi; 195fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 196fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 197fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The exact physical pixels per inch of the screen in the Y dimension. 198fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 199fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 200fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 201fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 202fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 203fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float physicalYDpi; 204fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 205a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 206e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * This is a positive value indicating the phase offset of the VSYNC events provided by 207e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * Choreographer relative to the display refresh. For example, if Choreographer reports 208e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * that the refresh occurred at time N, it actually occurred at (N - appVsyncOffsetNanos). 209e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden */ 210e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden public long appVsyncOffsetNanos; 211e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden 212e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden /** 213e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * This is how far in advance a buffer must be queued for presentation at 214e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * a given time. If you want a buffer to appear on the screen at 215e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden * time N, you must submit the buffer before (N - bufferDeadlineNanos). 216e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden */ 217e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden public long presentationDeadlineNanos; 218e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden 219e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden /** 220037c33eae74bee2774897d969d48947f9abe254fJeff Brown * The state of the display, such as {@link android.view.Display#STATE_ON}. 221037c33eae74bee2774897d969d48947f9abe254fJeff Brown */ 222037c33eae74bee2774897d969d48947f9abe254fJeff Brown public int state; 223037c33eae74bee2774897d969d48947f9abe254fJeff Brown 224037c33eae74bee2774897d969d48947f9abe254fJeff Brown /** 225a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * The UID of the application that owns this display, or zero if it is owned by the system. 226a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 227a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * If the display is private, then only the owner can use it. 228a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 229a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 230a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public int ownerUid; 231a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 232a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 233a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * The package name of the application that owns this display, or null if it is 234a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * owned by the system. 235a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 236a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * If the display is private, then only the owner can use it. 237a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 238a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 239a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public String ownerPackageName; 240a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 241250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian /** 242250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian * @hide 243250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian * Get current remove mode of the display - what actions should be performed with the display's 244250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian * content when it is removed. 245250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian * 246250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian * @see Display#getRemoveMode() 247250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian */ 248250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian public int removeMode = Display.REMOVE_MODE_MOVE_CONTENT_TO_PRIMARY; 249250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian 250fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public static final Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() { 25192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown @Override 252fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo createFromParcel(Parcel source) { 253fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return new DisplayInfo(source); 254fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 255fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 25692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown @Override 257fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo[] newArray(int size) { 258fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return new DisplayInfo[size]; 259fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 260fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown }; 261fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 262fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo() { 263fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 264fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 265bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public DisplayInfo(DisplayInfo other) { 266bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown copyFrom(other); 267bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 268bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 269fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private DisplayInfo(Parcel source) { 270fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown readFromParcel(source); 271fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 272fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 273fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Override 2744ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(Object o) { 2754ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return o instanceof DisplayInfo && equals((DisplayInfo)o); 2764ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2774ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 2784ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(DisplayInfo other) { 2794ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return other != null 2804ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && layerStack == other.layerStack 28192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && flags == other.flags 28292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && type == other.type 28392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && Objects.equal(address, other.address) 284361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale && Objects.equal(uniqueId, other.uniqueId) 2854ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && appWidth == other.appWidth 2864ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && appHeight == other.appHeight 2874ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && smallestNominalAppWidth == other.smallestNominalAppWidth 2884ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && smallestNominalAppHeight == other.smallestNominalAppHeight 2894ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && largestNominalAppWidth == other.largestNominalAppWidth 2904ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && largestNominalAppHeight == other.largestNominalAppHeight 2914ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalWidth == other.logicalWidth 2924ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalHeight == other.logicalHeight 293c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanLeft == other.overscanLeft 294c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanTop == other.overscanTop 295c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanRight == other.overscanRight 296c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn && overscanBottom == other.overscanBottom 2974ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && rotation == other.rotation 298b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand && modeId == other.modeId 299b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand && defaultModeId == other.defaultModeId 3001c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright && colorMode == other.colorMode 30116ae0423516ec1146ff191b4e856e1a6f88ea495Michael Wright && Arrays.equals(supportedColorModes, other.supportedColorModes) 3029ff94c0251722c44eece7c3561b4ed36b286d4a8Michael Wright && Objects.equal(hdrCapabilities, other.hdrCapabilities) 3034ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalDensityDpi == other.logicalDensityDpi 3044ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && physicalXDpi == other.physicalXDpi 305a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && physicalYDpi == other.physicalYDpi 306e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden && appVsyncOffsetNanos == other.appVsyncOffsetNanos 307e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden && presentationDeadlineNanos == other.presentationDeadlineNanos 308037c33eae74bee2774897d969d48947f9abe254fJeff Brown && state == other.state 309a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown && ownerUid == other.ownerUid 310250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian && Objects.equal(ownerPackageName, other.ownerPackageName) 311250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian && removeMode == other.removeMode; 3124ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 3134ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 3144ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 3154ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int hashCode() { 3164ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return 0; // don't care 317fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 318fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 319fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void copyFrom(DisplayInfo other) { 3204ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown layerStack = other.layerStack; 321c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown flags = other.flags; 32292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown type = other.type; 32392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown address = other.address; 3244ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown name = other.name; 325361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale uniqueId = other.uniqueId; 326fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appWidth = other.appWidth; 327fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appHeight = other.appHeight; 328fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppWidth = other.smallestNominalAppWidth; 329fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppHeight = other.smallestNominalAppHeight; 330fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppWidth = other.largestNominalAppWidth; 331fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppHeight = other.largestNominalAppHeight; 332fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalWidth = other.logicalWidth; 333fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalHeight = other.logicalHeight; 334c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanLeft = other.overscanLeft; 335c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanTop = other.overscanTop; 336c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanRight = other.overscanRight; 337c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanBottom = other.overscanBottom; 338fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown rotation = other.rotation; 339b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand modeId = other.modeId; 340b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand defaultModeId = other.defaultModeId; 341b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand supportedModes = Arrays.copyOf(other.supportedModes, other.supportedModes.length); 3421c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright colorMode = other.colorMode; 3431c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright supportedColorModes = Arrays.copyOf( 3441c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright other.supportedColorModes, other.supportedColorModes.length); 3459ff94c0251722c44eece7c3561b4ed36b286d4a8Michael Wright hdrCapabilities = other.hdrCapabilities; 346908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi = other.logicalDensityDpi; 347fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalXDpi = other.physicalXDpi; 348fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalYDpi = other.physicalYDpi; 349e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden appVsyncOffsetNanos = other.appVsyncOffsetNanos; 350e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden presentationDeadlineNanos = other.presentationDeadlineNanos; 351037c33eae74bee2774897d969d48947f9abe254fJeff Brown state = other.state; 352a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerUid = other.ownerUid; 353a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerPackageName = other.ownerPackageName; 354250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian removeMode = other.removeMode; 355fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 356fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 357fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void readFromParcel(Parcel source) { 3584ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown layerStack = source.readInt(); 359c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown flags = source.readInt(); 36092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown type = source.readInt(); 36192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown address = source.readString(); 3624ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown name = source.readString(); 363fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appWidth = source.readInt(); 364fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appHeight = source.readInt(); 365fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppWidth = source.readInt(); 366fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppHeight = source.readInt(); 367fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppWidth = source.readInt(); 368fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppHeight = source.readInt(); 369fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalWidth = source.readInt(); 370fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalHeight = source.readInt(); 371c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanLeft = source.readInt(); 372c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanTop = source.readInt(); 373c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanRight = source.readInt(); 374c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn overscanBottom = source.readInt(); 375fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown rotation = source.readInt(); 376b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand modeId = source.readInt(); 377b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand defaultModeId = source.readInt(); 378b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand int nModes = source.readInt(); 379b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand supportedModes = new Display.Mode[nModes]; 380b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand for (int i = 0; i < nModes; i++) { 381b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand supportedModes[i] = Display.Mode.CREATOR.createFromParcel(source); 382b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 3831c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright colorMode = source.readInt(); 3841c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright int nColorModes = source.readInt(); 3851c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright supportedColorModes = new int[nColorModes]; 3861c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright for (int i = 0; i < nColorModes; i++) { 3871c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright supportedColorModes[i] = source.readInt(); 38858e829f71d2c525309e5bb5a1c02dc64397df221Michael Wright } 389b0828901491e08db3c9780d0c7af81be1a8dc70aMichael Wright hdrCapabilities = source.readParcelable(null); 390908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi = source.readInt(); 391fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalXDpi = source.readFloat(); 392fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalYDpi = source.readFloat(); 393e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden appVsyncOffsetNanos = source.readLong(); 394e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden presentationDeadlineNanos = source.readLong(); 395037c33eae74bee2774897d969d48947f9abe254fJeff Brown state = source.readInt(); 396a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerUid = source.readInt(); 397a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown ownerPackageName = source.readString(); 398361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale uniqueId = source.readString(); 399250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian removeMode = source.readInt(); 400fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 401fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 402fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Override 403fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void writeToParcel(Parcel dest, int flags) { 4044ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown dest.writeInt(layerStack); 4053f2ba6220bf74cb5157d6fafee9c76f526acea68Jeff Brown dest.writeInt(this.flags); 40692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown dest.writeInt(type); 40792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown dest.writeString(address); 4084ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown dest.writeString(name); 409fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(appWidth); 410fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(appHeight); 411fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(smallestNominalAppWidth); 412fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(smallestNominalAppHeight); 413fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(largestNominalAppWidth); 414fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(largestNominalAppHeight); 415fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(logicalWidth); 416fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(logicalHeight); 417c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanLeft); 418c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanTop); 419c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanRight); 420c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn dest.writeInt(overscanBottom); 421fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(rotation); 422b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand dest.writeInt(modeId); 423b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand dest.writeInt(defaultModeId); 424b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand dest.writeInt(supportedModes.length); 425b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand for (int i = 0; i < supportedModes.length; i++) { 426b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand supportedModes[i].writeToParcel(dest, flags); 427b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 4281c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright dest.writeInt(colorMode); 4291c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright dest.writeInt(supportedColorModes.length); 4301c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright for (int i = 0; i < supportedColorModes.length; i++) { 4311c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright dest.writeInt(supportedColorModes[i]); 43258e829f71d2c525309e5bb5a1c02dc64397df221Michael Wright } 433b0828901491e08db3c9780d0c7af81be1a8dc70aMichael Wright dest.writeParcelable(hdrCapabilities, flags); 434908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn dest.writeInt(logicalDensityDpi); 435fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(physicalXDpi); 436fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(physicalYDpi); 437e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden dest.writeLong(appVsyncOffsetNanos); 438e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden dest.writeLong(presentationDeadlineNanos); 439037c33eae74bee2774897d969d48947f9abe254fJeff Brown dest.writeInt(state); 440a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown dest.writeInt(ownerUid); 441a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown dest.writeString(ownerPackageName); 442361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale dest.writeString(uniqueId); 443250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian dest.writeInt(removeMode); 444fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 445fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 4464ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 4474ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int describeContents() { 4484ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return 0; 4494ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 4504ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 451b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand public Display.Mode getMode() { 452b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand return findMode(modeId); 453b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 454b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand 455b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand public Display.Mode getDefaultMode() { 456b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand return findMode(defaultModeId); 457b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 458b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand 459b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand private Display.Mode findMode(int id) { 460b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand for (int i = 0; i < supportedModes.length; i++) { 461b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand if (supportedModes[i].getModeId() == id) { 462b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand return supportedModes[i]; 463b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 464b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 465b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand throw new IllegalStateException("Unable to locate mode " + id); 466b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 467b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand 468b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand /** 469b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand * Returns the id of the "default" mode with the given refresh rate, or {@code 0} if no suitable 470b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand * mode could be found. 471b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand */ 472b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand public int findDefaultModeByRefreshRate(float refreshRate) { 473b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand Display.Mode[] modes = supportedModes; 474b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand Display.Mode defaultMode = getDefaultMode(); 475b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand for (int i = 0; i < modes.length; i++) { 476b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand if (modes[i].matches( 477b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), refreshRate)) { 478b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand return modes[i].getModeId(); 479b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 480b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 481b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand return 0; 482b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 483b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand 484b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand /** 485b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand * Returns the list of supported refresh rates in the default mode. 486b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand */ 487b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand public float[] getDefaultRefreshRates() { 488b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand Display.Mode[] modes = supportedModes; 489b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand ArraySet<Float> rates = new ArraySet<>(); 490b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand Display.Mode defaultMode = getDefaultMode(); 491b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand for (int i = 0; i < modes.length; i++) { 492b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand Display.Mode mode = modes[i]; 493b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand if (mode.getPhysicalWidth() == defaultMode.getPhysicalWidth() 494b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand && mode.getPhysicalHeight() == defaultMode.getPhysicalHeight()) { 495b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand rates.add(mode.getRefreshRate()); 496b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 497b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 498b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand float[] result = new float[rates.size()]; 499b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand int i = 0; 500b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand for (Float rate : rates) { 501b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand result[i++] = rate; 502b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 503b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand return result; 504b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand } 505b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand 50648d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public void getAppMetrics(DisplayMetrics outMetrics) { 50748d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner getAppMetrics(outMetrics, CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); 508fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 509fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 51048d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public void getAppMetrics(DisplayMetrics outMetrics, DisplayAdjustments displayAdjustments) { 51148d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner getMetricsWithSize(outMetrics, displayAdjustments.getCompatibilityInfo(), 5127c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale displayAdjustments.getConfiguration(), appWidth, appHeight); 51348d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner } 51448d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner 5157c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale public void getAppMetrics(DisplayMetrics outMetrics, CompatibilityInfo ci, 5167c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale Configuration configuration) { 5177c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale getMetricsWithSize(outMetrics, ci, configuration, appWidth, appHeight); 51848d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner } 51948d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner 52048d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner public void getLogicalMetrics(DisplayMetrics outMetrics, CompatibilityInfo compatInfo, 5217c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale Configuration configuration) { 5227c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale getMetricsWithSize(outMetrics, compatInfo, configuration, logicalWidth, logicalHeight); 523fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 524fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 5257f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown public int getNaturalWidth() { 5267f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown return rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 ? 5277f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown logicalWidth : logicalHeight; 5287f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown } 5297f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown 5307f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown public int getNaturalHeight() { 5317f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown return rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 ? 5327f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown logicalHeight : logicalWidth; 5337f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown } 5347f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown 535408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy public boolean isHdr() { 5364acfd858a4fd300e39ab761838227175d8411361Andrii Kulian int[] types = hdrCapabilities != null ? hdrCapabilities.getSupportedHdrTypes() : null; 537408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy return types != null && types.length > 0; 538408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy } 539408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy 540408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy public boolean isWideColorGamut() { 541408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy for (int colorMode : supportedColorModes) { 542408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy if (colorMode == Display.COLOR_MODE_DCI_P3 || colorMode > Display.COLOR_MODE_SRGB) { 543408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy return true; 544408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy } 545408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy } 546408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy return false; 547408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy } 548408afbf06040ea29d1a9d60e9dc50d1923068de4Romain Guy 549a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 550a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Returns true if the specified UID has access to this display. 551a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 552a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public boolean hasAccess(int uid) { 553a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return Display.hasAccess(uid, flags, ownerUid); 554a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 555a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 55648d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner private void getMetricsWithSize(DisplayMetrics outMetrics, CompatibilityInfo compatInfo, 5577c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale Configuration configuration, int width, int height) { 558908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn outMetrics.densityDpi = outMetrics.noncompatDensityDpi = logicalDensityDpi; 559908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn outMetrics.density = outMetrics.noncompatDensity = 560908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; 561fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.scaledDensity = outMetrics.noncompatScaledDensity = outMetrics.density; 562fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.xdpi = outMetrics.noncompatXdpi = physicalXDpi; 563fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.ydpi = outMetrics.noncompatYdpi = physicalYDpi; 564fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 5657566d76c618a48b8dcc981dac3cab1e42f864063Bryce Lee width = configuration != null && configuration.appBounds != null 5667566d76c618a48b8dcc981dac3cab1e42f864063Bryce Lee ? configuration.appBounds.width() : width; 5677566d76c618a48b8dcc981dac3cab1e42f864063Bryce Lee height = configuration != null && configuration.appBounds != null 5687566d76c618a48b8dcc981dac3cab1e42f864063Bryce Lee ? configuration.appBounds.height() : height; 5697c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale 5707c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale outMetrics.noncompatWidthPixels = outMetrics.widthPixels = width; 5717c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale outMetrics.noncompatHeightPixels = outMetrics.heightPixels = height; 5727c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale 57348d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner if (!compatInfo.equals(CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO)) { 57448d0d1886731ff19ed3fb47a5997be5df0d1bba8Craig Mautner compatInfo.applyToDisplayMetrics(outMetrics); 575fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 576fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 577bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown 578bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown // For debugging purposes 579bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown @Override 580bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown public String toString() { 581c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn StringBuilder sb = new StringBuilder(); 582c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append("DisplayInfo{\""); 583c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(name); 584361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale sb.append("\", uniqueId \""); 585361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale sb.append(uniqueId); 586c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append("\", app "); 587c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(appWidth); 588c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 589c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(appHeight); 590c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", real "); 591c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(logicalWidth); 592c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 593c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(logicalHeight); 594c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn if (overscanLeft != 0 || overscanTop != 0 || overscanRight != 0 || overscanBottom != 0) { 595c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", overscan ("); 596c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanLeft); 597c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(","); 598c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanTop); 599c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(","); 600c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanRight); 601c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(","); 602c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(overscanBottom); 603c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(")"); 604c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn } 605c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", largest app "); 606c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(largestNominalAppWidth); 607c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 608c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(largestNominalAppHeight); 609c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", smallest app "); 610c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(smallestNominalAppWidth); 611c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 612c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(smallestNominalAppHeight); 613b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand sb.append(", mode "); 614b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand sb.append(modeId); 615b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand sb.append(", defaultMode "); 616b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand sb.append(defaultModeId); 617b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand sb.append(", modes "); 618b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand sb.append(Arrays.toString(supportedModes)); 6191c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright sb.append(", colorMode "); 6201c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright sb.append(colorMode); 6211c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright sb.append(", supportedColorModes "); 6221c9977b762b4bac46b4470f04c898bfd17da5d90Michael Wright sb.append(Arrays.toString(supportedColorModes)); 6239ff94c0251722c44eece7c3561b4ed36b286d4a8Michael Wright sb.append(", hdrCapabilities "); 6249ff94c0251722c44eece7c3561b4ed36b286d4a8Michael Wright sb.append(hdrCapabilities); 6253f145a2f958320766ae9240c7a57debc20d578aaMichael Wright sb.append(", rotation "); 626c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(rotation); 627c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", density "); 628c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(logicalDensityDpi); 629c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" ("); 630c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(physicalXDpi); 631c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(" x "); 632c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(physicalYDpi); 633c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(") dpi, layerStack "); 634c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(layerStack); 635e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(", appVsyncOff "); 636e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(appVsyncOffsetNanos); 637e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(", presDeadline "); 638e8b1aeb51e1e5da64f1d4fd40f2ee1e815886fe5Andy McFadden sb.append(presentationDeadlineNanos); 639c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(", type "); 640c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(Display.typeToString(type)); 641a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if (address != null) { 642a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", address ").append(address); 643a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 644037c33eae74bee2774897d969d48947f9abe254fJeff Brown sb.append(", state "); 645037c33eae74bee2774897d969d48947f9abe254fJeff Brown sb.append(Display.stateToString(state)); 646a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if (ownerUid != 0 || ownerPackageName != null) { 647a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(", owner ").append(ownerPackageName); 648a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown sb.append(" (uid ").append(ownerUid).append(")"); 649a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 650c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append(flagsToString(flags)); 651250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian sb.append(", removeMode "); 652250d653325ffeeb8ef75e51e3a3d08d6abb8cf9cAndrii Kulian sb.append(removeMode); 653c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn sb.append("}"); 654c652de8141f5b8e3c6bcf8916842b6e106413b1aDianne Hackborn return sb.toString(); 655c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 656c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 657c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown private static String flagsToString(int flags) { 658c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown StringBuilder result = new StringBuilder(); 659f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown if ((flags & Display.FLAG_SECURE) != 0) { 660f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown result.append(", FLAG_SECURE"); 661f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown } 66277aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown if ((flags & Display.FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) { 66377aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown result.append(", FLAG_SUPPORTS_PROTECTED_BUFFERS"); 664c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 665a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if ((flags & Display.FLAG_PRIVATE) != 0) { 666a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown result.append(", FLAG_PRIVATE"); 667a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 6687d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown if ((flags & Display.FLAG_PRESENTATION) != 0) { 6697d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown result.append(", FLAG_PRESENTATION"); 6707d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown } 671d46747a1c64b6ca3282e8841833980ab91829436Jeff Brown if ((flags & Display.FLAG_SCALING_DISABLED) != 0) { 672d46747a1c64b6ca3282e8841833980ab91829436Jeff Brown result.append(", FLAG_SCALING_DISABLED"); 673d46747a1c64b6ca3282e8841833980ab91829436Jeff Brown } 67449e7ff9647e6547c2b852944a5435a05794b9951Adam Powell if ((flags & Display.FLAG_ROUND) != 0) { 67549e7ff9647e6547c2b852944a5435a05794b9951Adam Powell result.append(", FLAG_ROUND"); 67649e7ff9647e6547c2b852944a5435a05794b9951Adam Powell } 677c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown return result.toString(); 678bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown } 679fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown} 680