diff options
author | Christian Williams <christianw@google.com> | 2017-11-15 16:52:35 -0800 |
---|---|---|
committer | Christian Williams <christianw@google.com> | 2017-11-17 15:37:38 -0800 |
commit | 45444dad993eb772ea580df8d30b2ca0f5b10bae (patch) | |
tree | 700834f1358ff7688c1624332f8e8c37a7a57645 /resources/src/main/java/org | |
parent | 2608babba5d7911579777a2d0993665827b38040 (diff) | |
download | robolectric-shadows-45444dad993eb772ea580df8d30b2ca0f5b10bae.tar.gz |
Pass configuration to resource selection logic as ResTable_config, not qualifiers string.
Diffstat (limited to 'resources/src/main/java/org')
8 files changed, 47 insertions, 48 deletions
diff --git a/resources/src/main/java/org/robolectric/manifest/MetaData.java b/resources/src/main/java/org/robolectric/manifest/MetaData.java index b8c23af9d..d6c85538a 100644 --- a/resources/src/main/java/org/robolectric/manifest/MetaData.java +++ b/resources/src/main/java/org/robolectric/manifest/MetaData.java @@ -6,6 +6,7 @@ import java.util.Map; import org.robolectric.res.ResName; import org.robolectric.res.ResourceTable; import org.robolectric.res.TypedResource; +import org.robolectric.res.android.ResTable_config; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; @@ -45,7 +46,7 @@ public final class MetaData { break; case VALUE: // Was provided by value attribute, need to inferFromValue it - TypedResource<?> typedRes = resourceTable.getValue(resName, ""); + TypedResource<?> typedRes = resourceTable.getValue(resName, new ResTable_config()); // The typed resource's data is always a String, so need to inferFromValue the value. if (typedRes == null) { throw new RoboNotFoundException(resName.getFullyQualifiedName()); diff --git a/resources/src/main/java/org/robolectric/res/PackageResourceTable.java b/resources/src/main/java/org/robolectric/res/PackageResourceTable.java index 01ca03ce5..6b3042a67 100644 --- a/resources/src/main/java/org/robolectric/res/PackageResourceTable.java +++ b/resources/src/main/java/org/robolectric/res/PackageResourceTable.java @@ -5,6 +5,7 @@ import com.google.common.collect.HashBiMap; import java.io.IOException; import java.io.InputStream; import javax.annotation.Nonnull; +import org.robolectric.res.android.ResTable_config; import org.robolectric.res.builder.XmlBlock; /** @@ -44,17 +45,17 @@ public class PackageResourceTable implements ResourceTable { } @Override - public TypedResource getValue(@Nonnull ResName resName, String qualifiers) { - return resources.get(resName, qualifiers); + public TypedResource getValue(@Nonnull ResName resName, ResTable_config config) { + return resources.get(resName, config); } @Override - public TypedResource getValue(int resId, String qualifiers) { - return resources.get(getResName(resId), qualifiers); + public TypedResource getValue(int resId, ResTable_config config) { + return resources.get(getResName(resId), config); } - @Override public XmlBlock getXml(ResName resName, String qualifiers) { - FileTypedResource fileTypedResource = getFileResource(resName, qualifiers); + @Override public XmlBlock getXml(ResName resName, ResTable_config config) { + FileTypedResource fileTypedResource = getFileResource(resName, config); if (fileTypedResource == null || !fileTypedResource.isXml()) { return null; } else { @@ -62,8 +63,8 @@ public class PackageResourceTable implements ResourceTable { } } - @Override public InputStream getRawValue(ResName resName, String qualifiers) { - FileTypedResource fileTypedResource = getFileResource(resName, qualifiers); + @Override public InputStream getRawValue(ResName resName, ResTable_config config) { + FileTypedResource fileTypedResource = getFileResource(resName, config); if (fileTypedResource == null) { return null; } else { @@ -76,8 +77,8 @@ public class PackageResourceTable implements ResourceTable { } } - private FileTypedResource getFileResource(ResName resName, String qualifiers) { - TypedResource typedResource = resources.get(resName, qualifiers); + private FileTypedResource getFileResource(ResName resName, ResTable_config config) { + TypedResource typedResource = resources.get(resName, config); if (!(typedResource instanceof FileTypedResource)) { return null; } else { @@ -86,8 +87,8 @@ public class PackageResourceTable implements ResourceTable { } @Override - public InputStream getRawValue(int resId, String qualifiers) { - return getRawValue(getResName(resId), qualifiers); + public InputStream getRawValue(int resId, ResTable_config config) { + return getRawValue(getResName(resId), config); } @Override diff --git a/resources/src/main/java/org/robolectric/res/ResBunch.java b/resources/src/main/java/org/robolectric/res/ResBunch.java index 5dd68fbd0..f0b39df82 100644 --- a/resources/src/main/java/org/robolectric/res/ResBunch.java +++ b/resources/src/main/java/org/robolectric/res/ResBunch.java @@ -3,6 +3,7 @@ package org.robolectric.res; import java.util.LinkedHashMap; import java.util.Map; import javax.annotation.Nonnull; +import org.robolectric.res.android.ResTable_config; public class ResBunch { private final Map<String, ResBundle> types = new LinkedHashMap<>(); @@ -21,9 +22,9 @@ public class ResBunch { return bundle; } - public TypedResource get(@Nonnull ResName resName, String qualifiers) { + public TypedResource get(@Nonnull ResName resName, ResTable_config config) { ResBundle bundle = getBundle(resName.type); - return bundle.get(resName, qualifiers); + return bundle.get(resName, config); } void receive(ResourceTable.Visitor visitor) { diff --git a/resources/src/main/java/org/robolectric/res/ResBundle.java b/resources/src/main/java/org/robolectric/res/ResBundle.java index 08c09d887..e114353eb 100644 --- a/resources/src/main/java/org/robolectric/res/ResBundle.java +++ b/resources/src/main/java/org/robolectric/res/ResBundle.java @@ -16,8 +16,8 @@ public class ResBundle { valuesMap.put(resName, value); } - public TypedResource get(ResName resName, String qualifiers) { - return valuesMap.pick(resName, qualifiers); + public TypedResource get(ResName resName, ResTable_config config) { + return valuesMap.pick(resName, config); } public void receive(ResourceTable.Visitor visitor) { @@ -29,16 +29,10 @@ public class ResBundle { static class ResMap { private final Map<ResName, List<TypedResource>> map = new HashMap<>(); - public TypedResource pick(ResName resName, String qualifiersStr) { + public TypedResource pick(ResName resName, ResTable_config toMatch) { List<TypedResource> values = map.get(resName); if (values == null || values.size() == 0) return null; - ResTable_config toMatch = new ResTable_config(); - if (!Strings.isNullOrEmpty(qualifiersStr) && - !new ConfigDescription().parse(qualifiersStr, toMatch, false)) { - throw new IllegalArgumentException("Invalid qualifiers \"" + qualifiersStr + "\""); - } - TypedResource bestMatchSoFar = null; for (TypedResource candidate : values) { ResTable_config candidateConfig = candidate.getConfig(); @@ -53,7 +47,7 @@ public class ResBundle { Logger.debug("Picked '%s' for %s for qualifiers '%s' (%d candidates)", bestMatchSoFar == null ? "<none>" : bestMatchSoFar.getXmlContext().getQualifiers().toString(), resName.getFullyQualifiedName(), - qualifiersStr, + toMatch, values.size()); } return bestMatchSoFar; diff --git a/resources/src/main/java/org/robolectric/res/ResourceTable.java b/resources/src/main/java/org/robolectric/res/ResourceTable.java index d9019873d..f306cc4d0 100644 --- a/resources/src/main/java/org/robolectric/res/ResourceTable.java +++ b/resources/src/main/java/org/robolectric/res/ResourceTable.java @@ -2,6 +2,7 @@ package org.robolectric.res; import java.io.InputStream; import javax.annotation.Nonnull; +import org.robolectric.res.android.ResTable_config; import org.robolectric.res.builder.XmlBlock; public interface ResourceTable { @@ -10,15 +11,15 @@ public interface ResourceTable { ResName getResName(int resourceId); - TypedResource getValue(int resId, String qualifiers); + TypedResource getValue(int resId, ResTable_config config); - TypedResource getValue(@Nonnull ResName resName, String qualifiers) ; + TypedResource getValue(@Nonnull ResName resName, ResTable_config config); - XmlBlock getXml(ResName resName, String qualifiers); + XmlBlock getXml(ResName resName, ResTable_config config); - InputStream getRawValue(ResName resName, String qualifiers); + InputStream getRawValue(ResName resName, ResTable_config config); - InputStream getRawValue(int resId, String qualifiers); + InputStream getRawValue(int resId, ResTable_config config); void receive(Visitor visitor); diff --git a/resources/src/main/java/org/robolectric/res/RoutingResourceTable.java b/resources/src/main/java/org/robolectric/res/RoutingResourceTable.java index e719ce7a6..1e002fd31 100644 --- a/resources/src/main/java/org/robolectric/res/RoutingResourceTable.java +++ b/resources/src/main/java/org/robolectric/res/RoutingResourceTable.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Map; import java.util.TreeSet; import javax.annotation.Nonnull; +import org.robolectric.res.android.ResTable_config; import org.robolectric.res.builder.XmlBlock; public class RoutingResourceTable implements ResourceTable { @@ -19,26 +20,26 @@ public class RoutingResourceTable implements ResourceTable { } } - @Override public InputStream getRawValue(int resId, String qualifiers) { + @Override public InputStream getRawValue(int resId, ResTable_config config) { ResName resName = getResName(resId); - return resName != null ? getRawValue(resName, qualifiers) : null; + return resName != null ? getRawValue(resName, config) : null; } - @Override public TypedResource getValue(@Nonnull ResName resName, String qualifiers) { - return pickFor(resName).getValue(resName, qualifiers); + @Override public TypedResource getValue(@Nonnull ResName resName, ResTable_config config) { + return pickFor(resName).getValue(resName, config); } - @Override public TypedResource getValue(int resId, String qualifiers) { + @Override public TypedResource getValue(int resId, ResTable_config config) { ResName resName = pickFor(resId).getResName(resId); - return resName != null ? getValue(resName, qualifiers) : null; + return resName != null ? getValue(resName, config) : null; } - @Override public XmlBlock getXml(ResName resName, String qualifiers) { - return pickFor(resName).getXml(resName, qualifiers); + @Override public XmlBlock getXml(ResName resName, ResTable_config config) { + return pickFor(resName).getXml(resName, config); } - @Override public InputStream getRawValue(ResName resName, String qualifiers) { - return pickFor(resName).getRawValue(resName, qualifiers); + @Override public InputStream getRawValue(ResName resName, ResTable_config config) { + return pickFor(resName).getRawValue(resName, config); } @Override diff --git a/resources/src/main/java/org/robolectric/res/StyleResolver.java b/resources/src/main/java/org/robolectric/res/StyleResolver.java index e21e641ac..0c0f816a8 100644 --- a/resources/src/main/java/org/robolectric/res/StyleResolver.java +++ b/resources/src/main/java/org/robolectric/res/StyleResolver.java @@ -1,9 +1,9 @@ package org.robolectric.res; -import com.google.common.base.Strings; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import org.robolectric.res.android.ResTable_config; public class StyleResolver implements Style { private final List<StyleData> styles = new ArrayList<>(); @@ -11,15 +11,15 @@ public class StyleResolver implements Style { private final ResourceTable systemResourceTable; private final Style theme; private final ResName myResName; - private final String qualifiers; + private final ResTable_config config; public StyleResolver(ResourceTable appResourceTable, ResourceTable systemResourceTable, StyleData styleData, - Style theme, ResName myResName, String qualifiers) { + Style theme, ResName myResName, ResTable_config config) { this.appResourceTable = appResourceTable; this.systemResourceTable = systemResourceTable; this.theme = theme; this.myResName = myResName; - this.qualifiers = qualifiers; + this.config = config; styles.add(styleData); } @@ -89,7 +89,7 @@ public class StyleResolver implements Style { // TODO: Refactor this to a ResourceLoaderChooser ResourceTable resourceProvider = "android".equals(styleRef.packageName) ? systemResourceTable : appResourceTable; - TypedResource typedResource = resourceProvider.getValue(styleRef, qualifiers); + TypedResource typedResource = resourceProvider.getValue(styleRef, config); if (typedResource == null) { StringBuilder builder = new StringBuilder("Could not find any resource") @@ -156,7 +156,7 @@ public class StyleResolver implements Style { return ((theme == null && other.theme == null) || (theme != null && theme.equals(other.theme))) && ((myResName == null && other.myResName == null) || (myResName != null && myResName.equals(other.myResName))) - && Objects.equals(qualifiers, other.qualifiers); + && Objects.equals(config, other.config); } @Override @@ -164,7 +164,7 @@ public class StyleResolver implements Style { int hashCode = 0; hashCode = 31 * hashCode + (theme != null ? theme.hashCode() : 0); hashCode = 31 * hashCode + (myResName != null ? myResName.hashCode() : 0); - hashCode = 31 * hashCode + Strings.nullToEmpty(qualifiers).hashCode(); + hashCode = 31 * hashCode + (config != null ? config.hashCode() : 0); return hashCode; } diff --git a/resources/src/main/java/org/robolectric/res/android/ResTable_config.java b/resources/src/main/java/org/robolectric/res/android/ResTable_config.java index 89558a8e5..38a4ff679 100644 --- a/resources/src/main/java/org/robolectric/res/android/ResTable_config.java +++ b/resources/src/main/java/org/robolectric/res/android/ResTable_config.java @@ -1491,7 +1491,7 @@ public class ResTable_config { return true; } - void setBcp47Locale(final String in) { + public void setBcp47Locale(final String in) { // locale = 0; clear(language); clear(country); |