package jadx.core.xmlgen; import java.util.HashMap; import java.util.Map; public class ParserConstants { /** * Chunk types */ protected static final int RES_NULL_TYPE = 0x0000; protected static final int RES_STRING_POOL_TYPE = 0x0001; protected static final int RES_TABLE_TYPE = 0x0002; protected static final int RES_XML_TYPE = 0x0003; protected static final int RES_XML_FIRST_CHUNK_TYPE = 0x0100; protected static final int RES_XML_START_NAMESPACE_TYPE = 0x0100; protected static final int RES_XML_END_NAMESPACE_TYPE = 0x0101; protected static final int RES_XML_START_ELEMENT_TYPE = 0x0102; protected static final int RES_XML_END_ELEMENT_TYPE = 0x0103; protected static final int RES_XML_CDATA_TYPE = 0x0104; protected static final int RES_XML_LAST_CHUNK_TYPE = 0x017f; protected static final int RES_XML_RESOURCE_MAP_TYPE = 0x0180; protected static final int RES_TABLE_PACKAGE_TYPE = 0x0200; protected static final int RES_TABLE_TYPE_TYPE = 0x0201; protected static final int RES_TABLE_TYPE_SPEC_TYPE = 0x0202; /** * Type constants */ // Contains no data. protected static final int TYPE_NULL = 0x00; // The 'data' holds a ResTable_ref, a reference to another resource table entry. protected static final int TYPE_REFERENCE = 0x01; // The 'data' holds an attribute resource identifier. protected static final int TYPE_ATTRIBUTE = 0x02; // The 'data' holds an index into the containing resource table's global value string pool. protected static final int TYPE_STRING = 0x03; // The 'data' holds a single-precision floating point number. protected static final int TYPE_FLOAT = 0x04; // The 'data' holds a complex number encoding a dimension value, such as "100in". protected static final int TYPE_DIMENSION = 0x05; // The 'data' holds a complex number encoding a fraction of a container. protected static final int TYPE_FRACTION = 0x06; // Beginning of integer flavors... protected static final int TYPE_FIRST_INT = 0x10; // The 'data' is a raw integer value of the form n..n. protected static final int TYPE_INT_DEC = 0x10; // The 'data' is a raw integer value of the form 0xn..n. protected static final int TYPE_INT_HEX = 0x11; // The 'data' is either 0 or 1, for input "false" or "true" respectively. protected static final int TYPE_INT_BOOLEAN = 0x12; // Beginning of color integer flavors... protected static final int TYPE_FIRST_COLOR_INT = 0x1c; // The 'data' is a raw integer value of the form #aarrggbb. protected static final int TYPE_INT_COLOR_ARGB8 = 0x1c; // The 'data' is a raw integer value of the form #rrggbb. protected static final int TYPE_INT_COLOR_RGB8 = 0x1d; // The 'data' is a raw integer value of the form #argb. protected static final int TYPE_INT_COLOR_ARGB4 = 0x1e; // The 'data' is a raw integer value of the form #rgb. protected static final int TYPE_INT_COLOR_RGB4 = 0x1f; // ...end of integer flavors. protected static final int TYPE_LAST_COLOR_INT = 0x1f; // ...end of integer flavors. protected static final int TYPE_LAST_INT = 0x1f; // Where the unit type information is. This gives us 16 possible // types, as defined below. protected static final int COMPLEX_UNIT_SHIFT = 0; protected static final int COMPLEX_UNIT_MASK = 0xf; // TYPE_DIMENSION: Value is raw pixels. protected static final int COMPLEX_UNIT_PX = 0; // TYPE_DIMENSION: Value is Device Independent Pixels. protected static final int COMPLEX_UNIT_DIP = 1; // TYPE_DIMENSION: Value is a Scaled device independent Pixels. protected static final int COMPLEX_UNIT_SP = 2; // TYPE_DIMENSION: Value is in points. protected static final int COMPLEX_UNIT_PT = 3; // TYPE_DIMENSION: Value is in inches. protected static final int COMPLEX_UNIT_IN = 4; // TYPE_DIMENSION: Value is in millimeters. protected static final int COMPLEX_UNIT_MM = 5; // TYPE_FRACTION: A basic fraction of the overall size. protected static final int COMPLEX_UNIT_FRACTION = 0; // TYPE_FRACTION: A fraction of the parent size. protected static final int COMPLEX_UNIT_FRACTION_PARENT = 1; // Where the radix information is, telling where the decimal place // appears in the mantissa. This give us 4 possible fixed point // representations as defined below. protected static final int COMPLEX_RADIX_SHIFT = 4; protected static final int COMPLEX_RADIX_MASK = 0x3; // The mantissa is an integral number -- i.e., 0xnnnnnn.0 protected static final int COMPLEX_RADIX_23p0 = 0; // The mantissa magnitude is 16 bits -- i.e, 0xnnnn.nn protected static final int COMPLEX_RADIX_16p7 = 1; // The mantissa magnitude is 8 bits -- i.e, 0xnn.nnnn protected static final int COMPLEX_RADIX_8p15 = 2; // The mantissa magnitude is 0 bits -- i.e, 0x0.nnnnnn protected static final int COMPLEX_RADIX_0p23 = 3; // Where the actual value is. This gives us 23 bits of // precision. The top bit is the sign. protected static final int COMPLEX_MANTISSA_SHIFT = 8; protected static final int COMPLEX_MANTISSA_MASK = 0xffffff; protected static final double MANTISSA_MULT = 1.0f / (1 << COMPLEX_MANTISSA_SHIFT); protected static final double[] RADIX_MULTS = new double[]{ 1.0f * MANTISSA_MULT, 1.0f / (1 << 7) * MANTISSA_MULT, 1.0f / (1 << 15) * MANTISSA_MULT, 1.0f / (1 << 23) * MANTISSA_MULT }; /** * String pool flags */ protected static final int SORTED_FLAG = 1; protected static final int UTF8_FLAG = 1 << 8; protected static final int NO_ENTRY = 0xFFFFFFFF; /** * ResTable_entry */ // If set, this is a complex entry, holding a set of name/value mappings. // It is followed by an array of ResTable_map structures. protected static final int FLAG_COMPLEX = 0x0001; // If set, this resource has been declared public, so libraries are allowed to reference it. protected static final int FLAG_PUBLIC = 0x0002; /** * ResTable_map */ protected static final int ATTR_TYPE = ResMakeInternal(0); // For integral attributes, this is the minimum value it can hold. protected static final int ATTR_MIN = ResMakeInternal(1); // For integral attributes, this is the maximum value it can hold. protected static final int ATTR_MAX = ResMakeInternal(2); // Localization of this resource is can be encouraged or required with an aapt flag if this is set protected static final int ATTR_L10N = ResMakeInternal(3); // for plural support, see android.content.res.PluralRules#attrForQuantity(int) protected static final int ATTR_OTHER = ResMakeInternal(4); protected static final int ATTR_ZERO = ResMakeInternal(5); protected static final int ATTR_ONE = ResMakeInternal(6); protected static final int ATTR_TWO = ResMakeInternal(7); protected static final int ATTR_FEW = ResMakeInternal(8); protected static final int ATTR_MANY = ResMakeInternal(9); protected static final Map<Integer, String> PLURALS_MAP = new HashMap<Integer, String>() { { put(ATTR_OTHER, "other"); put(ATTR_ZERO, "zero"); put(ATTR_ONE, "one"); put(ATTR_TWO, "two"); put(ATTR_FEW, "few"); put(ATTR_MANY, "many"); } }; private static int ResMakeInternal(int entry) { return 0x01000000 | entry & 0xFFFF; } protected static boolean isResInternalId(int resid) { return (resid & 0xFFFF0000) != 0 && (resid & 0xFF0000) == 0; } // Bit mask of allowed types, for use with ATTR_TYPE. protected static final int ATTR_TYPE_ANY = 0x0000FFFF; // Attribute holds a references to another resource. protected static final int ATTR_TYPE_REFERENCE = 1; // Attribute holds a generic string. protected static final int ATTR_TYPE_STRING = 1 << 1; // Attribute holds an integer value. ATTR_MIN and ATTR_MIN can // optionally specify a constrained range of possible integer values. protected static final int ATTR_TYPE_INTEGER = 1 << 2; // Attribute holds a boolean integer. protected static final int ATTR_TYPE_BOOLEAN = 1 << 3; // Attribute holds a color value. protected static final int ATTR_TYPE_COLOR = 1 << 4; // Attribute holds a floating point value. protected static final int ATTR_TYPE_FLOAT = 1 << 5; // Attribute holds a dimension value, such as "20px". protected static final int ATTR_TYPE_DIMENSION = 1 << 6; // Attribute holds a fraction value, such as "20%". protected static final int ATTR_TYPE_FRACTION = 1 << 7; // Attribute holds an enumeration. The enumeration values are // supplied as additional entries in the map. protected static final int ATTR_TYPE_ENUM = 1 << 16; // Attribute holds a bitmaks of flags. The flag bit values are // supplied as additional entries in the map. protected static final int ATTR_TYPE_FLAGS = 1 << 17; // Enum of localization modes, for use with ATTR_L10N protected static final int ATTR_L10N_NOT_REQUIRED = 0; protected static final int ATTR_L10N_SUGGESTED = 1; }