aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/xtremelabs/robolectric/res/DimenResourceLoader.java
blob: 46eeb7d7cb8309078817fadebb89b829931a08a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.xtremelabs.robolectric.res;

import org.w3c.dom.Node;
public class DimenResourceLoader extends XpathResourceXmlLoader implements ResourceValueConverter {

    private static final String[] UNITS = { "dp", "dip", "px", "sp", "mm" };

    private ResourceReferenceResolver<Float> dimenResolver =
            new ResourceReferenceResolver<Float>("dimen", new String[] { "dimen", "integer" });

    public DimenResourceLoader(ResourceExtractor resourceExtractor) {
        super(resourceExtractor, "/resources/dimen");
    }

    public float getValue(int resourceId) {
        return dimenResolver.getValue(resourceExtractor.getResourceName(resourceId));
    }

    public float getValue(String resourceName, boolean isSystem) {
        return getValue(resourceExtractor.getResourceId(resourceName, isSystem));
    }

    @Override
    protected void processNode(Node node, String name, boolean isSystem) {
        dimenResolver.processResource(name, node.getTextContent(), this, isSystem);
    }

    @Override
    public Object convertRawValue(String rawValue) {
    	int end = rawValue.length();
    	for ( int i = 0; i < UNITS.length; i++ ) {
    		int index = rawValue.indexOf(UNITS[i]);
    		if ( index >= 0 && end > index ) {
    			end = index;
    		}
    	}

        return Float.parseFloat(rawValue.substring(0, end));
    }
}