return -1; final ResType resType = typedResource.getResType(); int type; if (typedResource.getData() == null || resType == ResType.NULL) { type = TypedValue.TYPE_NULL; } else if (typedResource.isReference()) { type = TypedValue.TYPE_REFERENCE; } else if (resType == ResType.STYLE) {
@Override public void onEnd(XMLStreamReader xml, XmlContext xmlContext) throws XMLStreamException { ResType resType = scalarResType == null ? ResType.inferType(buf.toString()) : scalarResType; items.add(new TypedResource<>(buf.toString(), resType, xmlContext)); }
final String reference = typedResource.asString(); ResName refResName = AttributeResource.getResourceReference(reference, typedResource.getXmlContext().getPackageName(), null); typedValue.resourceId = resourceTable.getResourceId(refResName); typedValue.data = typedValue.resourceId; final String reference = typedResource.asString(); final ResName attrResName = AttributeResource.getStyleReference(reference, typedResource.getXmlContext().getPackageName(), "attr"); typedValue.data = resourceTable.getResourceId(attrResName); getConverter(typedResource).fillTypedValue(typedResource.getData(), typedValue); data[offset + STYLE_CHANGING_CONFIGURATIONS] = typedValue.changingConfigurations; data[offset + STYLE_DENSITY] = typedValue.density; stringData[i] = typedResource == null ? null : typedResource.asString();
private ResName resolveResource(TypedResource value, ResTable_config config, ResName resName) { while (value != null && value.isReference()) { String s = value.asString(); if (AttributeResource.isNull(s) || AttributeResource.isEmpty(s)) { value = null; } else { String refStr = s.substring(1).replace("+", ""); resName = ResName.qualifyResName(refStr, resName); value = resourceTable.getValue(resName, config); } } return resName; }
public TypedResource pick(ResName resName, ResTable_config toMatch) { List<TypedResource> values = map.get(resName); if (values == null || values.size() == 0) return null; TypedResource bestMatchSoFar = null; for (TypedResource candidate : values) { ResTable_config candidateConfig = candidate.getConfig(); if (candidateConfig.match(toMatch)) { if (bestMatchSoFar == null || candidateConfig.isBetterThan(bestMatchSoFar.getConfig(), toMatch)) { bestMatchSoFar = candidate; } } } if (Logger.loggingEnabled()) { Logger.debug("Picked '%s' for %s for qualifiers '%s' (%d candidates)", bestMatchSoFar == null ? "<none>" : bestMatchSoFar.getXmlContext().getQualifiers().toString(), resName.getFullyQualifiedName(), toMatch, values.size()); } return bestMatchSoFar; }
return; } else { if (dereferencedRef.isFile()) { outValue.type = TypedValue.TYPE_STRING; outValue.data = 0; outValue.assetCookie = Converter.getNextStringCookie(); outValue.string = dereferencedRef.asString(); return; } else if (dereferencedRef.getData() instanceof String) { attribute = new AttributeResource(attribute.resName, dereferencedRef.asString(), resName.packageName); if (attribute.isResourceReference()) { continue; Converter.getConverter(dereferencedRef.getResType()).fillTypedValue(attribute.value, outValue); return; AttrData attrData = (AttrData) attrTypeData.getData(); String format = attrData.getFormat(); String[] types = format.split("\\|");
@Override public List<TypedResource> getItems(TypedResource typedResource) { return (List<TypedResource>) typedResource.getData(); } }
@Test public void shouldLoadIdResourcesDefinedByItemTag() { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "id", "id_declared_in_item_tag"), config); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.CHAR_SEQUENCE); assertThat(value.isReference()).isFalse(); assertThat(value.asString()).isEmpty(); assertThat((String) value.getData()).isEmpty(); }
@Test public void shouldLoadDrawableXmlResources() { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "rainbow"), config); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE); assertThat(value.isFile()).isTrue(); assertThat((String) value.getData()).contains("rainbow.xml"); }
throw new RoboNotFoundException(resName.getFullyQualifiedName()); switch (typedRes.getResType()) { case BOOLEAN: case COLOR: case INTEGER: case FLOAT: valueMap.put(entry.getKey(), parseValue(typedRes.getData().toString())); break; default: valueMap.put(entry.getKey(),typedRes.getData());
buf.append(key).append(":\n"); for (TypedResource typedResource : map.get(key)) { Object data = typedResource.getData(); if (data instanceof List) { ArrayList<String> newList = new ArrayList<>(); if (item.getClass().equals(TypedResource.class)) { TypedResource typedResourceItem = (TypedResource) item; newList.add(typedResourceItem.getData().toString() + " (" + typedResourceItem.getResType() + ")"); } else { newList.add(item.toString()); data = data.toString() + "^" + styleData.getParent() + " " + attrs; buf.append(" ").append(data).append(" {").append(typedResource.getResType()) .append("/").append(typedResource.getConfig()).append(": ") .append(shortContext(typedResource)).append("}").append("\n");
@Implementation(maxSdk = M) public String getQuantityString(int resId, int quantity) throws Resources.NotFoundException { ShadowLegacyAssetManager shadowAssetManager = legacyShadowOf(realResourcesImpl.getAssets()); TypedResource typedResource = shadowAssetManager.getResourceTable().getValue(resId, shadowAssetManager.config); if (typedResource != null && typedResource instanceof PluralRules) { PluralRules pluralRules = (PluralRules) typedResource; Plural plural = pluralRules.find(quantity); if (plural == null) { return null; } TypedResource<?> resolvedTypedResource = shadowAssetManager.resolve( new TypedResource<>(plural.getString(), ResType.CHAR_SEQUENCE, pluralRules.getXmlContext()), shadowAssetManager.config, resId); return resolvedTypedResource == null ? null : resolvedTypedResource.asString(); } else { return null; } }
@Test public void shouldNotOverwriteValuesWithMatchingQualifiers() { ResBundle bundle = new ResBundle(); XmlContext xmlContext = mock(XmlContext.class); when(xmlContext.getQualifiers()).thenReturn(Qualifiers.parse("--")); when(xmlContext.getConfig()).thenReturn(new ResTable_config()); when(xmlContext.getPackageName()).thenReturn("org.robolectric"); TypedResource firstValue = new TypedResource<>("first_value", ResType.CHAR_SEQUENCE, xmlContext); TypedResource secondValue = new TypedResource<>("second_value", ResType.CHAR_SEQUENCE, xmlContext); bundle.put(new ResName("org.robolectric", "string", "resource_name"), firstValue); bundle.put(new ResName("org.robolectric", "string", "resource_name"), secondValue); assertThat(bundle.get(new ResName("org.robolectric", "string", "resource_name"), from("")).getData()).isEqualTo("first_value"); }
@Override public CharSequence asCharSequence(TypedResource typedResource) { return typedResource.asString(); }
private Converter getConverter(TypedResource value) { if (value instanceof FileTypedResource.Image || (value instanceof FileTypedResource && ((FileTypedResource) value).getPath().getFileName().toString().endsWith(".xml"))) { return new Converter.FromFilePath(); } return Converter.getConverter(value.getResType()); }
static String shortContext(TypedResource typedResource) { return typedResource.getXmlContext().toString().replaceAll("jar:/usr/local/google/home/.*\\.jar\\!", "jar:"); } }
@Test public void shouldFindDrawableResources() throws Exception { Path testBaseDir = temporaryFolder.newFolder("res").toPath(); temporaryFolder.newFolder("res", "drawable"); temporaryFolder.newFile("res/drawable/foo.png"); ResourcePath resourcePath = new ResourcePath(null, testBaseDir, null); DrawableResourceLoader testLoader = new DrawableResourceLoader(resourceTable); testLoader.findDrawableResources(resourcePath); assertThat(resourceTable.getValue(new ResName("org.robolectric", "drawable", "foo"), new ResTable_config()).isFile()).isTrue(); } }
outValue.data = 0; outValue.assetCookie = Converter.getNextStringCookie(); outValue.string = (CharSequence) drawableResource.getData(); return; if (dereferencedRef.isFile()) { outValue.type = TypedValue.TYPE_STRING; outValue.data = 0; outValue.assetCookie = Converter.getNextStringCookie(); outValue.string = dereferencedRef.asString(); return; } else if (dereferencedRef.getData() instanceof String) { attribute = new AttributeResource(attribute.resName, dereferencedRef.asString(), resName.packageName); if (attribute.isResourceReference()) { continue; Converter.getConverter(dereferencedRef.getResType()).fillTypedValue(attribute.value, outValue); return; AttrData attrData = (AttrData) attrTypeData.getData(); String format = attrData.getFormat(); String[] types = format.split("\\|");
public String asString() { T data = getData(); return data instanceof String ? (String) data : null; }
private TypedResource resolveResourceValue(TypedResource value, ResTable_config config, ResName resName) { while (value != null && value.isReference()) { String s = value.asString(); if (AttributeResource.isNull(s) || AttributeResource.isEmpty(s)) { value = null; } else { String refStr = s.substring(1).replace("+", ""); resName = ResName.qualifyResName(refStr, resName); value = resourceTable.getValue(resName, config); } } return value; }