blob: b764e27ddd91cd59a02e00cd4abaca8efc7585d1 [file] [log] [blame]
package com.xtremelabs.robolectric.res;
import android.content.Context;
import java.io.File;
import java.io.FileFilter;
import java.util.HashMap;
import java.util.Map;
import static com.xtremelabs.robolectric.Robolectric.shadowOf;
public class ResourceLoader {
private final ResourceExtractor resourceExtractor;
public final ViewLoader viewLoader;
public final StringResourceLoader stringResourceLoader;
public final StringArrayResourceLoader stringArrayResourceLoader;
public final AttrResourceLoader attrResourceLoader;
public final ColorResourceLoader colorResourceLoader;
public final RawResourceLoader rawResourceLoader;
// todo: get these value from the xml resources instead [xw 20101011]
public final Map<Integer, Integer> dimensions = new HashMap<Integer, Integer>();
public ResourceLoader(Class rClass, File resourceDir) throws Exception {
resourceExtractor = new ResourceExtractor();
resourceExtractor.addRClass(rClass);
stringResourceLoader = new StringResourceLoader(resourceExtractor);
stringArrayResourceLoader = new StringArrayResourceLoader(resourceExtractor, stringResourceLoader);
colorResourceLoader = new ColorResourceLoader(resourceExtractor);
attrResourceLoader = new AttrResourceLoader(resourceExtractor);
rawResourceLoader = new RawResourceLoader(resourceExtractor, resourceDir);
if (resourceDir != null) {
DocumentLoader stringResourcesDocumentLoader = new DocumentLoader(stringResourceLoader);
File valuesResourceDir = new File(resourceDir, "values");
stringResourcesDocumentLoader.loadResourceXmlDir(valuesResourceDir);
DocumentLoader resourcesDocumentLoader = new DocumentLoader(stringArrayResourceLoader, colorResourceLoader, attrResourceLoader);
resourcesDocumentLoader.loadResourceXmlDir(valuesResourceDir);
viewLoader = new ViewLoader(resourceExtractor, stringResourceLoader, attrResourceLoader);
DocumentLoader viewDocumentLoader = new DocumentLoader(viewLoader);
File[] layoutDirs = resourceDir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return isLayoutDirectory(file.getPath());
}
});
viewDocumentLoader.loadResourceXmlDirs(layoutDirs);
} else {
viewLoader = null;
}
}
boolean isLayoutDirectory(String path) {
return path.contains(File.separator + "layout");
}
/**
* For tests only...
*/
protected ResourceLoader(StringResourceLoader stringResourceLoader) {
resourceExtractor = new ResourceExtractor();
this.stringResourceLoader = stringResourceLoader;
viewLoader = null;
stringArrayResourceLoader = null;
attrResourceLoader = null;
colorResourceLoader = null;
rawResourceLoader = null;
}
public static ResourceLoader getFrom(Context context) {
return shadowOf(context.getApplicationContext()).getResourceLoader();
}
public String getNameForId(int viewId) {
return resourceExtractor.getResourceName(viewId);
}
}