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 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Container for a dynamically typed data value. Primarily used with 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.res.Resources} for holding resource values. 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TypedValue { 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The value contains no data. */ 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_NULL = 0x00; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a resource identifier. */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_REFERENCE = 0x01; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds an attribute resource 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * identifier (referencing an attribute in the current theme 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style, not a resource entry). */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_ATTRIBUTE = 0x02; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>string</var> field holds string data. In addition, if 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>data</var> is non-zero then it is the string block 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * index of the string and <var>assetCookie</var> is the set of 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * assets the string came from. */ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_STRING = 0x03; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds an IEEE 754 floating point number. */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FLOAT = 0x04; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a complex number encoding a 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dimension value. */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_DIMENSION = 0x05; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a complex number encoding a fraction 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a container. */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FRACTION = 0x06; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the start of plain integer values. Any type value 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from this to {@link #TYPE_LAST_INT} means the 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>data</var> field holds a generic integer value. */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FIRST_INT = 0x10; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a number that was 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * originally specified in decimal. */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_DEC = 0x10; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a number that was 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * originally specified in hexadecimal (0xn). */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_HEX = 0x11; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds 0 or 1 that was originally 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as "false" or "true". */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_BOOLEAN = 0x12; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the start of integer values that were specified as 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * color constants (starting with '#'). */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_FIRST_COLOR_INT = 0x1c; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #aarrggbb. */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_ARGB8 = 0x1c; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #rrggbb. */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_RGB8 = 0x1d; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #argb. */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_ARGB4 = 0x1e; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The <var>data</var> field holds a color that was originally 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified as #rgb. */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_INT_COLOR_RGB4 = 0x1f; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the end of integer values that were specified as color 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constants. */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_LAST_COLOR_INT = 0x1f; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Identifies the end of plain integer values. */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_LAST_INT = 0x1f; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: bit location of unit information. */ 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_SHIFT = 0; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: mask to extract unit information (after shifting by 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_UNIT_SHIFT}). This gives us 16 possible types, as 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defined below. */ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_MASK = 0xf; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is raw pixels. */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_PX = 0; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is Device Independent 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pixels. */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_DIP = 1; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is a scaled pixel. */ 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_SP = 2; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is in points. */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_PT = 3; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is in inches. */ 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_IN = 4; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_DIMENSION} complex unit: Value is in millimeters. */ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_MM = 5; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_FRACTION} complex unit: A basic fraction of the overall 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * size. */ 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_FRACTION = 0; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@link #TYPE_FRACTION} complex unit: A fraction of the parent size. */ 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_UNIT_FRACTION_PARENT = 1; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: where the radix information is, telling where the decimal 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * place appears in the mantissa. */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_SHIFT = 4; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: mask to extract radix information (after shifting by 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_RADIX_SHIFT}). This give us 4 possible fixed point 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * representations as defined below. */ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_MASK = 0x3; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa is an integral number -- i.e., 0xnnnnnn.0 */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_23p0 = 0; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa magnitude is 16 bits -- i.e, 0xnnnn.nn */ 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_16p7 = 1; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa magnitude is 8 bits -- i.e, 0xnn.nnnn */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_8p15 = 2; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: the mantissa magnitude is 0 bits -- i.e, 0x0.nnnnnn */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_RADIX_0p23 = 3; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: bit location of mantissa information. */ 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_MANTISSA_SHIFT = 8; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Complex data: mask to extract mantissa information (after shifting by 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_MANTISSA_SHIFT}). This gives us 23 bits of precision; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the top bit is the sign. */ 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int COMPLEX_MANTISSA_MASK = 0xffffff; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If {@link #density} is equal to this value, then the density should be 143a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * treated as the system's default density value: {@link DisplayMetrics#DENSITY_DEFAULT}. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DENSITY_DEFAULT = 0; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 147a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 148a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * If {@link #density} is equal to this value, then there is no density 149a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * associated with the resource and it should not be scaled. 150a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 151a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_NONE = 0xffff; 152a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The type held by this value, as defined by the constants here. 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This tells you how to interpret the other fields in the object. */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int type; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** If the value holds a string, this is it. */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence string; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Basic data in the value, interpreted according to {@link #type} */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int data; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Additional information about where the value came from; only 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set for strings. */ 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int assetCookie; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** If Value came from a resource, this holds the corresponding resource id. */ 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int resourceId; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** If Value came from a resource, these are the configurations for which 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its contents can change. */ 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int changingConfigurations = -1; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the Value came from a resource, this holds the corresponding pixel density. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * */ 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int density; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------ */ 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the data for this value as a float. Only use for values 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whose type is {@link #TYPE_FLOAT}. */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getFloat() { 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.intBitsToFloat(data); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final float MANTISSA_MULT = 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1.0f / (1<<TypedValue.COMPLEX_MANTISSA_SHIFT); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final float[] RADIX_MULTS = new float[] { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1.0f*MANTISSA_MULT, 1.0f/(1<<7)*MANTISSA_MULT, 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1.0f/(1<<15)*MANTISSA_MULT, 1.0f/(1<<23)*MANTISSA_MULT 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the base value from a complex data integer. This uses the 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #COMPLEX_MANTISSA_MASK} and {@link #COMPLEX_RADIX_MASK} fields of 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data to compute a floating point representation of the number they 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * describe. The units are ignored. 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param complex A complex data value. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A floating point value corresponding to the complex data. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToFloat(int complex) 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (complex&(TypedValue.COMPLEX_MANTISSA_MASK 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project <<TypedValue.COMPLEX_MANTISSA_SHIFT)) 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RADIX_MULTS[(complex>>TypedValue.COMPLEX_RADIX_SHIFT) 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project & TypedValue.COMPLEX_RADIX_MASK]; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a dimension to its final floating 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point value. The given <var>data</var> must be structured as a 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_DIMENSION}. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * metrics depending on its unit. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToDimension(int data, DisplayMetrics metrics) 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return applyDimension( 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK, 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project complexToFloat(data), 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metrics); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a dimension to its final value 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an integer pixel offset. This is the same as 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #complexToDimension}, except the raw floating point value is 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * truncated to an integer (pixel) value. 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The given <var>data</var> must be structured as a 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_DIMENSION}. 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of pixels specified by the data and its desired 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiplier and units. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int complexToDimensionPixelOffset(int data, 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayMetrics metrics) 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (int)applyDimension( 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK, 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project complexToFloat(data), 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metrics); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a dimension to its final value 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an integer pixel size. This is the same as 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #complexToDimension}, except the raw floating point value is 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * converted to an integer (pixel) value for use as a size. A size 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * conversion involves rounding the base value, and ensuring that a 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * non-zero base value is at least one pixel in size. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The given <var>data</var> must be structured as a 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_DIMENSION}. 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of pixels specified by the data and its desired 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiplier and units. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int complexToDimensionPixelSize(int data, 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayMetrics metrics) 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final float value = complexToFloat(data); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final float f = applyDimension( 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK, 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value, 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project metrics); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int res = (int)(f+0.5f); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (res != 0) return res; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value == 0) return 0; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value > 0) return 1; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToDimensionNoisy(int data, DisplayMetrics metrics) 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float res = complexToDimension(data, metrics); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.out.println( 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Dimension (0x" + ((data>>TypedValue.COMPLEX_MANTISSA_SHIFT) 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project & TypedValue.COMPLEX_MANTISSA_MASK) 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "*" + (RADIX_MULTS[(data>>TypedValue.COMPLEX_RADIX_SHIFT) 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project & TypedValue.COMPLEX_RADIX_MASK] / MANTISSA_MULT) 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ")" + DIMENSION_UNIT_STRS[(data>>COMPLEX_UNIT_SHIFT) 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project & COMPLEX_UNIT_MASK] 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " = " + res); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return res; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts an unpacked complex data value holding a dimension to its final floating 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point value. The two parameters <var>unit</var> and <var>value</var> 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are as in {@link #TYPE_DIMENSION}. 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param unit The unit to convert from. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value The value to apply the unit to. 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * metrics depending on its unit. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float applyDimension(int unit, float value, 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayMetrics metrics) 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (unit) { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_PX: 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_DIP: 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.density; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_SP: 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.scaledDensity; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_PT: 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.xdpi * (1.0f/72); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_IN: 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.xdpi; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_MM: 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return value * metrics.xdpi * (1.0f/25.4f); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the data for this value as a dimension. Only use for values 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whose type is {@link #TYPE_DIMENSION}. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics Current display metrics to use in the conversion -- 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplies display density and scaling information. 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * metrics depending on its unit. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getDimension(DisplayMetrics metrics) 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToDimension(data, metrics); 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a complex data value holding a fraction to its final floating 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point value. The given <var>data</var> must be structured as a 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #TYPE_FRACTION}. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data A complex data value holding a unit, magnitude, and 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mantissa. 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param base The base value of this fraction. In other words, a 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * standard fraction is multiplied by this value. 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pbase The parent base value of this fraction. In other 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * words, a parent fraction (nn%p) is multiplied by this 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * base value depending on its unit. 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static float complexToFraction(int data, float base, float pbase) 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch ((data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK) { 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_FRACTION: 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToFloat(data) * base; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case COMPLEX_UNIT_FRACTION_PARENT: 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToFloat(data) * pbase; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the data for this value as a fraction. Only use for values whose 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * type is {@link #TYPE_FRACTION}. 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param base The base value of this fraction. In other words, a 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * standard fraction is multiplied by this value. 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pbase The parent base value of this fraction. In other 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * words, a parent fraction (nn%p) is multiplied by this 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value. 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The complex floating point value multiplied by the appropriate 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * base value depending on its unit. 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getFraction(float base, float pbase) 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return complexToFraction(data, base, pbase); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Regardless of the actual type of the value, try to convert it to a 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string value. For example, a color type will be converted to a 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string of the form #aarrggbb. 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return CharSequence The coerced string value. If the value is 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null or the type is not known, null is returned. 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final CharSequence coerceToString() 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int t = type; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t == TYPE_STRING) { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return string; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return coerceToString(t, data); 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String[] DIMENSION_UNIT_STRS = new String[] { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "px", "dip", "sp", "pt", "in", "mm" 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String[] FRACTION_UNIT_STRS = new String[] { 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "%", "%p" 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform type conversion as per {@link #coerceToString()} on an 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * explicitly supplied type and data. 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type The data type identifier. 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data The data value. 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return String The coerced string value. If the value is 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null or the type is not known, null is returned. 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String coerceToString(int type, int data) 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (type) { 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_NULL: 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_REFERENCE: 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "@" + data; 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_ATTRIBUTE: 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "?" + data; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_FLOAT: 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.toString(Float.intBitsToFloat(data)); 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_DIMENSION: 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.toString(complexToFloat(data)) + DIMENSION_UNIT_STRS[ 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK]; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_FRACTION: 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Float.toString(complexToFloat(data)*100) + FRACTION_UNIT_STRS[ 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK]; 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_INT_HEX: 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "0x" + Integer.toHexString(data); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TYPE_INT_BOOLEAN: 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data != 0 ? "true" : "false"; 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (type >= TYPE_FIRST_COLOR_INT && type <= TYPE_LAST_COLOR_INT) { 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "#" + Integer.toHexString(data); 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (type >= TYPE_FIRST_INT && type <= TYPE_LAST_INT) { 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Integer.toString(data); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTo(TypedValue other) 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type = other.type; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string = other.string; 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = other.data; 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assetCookie = other.assetCookie; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resourceId = other.resourceId; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project density = other.density; 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(); 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("TypedValue{t=0x").append(Integer.toHexString(type)); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("/d=0x").append(Integer.toHexString(data)); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (type == TYPE_STRING) { 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" \"").append(string != null ? string : "<null>").append("\""); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (assetCookie != 0) { 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" a=").append(assetCookie); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (resourceId != 0) { 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" r=0x").append(Integer.toHexString(resourceId)); 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("}"); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb.toString(); 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 495