19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.util; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 197b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbyeimport android.annotation.AnyRes; 20ac85f90466dd60d2af8ffc3942d503a0de606726Alan Viveretteimport android.content.pm.ActivityInfo.Config; 217b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbye 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Container for a dynamically typed data value. Primarily used with 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.res.Resources} for holding resource values. 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TypedValue { 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The value contains no data. */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_NULL = 0x00; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a resource identifier. */ 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_REFERENCE = 0x01; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds an attribute resource 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * identifier (referencing an attribute in the current theme 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style, not a resource entry). */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_ATTRIBUTE = 0x02; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>string</var> field holds string data. In addition, if 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>data</var> is non-zero then it is the string block 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * index of the string and <var>assetCookie</var> is the set of 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * assets the string came from. */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_STRING = 0x03; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds an IEEE 754 floating point number. */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FLOAT = 0x04; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a complex number encoding a 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dimension value. */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_DIMENSION = 0x05; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a complex number encoding a fraction 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a container. */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FRACTION = 0x06; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the start of plain integer values. Any type value 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from this to {@link #TYPE_LAST_INT} means the 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>data</var> field holds a generic integer value. */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FIRST_INT = 0x10; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a number that was 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * originally specified in decimal. */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_DEC = 0x10; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a number that was 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * originally specified in hexadecimal (0xn). */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_HEX = 0x11; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds 0 or 1 that was originally 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as "false" or "true". */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_BOOLEAN = 0x12; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the start of integer values that were specified as 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * color constants (starting with '#'). */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FIRST_COLOR_INT = 0x1c; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #aarrggbb. */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_ARGB8 = 0x1c; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #rrggbb. */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_RGB8 = 0x1d; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #argb. */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_ARGB4 = 0x1e; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #rgb. */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_RGB4 = 0x1f; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the end of integer values that were specified as color 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constants. */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_LAST_COLOR_INT = 0x1f; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the end of plain integer values. */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_LAST_INT = 0x1f; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: bit location of unit information. */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_SHIFT = 0; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: mask to extract unit information (after shifting by 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_UNIT_SHIFT}). This gives us 16 possible types, as 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defined below. */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_MASK = 0xf; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is raw pixels. */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_PX = 0; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is Device Independent 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pixels. */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_DIP = 1; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is a scaled pixel. */ 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_SP = 2; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is in points. */ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_PT = 3; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is in inches. */ 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_IN = 4; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is in millimeters. */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_MM = 5; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_FRACTION} complex unit: A basic fraction of the overall 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * size. */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_FRACTION = 0; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_FRACTION} complex unit: A fraction of the parent size. */ 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_FRACTION_PARENT = 1; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: where the radix information is, telling where the decimal 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * place appears in the mantissa. */ 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_SHIFT = 4; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: mask to extract radix information (after shifting by 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_RADIX_SHIFT}). This give us 4 possible fixed point 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * representations as defined below. */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_MASK = 0x3; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa is an integral number -- i.e., 0xnnnnnn.0 */ 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_23p0 = 0; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa magnitude is 16 bits -- i.e, 0xnnnn.nn */ 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_16p7 = 1; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa magnitude is 8 bits -- i.e, 0xnn.nnnn */ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_8p15 = 2; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa magnitude is 0 bits -- i.e, 0x0.nnnnnn */ 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_0p23 = 3; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: bit location of mantissa information. */ 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_MANTISSA_SHIFT = 8; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: mask to extract mantissa information (after shifting by 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_MANTISSA_SHIFT}). This gives us 23 bits of precision; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the top bit is the sign. */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_MANTISSA_MASK = 0xffffff; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 145f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette * {@link #TYPE_NULL} data indicating the value was not specified. 146f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette */ 147f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette public static final int DATA_NULL_UNDEFINED = 0; 148f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette /** 149f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette * {@link #TYPE_NULL} data indicating the value was explicitly set to null. 150f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette */ 151f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette public static final int DATA_NULL_EMPTY = 1; 152f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette 153f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette /* ------------------------------------------------------------ */ 154f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette 155f2969405020a72e282c348a6ea201d56e9f8d4baAlan Viverette /** 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If {@link #density} is equal to this value, then the density should be 157a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * treated as the system's default density value: {@link DisplayMetrics#DENSITY_DEFAULT}. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DENSITY_DEFAULT = 0; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 161a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 162a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * If {@link #density} is equal to this value, then there is no density 163a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * associated with the resource and it should not be scaled. 164a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 165a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_NONE = 0xffff; 166a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The type held by this value, as defined by the constants here. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This tells you how to interpret the other fields in the object. */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int type; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** If the value holds a string, this is it. */ 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence string; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Basic data in the value, interpreted according to {@link #type} */ 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int data; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Additional information about where the value came from; only 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set for strings. */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int assetCookie; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** If Value came from a resource, this holds the corresponding resource id. */ 1847b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbye @AnyRes 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int resourceId; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 187ac85f90466dd60d2af8ffc3942d503a0de606726Alan Viverette /** 188ac85f90466dd60d2af8ffc3942d503a0de606726Alan Viverette * If the value came from a resource, these are the configurations for 189ac85f90466dd60d2af8ffc3942d503a0de606726Alan Viverette * which its contents can change. 19041a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * 19141a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * <p>For example, if a resource has a value defined for the -land resource qualifier, 19241a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * this field will have the {@link android.content.pm.ActivityInfo#CONFIG_ORIENTATION} bit set. 19341a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * </p> 19441a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * 19541a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_MCC 19641a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_MNC 19741a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_LOCALE 19841a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_TOUCHSCREEN 19941a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_KEYBOARD 20041a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_KEYBOARD_HIDDEN 20141a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_NAVIGATION 20241a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_ORIENTATION 20341a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_SCREEN_LAYOUT 20441a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_UI_MODE 20541a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_SCREEN_SIZE 20641a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_SMALLEST_SCREEN_SIZE 20741a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_DENSITY 20841a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_LAYOUT_DIRECTION 20941a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * @see android.content.pm.ActivityInfo#CONFIG_COLOR_MODE 21041a2fb1c75989e6e6ff9559058eb59d061f0735eAdam Lesinski * 211ac85f90466dd60d2af8ffc3942d503a0de606726Alan Viverette */ 212ac85f90466dd60d2af8ffc3942d503a0de606726Alan Viverette public @Config int changingConfigurations = -1; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the Value came from a resource, this holds the corresponding pixel density. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int density; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the data for this value as a float. Only use for values 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whose type is {@link #TYPE_FLOAT}. */ 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getFloat() { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.intBitsToFloat(data); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final float MANTISSA_MULT = 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1.0f / (1<<TypedValue.COMPLEX_MANTISSA_SHIFT); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final float[] RADIX_MULTS = new float[] { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1.0f*MANTISSA_MULT, 1.0f/(1<<7)*MANTISSA_MULT, 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1.0f/(1<<15)*MANTISSA_MULT, 1.0f/(1<<23)*MANTISSA_MULT 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the base value from a complex data integer. This uses the 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_MANTISSA_MASK} and {@link #COMPLEX_RADIX_MASK} fields of 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data to compute a floating point representation of the number they 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * describe. The units are ignored. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param complex A complex data value. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A floating point value corresponding to the complex data. 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToFloat(int complex) 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (complex&(TypedValue.COMPLEX_MANTISSA_MASK 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project <<TypedValue.COMPLEX_MANTISSA_SHIFT)) 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RADIX_MULTS[(complex>>TypedValue.COMPLEX_RADIX_SHIFT) 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project & TypedValue.COMPLEX_RADIX_MASK]; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a dimension to its final floating 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point value. The given <var>data</var> must be structured as a 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_DIMENSION}. 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * metrics depending on its unit. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToDimension(int data, DisplayMetrics metrics) 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return applyDimension( 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project complexToFloat(data), 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metrics); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a dimension to its final value 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an integer pixel offset. This is the same as 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #complexToDimension}, except the raw floating point value is 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * truncated to an integer (pixel) value. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The given <var>data</var> must be structured as a 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_DIMENSION}. 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of pixels specified by the data and its desired 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiplier and units. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int complexToDimensionPixelOffset(int data, 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayMetrics metrics) 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (int)applyDimension( 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK, 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project complexToFloat(data), 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metrics); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a dimension to its final value 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an integer pixel size. This is the same as 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #complexToDimension}, except the raw floating point value is 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * converted to an integer (pixel) value for use as a size. A size 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * conversion involves rounding the base value, and ensuring that a 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * non-zero base value is at least one pixel in size. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The given <var>data</var> must be structured as a 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_DIMENSION}. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of pixels specified by the data and its desired 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiplier and units. 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int complexToDimensionPixelSize(int data, 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayMetrics metrics) 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final float value = complexToFloat(data); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final float f = applyDimension( 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK, 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value, 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metrics); 324724792d0cfe7412bf1cc825715f3f8a4d2481781Chet Haase final int res = (int) ((f >= 0) ? (f + 0.5f) : (f - 0.5f)); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (res != 0) return res; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value == 0) return 0; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value > 0) return 1; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3318aca9e335f9b2eb060878b2e6cbe241928d83dc9Jeff Brown /** 3328aca9e335f9b2eb060878b2e6cbe241928d83dc9Jeff Brown * @hide Was accidentally exposed in API level 1 for debugging purposes. 3338aca9e335f9b2eb060878b2e6cbe241928d83dc9Jeff Brown * Kept for compatibility just in case although the debugging code has been removed. 3348aca9e335f9b2eb060878b2e6cbe241928d83dc9Jeff Brown */ 3358aca9e335f9b2eb060878b2e6cbe241928d83dc9Jeff Brown @Deprecated 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToDimensionNoisy(int data, DisplayMetrics metrics) 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3388aca9e335f9b2eb060878b2e6cbe241928d83dc9Jeff Brown return complexToDimension(data, metrics); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3429f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane * Return the complex unit type for this value. For example, a dimen type 3439f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane * with value 12sp will return {@link #COMPLEX_UNIT_SP}. Only use for values 3449f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane * whose type is {@link #TYPE_DIMENSION}. 3459f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane * 3469f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane * @return The complex unit type. 3479f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane */ 3489f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane public int getComplexUnit() 3499f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane { 3509f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane return COMPLEX_UNIT_MASK & (data>>TypedValue.COMPLEX_UNIT_SHIFT); 3519f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane } 3529f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane 3539f357ae9f038b97e4426bf3707ca94624cdf5d75Christopher Lane /** 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts an unpacked complex data value holding a dimension to its final floating 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point value. The two parameters <var>unit</var> and <var>value</var> 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are as in {@link #TYPE_DIMENSION}. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param unit The unit to convert from. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value The value to apply the unit to. 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * metrics depending on its unit. 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float applyDimension(int unit, float value, 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayMetrics metrics) 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (unit) { 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_PX: 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_DIP: 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.density; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_SP: 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.scaledDensity; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_PT: 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.xdpi * (1.0f/72); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_IN: 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.xdpi; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_MM: 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.xdpi * (1.0f/25.4f); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the data for this value as a dimension. Only use for values 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whose type is {@link #TYPE_DIMENSION}. 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * metrics depending on its unit. 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getDimension(DisplayMetrics metrics) 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToDimension(data, metrics); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a fraction to its final floating 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point value. The given <var>data</var> must be structured as a 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_FRACTION}. 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param base The base value of this fraction. In other words, a 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * standard fraction is multiplied by this value. 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pbase The parent base value of this fraction. In other 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * words, a parent fraction (nn%p) is multiplied by this 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * base value depending on its unit. 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToFraction(int data, float base, float pbase) 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch ((data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK) { 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_FRACTION: 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToFloat(data) * base; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_FRACTION_PARENT: 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToFloat(data) * pbase; 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the data for this value as a fraction. Only use for values whose 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * type is {@link #TYPE_FRACTION}. 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param base The base value of this fraction. In other words, a 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * standard fraction is multiplied by this value. 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pbase The parent base value of this fraction. In other 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * words, a parent fraction (nn%p) is multiplied by this 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * base value depending on its unit. 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getFraction(float base, float pbase) 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToFraction(data, base, pbase); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Regardless of the actual type of the value, try to convert it to a 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string value. For example, a color type will be converted to a 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string of the form #aarrggbb. 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return CharSequence The coerced string value. If the value is 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null or the type is not known, null is returned. 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final CharSequence coerceToString() 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int t = type; 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t == TYPE_STRING) { 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return string; 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return coerceToString(t, data); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String[] DIMENSION_UNIT_STRS = new String[] { 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "px", "dip", "sp", "pt", "in", "mm" 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String[] FRACTION_UNIT_STRS = new String[] { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "%", "%p" 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform type conversion as per {@link #coerceToString()} on an 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * explicitly supplied type and data. 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type The data type identifier. 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data The data value. 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return String The coerced string value. If the value is 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null or the type is not known, null is returned. 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String coerceToString(int type, int data) 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (type) { 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_NULL: 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_REFERENCE: 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "@" + data; 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_ATTRIBUTE: 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "?" + data; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_FLOAT: 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.toString(Float.intBitsToFloat(data)); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_DIMENSION: 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.toString(complexToFloat(data)) + DIMENSION_UNIT_STRS[ 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK]; 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_FRACTION: 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.toString(complexToFloat(data)*100) + FRACTION_UNIT_STRS[ 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK]; 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_INT_HEX: 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "0x" + Integer.toHexString(data); 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_INT_BOOLEAN: 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data != 0 ? "true" : "false"; 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (type >= TYPE_FIRST_COLOR_INT && type <= TYPE_LAST_COLOR_INT) { 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "#" + Integer.toHexString(data); 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (type >= TYPE_FIRST_INT && type <= TYPE_LAST_INT) { 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Integer.toString(data); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTo(TypedValue other) 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type = other.type; 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string = other.string; 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = other.data; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assetCookie = other.assetCookie; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resourceId = other.resourceId; 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project density = other.density; 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("TypedValue{t=0x").append(Integer.toHexString(type)); 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("/d=0x").append(Integer.toHexString(data)); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (type == TYPE_STRING) { 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" \"").append(string != null ? string : "<null>").append("\""); 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (assetCookie != 0) { 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" a=").append(assetCookie); 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (resourceId != 0) { 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" r=0x").append(Integer.toHexString(resourceId)); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("}"); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb.toString(); 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 541