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; 20fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.os.Parcel; 21fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.os.Parcelable; 22fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownimport android.util.DisplayMetrics; 23fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 244ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport libcore.util.Objects; 254ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 26fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/** 27fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Describes the characteristics of a particular logical display. 28fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * @hide 29fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 30fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownpublic final class DisplayInfo implements Parcelable { 31fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 324ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The surface flinger layer stack associated with this logical display. 334ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 344ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int layerStack; 354ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 364ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 37c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown * Display flags. 38c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown */ 39c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown public int flags; 40c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 41c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown /** 4292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display type. 4392130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 4492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public int type; 4592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 4692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 4792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Display address, or null if none. 4892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown * Interpretation varies by display type. 4992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown */ 5092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown public String address; 5192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown 5292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown /** 534ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The human-readable name of the display. 544ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 554ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public String name; 564ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 574ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 58fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The width of the portion of the display that is available to applications, in pixels. 59fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the size of the display minus any system decorations. 60fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 61fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int appWidth; 62fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 63fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 64fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The height of the portion of the display that is available to applications, in pixels. 65fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the size of the display minus any system decorations. 66fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 67fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int appHeight; 68fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 69fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 70fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The smallest value of {@link #appWidth} that an application is likely to encounter, 71fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the width may be even smaller due to the presence 72fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * of a soft keyboard, for example. 73fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 74fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int smallestNominalAppWidth; 75fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 76fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 77fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The smallest value of {@link #appHeight} that an application is likely to encounter, 78fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the height may be even smaller due to the presence 79fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * of a soft keyboard, for example. 80fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 81fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int smallestNominalAppHeight; 82fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 83fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 84fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The largest value of {@link #appWidth} that an application is likely to encounter, 85fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the width may be even larger due to system decorations 86fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * such as the status bar being hidden, for example. 87fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 88fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int largestNominalAppWidth; 89fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 90fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 91fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The largest value of {@link #appHeight} that an application is likely to encounter, 92fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in pixels, excepting cases where the height may be even larger due to system decorations 93fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * such as the status bar being hidden, for example. 94fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 95fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int largestNominalAppHeight; 96fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 97fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 98fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The logical width of the display, in pixels. 99fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the usable size of the display which may be smaller than the 100fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * physical size when the system is emulating a smaller display. 101fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 102fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int logicalWidth; 103fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 104fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 105fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The logical height of the display, in pixels. 106fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents the usable size of the display which may be smaller than the 107fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * physical size when the system is emulating a smaller display. 108fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 109fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int logicalHeight; 110fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 111fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 112fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The rotation of the display relative to its natural orientation. 113fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * May be one of {@link android.view.Surface#ROTATION_0}, 114fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * {@link android.view.Surface#ROTATION_90}, {@link android.view.Surface#ROTATION_180}, 115fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * {@link android.view.Surface#ROTATION_270}. 116fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 117fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 118fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 119fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 120fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 121fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public int rotation; 122fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 123fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 124fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The refresh rate of this display in frames per second. 125fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 126fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 127fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 128fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 129fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 130fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float refreshRate; 131fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 132fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 133908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * The logical display density which is the basis for density-independent 134908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * pixels. 135fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 136908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn public int logicalDensityDpi; 137fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 138fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 139fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The exact physical pixels per inch of the screen in the X dimension. 140fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 141fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The value of this field is indeterminate if the logical display is presented on 142fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * more than one physical display. 143fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 144fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 145fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float physicalXDpi; 146fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 147fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 148fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * The exact physical pixels per inch of the screen in the Y dimension. 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 */ 154fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public float physicalYDpi; 155fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 156fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public static final Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() { 15792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown @Override 158fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo createFromParcel(Parcel source) { 159fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return new DisplayInfo(source); 160fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 161fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 16292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown @Override 163fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo[] newArray(int size) { 164fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown return new DisplayInfo[size]; 165fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 166fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown }; 167fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 168fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public DisplayInfo() { 169fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 170fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 171bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public DisplayInfo(DisplayInfo other) { 172bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown copyFrom(other); 173bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 174bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 175fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private DisplayInfo(Parcel source) { 176fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown readFromParcel(source); 177fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 178fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 179fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Override 1804ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(Object o) { 1814ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return o instanceof DisplayInfo && equals((DisplayInfo)o); 1824ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1834ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1844ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public boolean equals(DisplayInfo other) { 1854ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return other != null 1864ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && layerStack == other.layerStack 18792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && flags == other.flags 18892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && type == other.type 18992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown && Objects.equal(address, other.address) 1904ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && Objects.equal(name, other.name) 1914ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && appWidth == other.appWidth 1924ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && appHeight == other.appHeight 1934ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && smallestNominalAppWidth == other.smallestNominalAppWidth 1944ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && smallestNominalAppHeight == other.smallestNominalAppHeight 1954ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && largestNominalAppWidth == other.largestNominalAppWidth 1964ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && largestNominalAppHeight == other.largestNominalAppHeight 1974ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalWidth == other.logicalWidth 1984ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalHeight == other.logicalHeight 1994ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && rotation == other.rotation 2004ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && refreshRate == other.refreshRate 2014ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && logicalDensityDpi == other.logicalDensityDpi 2024ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && physicalXDpi == other.physicalXDpi 2034ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown && physicalYDpi == other.physicalYDpi; 2044ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2054ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 2064ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 2074ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int hashCode() { 2084ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return 0; // don't care 209fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 210fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 211fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void copyFrom(DisplayInfo other) { 2124ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown layerStack = other.layerStack; 213c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown flags = other.flags; 21492130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown type = other.type; 21592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown address = other.address; 2164ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown name = other.name; 217fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appWidth = other.appWidth; 218fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appHeight = other.appHeight; 219fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppWidth = other.smallestNominalAppWidth; 220fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppHeight = other.smallestNominalAppHeight; 221fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppWidth = other.largestNominalAppWidth; 222fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppHeight = other.largestNominalAppHeight; 223fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalWidth = other.logicalWidth; 224fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalHeight = other.logicalHeight; 225fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown rotation = other.rotation; 226fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown refreshRate = other.refreshRate; 227908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi = other.logicalDensityDpi; 228fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalXDpi = other.physicalXDpi; 229fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalYDpi = other.physicalYDpi; 230fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 231fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 232fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void readFromParcel(Parcel source) { 2334ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown layerStack = source.readInt(); 234c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown flags = source.readInt(); 23592130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown type = source.readInt(); 23692130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown address = source.readString(); 2374ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown name = source.readString(); 238fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appWidth = source.readInt(); 239fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown appHeight = source.readInt(); 240fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppWidth = source.readInt(); 241fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown smallestNominalAppHeight = source.readInt(); 242fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppWidth = source.readInt(); 243fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown largestNominalAppHeight = source.readInt(); 244fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalWidth = source.readInt(); 245fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown logicalHeight = source.readInt(); 246fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown rotation = source.readInt(); 247fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown refreshRate = source.readFloat(); 248908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi = source.readInt(); 249fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalXDpi = source.readFloat(); 250fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown physicalYDpi = source.readFloat(); 251fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 252fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 253fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown @Override 254fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void writeToParcel(Parcel dest, int flags) { 2554ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown dest.writeInt(layerStack); 2563f2ba6220bf74cb5157d6fafee9c76f526acea68Jeff Brown dest.writeInt(this.flags); 25792130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown dest.writeInt(type); 25892130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown dest.writeString(address); 2594ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown dest.writeString(name); 260fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(appWidth); 261fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(appHeight); 262fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(smallestNominalAppWidth); 263fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(smallestNominalAppHeight); 264fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(largestNominalAppWidth); 265fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(largestNominalAppHeight); 266fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(logicalWidth); 267fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(logicalHeight); 268fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeInt(rotation); 269fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(refreshRate); 270908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn dest.writeInt(logicalDensityDpi); 271fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(physicalXDpi); 272fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown dest.writeFloat(physicalYDpi); 273fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 274fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 2754ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 2764ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public int describeContents() { 2774ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return 0; 2784ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 2794ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 280fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void getAppMetrics(DisplayMetrics outMetrics, CompatibilityInfoHolder cih) { 281fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown getMetricsWithSize(outMetrics, cih, appWidth, appHeight); 282fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 283fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 284fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown public void getLogicalMetrics(DisplayMetrics outMetrics, CompatibilityInfoHolder cih) { 285fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown getMetricsWithSize(outMetrics, cih, logicalWidth, logicalHeight); 286fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 287fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 2887f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown public int getNaturalWidth() { 2897f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown return rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 ? 2907f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown logicalWidth : logicalHeight; 2917f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown } 2927f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown 2937f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown public int getNaturalHeight() { 2947f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown return rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 ? 2957f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown logicalHeight : logicalWidth; 2967f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown } 2977f3994ec2a5dce1a037f04714b1f25cab85affb6Jeff Brown 298fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown private void getMetricsWithSize(DisplayMetrics outMetrics, CompatibilityInfoHolder cih, 299fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown int width, int height) { 300908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn outMetrics.densityDpi = outMetrics.noncompatDensityDpi = logicalDensityDpi; 301fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.noncompatWidthPixels = outMetrics.widthPixels = width; 302fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.noncompatHeightPixels = outMetrics.heightPixels = height; 303fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 304908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn outMetrics.density = outMetrics.noncompatDensity = 305908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn logicalDensityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; 306fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.scaledDensity = outMetrics.noncompatScaledDensity = outMetrics.density; 307fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.xdpi = outMetrics.noncompatXdpi = physicalXDpi; 308fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown outMetrics.ydpi = outMetrics.noncompatYdpi = physicalYDpi; 309fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 310fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown if (cih != null) { 311fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown CompatibilityInfo ci = cih.getIfNeeded(); 312fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown if (ci != null) { 313fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown ci.applyToDisplayMetrics(outMetrics); 314fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 315fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 316fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown } 317bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown 318bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown // For debugging purposes 319bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown @Override 320bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown public String toString() { 3214ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return "DisplayInfo{\"" + name + "\", app " + appWidth + " x " + appHeight 322bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown + ", real " + logicalWidth + " x " + logicalHeight 323bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown + ", largest app " + largestNominalAppWidth + " x " + largestNominalAppHeight 324bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown + ", smallest app " + smallestNominalAppWidth + " x " + smallestNominalAppHeight 325bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown + ", " + refreshRate + " fps" 326bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown + ", rotation " + rotation 327bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown + ", density " + logicalDensityDpi 3284ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown + ", " + physicalXDpi + " x " + physicalYDpi + " dpi" 32992130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown + ", layerStack " + layerStack 33092130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown + ", type " + Display.typeToString(type) 33192130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown + ", address " + address 33292130f6407dc51c58b3b941d28a6daf4e04b8d62Jeff Brown + flagsToString(flags) + "}"; 333c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 334c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown 335c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown private static String flagsToString(int flags) { 336c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown StringBuilder result = new StringBuilder(); 337f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown if ((flags & Display.FLAG_SECURE) != 0) { 338f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown result.append(", FLAG_SECURE"); 339f0681b34dffc1510cbd9c3da5c3a7e695553fa8dJeff Brown } 34077aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown if ((flags & Display.FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) { 34177aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown result.append(", FLAG_SUPPORTS_PROTECTED_BUFFERS"); 342c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown } 343c5df37c285221d0fb113f55b9e78b35632241d3fJeff Brown return result.toString(); 344bf5740e75efd87ae0213486e78e029403804c6f0Jeff Brown } 345fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown} 346