aboutsummaryrefslogtreecommitdiff
path: root/resources/src/main/java/org
diff options
context:
space:
mode:
authorChristian Williams <christianw@google.com>2017-11-15 16:52:35 -0800
committerChristian Williams <christianw@google.com>2017-11-17 15:37:38 -0800
commit45444dad993eb772ea580df8d30b2ca0f5b10bae (patch)
tree700834f1358ff7688c1624332f8e8c37a7a57645 /resources/src/main/java/org
parent2608babba5d7911579777a2d0993665827b38040 (diff)
downloadrobolectric-shadows-45444dad993eb772ea580df8d30b2ca0f5b10bae.tar.gz
Pass configuration to resource selection logic as ResTable_config, not qualifiers string.
Diffstat (limited to 'resources/src/main/java/org')
-rw-r--r--resources/src/main/java/org/robolectric/manifest/MetaData.java3
-rw-r--r--resources/src/main/java/org/robolectric/res/PackageResourceTable.java25
-rw-r--r--resources/src/main/java/org/robolectric/res/ResBunch.java5
-rw-r--r--resources/src/main/java/org/robolectric/res/ResBundle.java14
-rw-r--r--resources/src/main/java/org/robolectric/res/ResourceTable.java11
-rw-r--r--resources/src/main/java/org/robolectric/res/RoutingResourceTable.java21
-rw-r--r--resources/src/main/java/org/robolectric/res/StyleResolver.java14
-rw-r--r--resources/src/main/java/org/robolectric/res/android/ResTable_config.java2
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);