blob: 6bf03ece9b28cc03ce3d32d8f1ccf7b9a5cee9bf [file] [log] [blame]
package org.robolectric.res;
import org.robolectric.util.Strings;
import java.util.LinkedHashMap;
import java.util.Map;
public class StyleData implements Style {
private final String packageName;
private final String name;
private final String parent;
private final Map<ResName, Attribute> items = new LinkedHashMap<ResName, Attribute>();
public StyleData(String packageName, String name, String parent) {
this.packageName = packageName;
this.name = name;
this.parent = parent;
}
public String getName() {
return name;
}
public String getParent() {
return parent;
}
public void add(ResName attrName, Attribute attribute) {
attrName.mustBe("attr");
items.put(attrName, attribute);
}
@Override public Attribute getAttrValue(ResName resName) {
resName.mustBe("attr");
Attribute attribute = items.get(resName);
// yuck. hack to work around library package remapping
if (attribute == null && !"android".equals(resName.packageName)) {
attribute = items.get(resName.withPackageName(packageName));
if (attribute != null && (!"android".equals(attribute.contextPackageName))) {
attribute = new Attribute(resName, attribute.value, resName.packageName);
}
}
return attribute;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof StyleData)) {
return false;
}
StyleData other = (StyleData) obj;
return Strings.equals(packageName, other.packageName)
&& Strings.equals(name, other.name)
&& Strings.equals(parent, other.parent)
&& items.size() == other.items.size();
}
@Override
public int hashCode() {
int hashCode = 0;
hashCode = 31 * hashCode + Strings.nullToEmpty(packageName).hashCode();
hashCode = 31 * hashCode + Strings.nullToEmpty(name).hashCode();
hashCode = 31 * hashCode + Strings.nullToEmpty(parent).hashCode();
hashCode = 31 * hashCode + items.size();
return hashCode;
}
@Override public String toString() {
return "StyleData{" +
"name='" + name + '\'' +
", parent='" + parent + '\'' +
'}';
}
public String getPackageName() {
return packageName;
}
}