1 package org.robolectric.res.android; 2 3 import org.robolectric.res.android.ResourceTypes.ResChunk_header; 4 5 /** 6 * Definition for a pool of strings. The data of this chunk is an array of uint32_t providing 7 * indices into the pool, relative to stringsStart. At stringsStart are all of the UTF-16 strings 8 * concatenated together; each starts with a uint16_t of the string's length and each ends with a 9 * 0x0000 terminator. If a string is > 32767 characters, the high bit of the length is set meaning 10 * to take those 15 bits as a high word and it will be followed by another uint16_t containing the 11 * low word. 12 * 13 * <p>If styleCount is not zero, then immediately following the array of uint32_t indices into the 14 * string table is another array of indices into a style table starting at stylesStart. Each entry 15 * in the style table is an array of ResStringPool_span structures. 16 */ 17 // transliterated from 18 // https://android.googlesource.com/platform/frameworks/base/+/android-9.0.0_r12/include/androidfw/ResourceTypes.h#434 19 public class ResStringPoolHeader { 20 public static final int SIZEOF = ResChunk_header.SIZEOF + 20; 21 22 ResChunk_header header; 23 // Number of strings in this pool (number of uint32_t indices that follow 24 // in the data). 25 int stringCount; 26 // Number of style span arrays in the pool (number of uint32_t indices 27 // follow the string indices). 28 int styleCount; 29 30 // Flags. 31 32 // If set, the string index is sorted by the string values (based 33 // on strcmp16()). 34 public static final int SORTED_FLAG = 1 << 0; 35 // String pool is encoded in UTF-8 36 public static final int UTF8_FLAG = 1 << 8; 37 int flags; 38 39 // Index from header of the string data. 40 int stringsStart; 41 // Index from header of the style data. 42 int stylesStart; 43 } 44