package org.robolectric.res; /** * DrawableResourceLoader */ public class DrawableResourceLoader { private final PackageResourceTable resourceTable; public static boolean isStillHandledHere(String type) { return "drawable".equals(type) || "anim".equals(type) || "mipmap".equals(type); } DrawableResourceLoader(PackageResourceTable resourceTable) { this.resourceTable = resourceTable; } /** * Returns a collection of resource IDs for all nine-patch drawables in the project. * * @param resourcePath Resource path. */ void findDrawableResources(ResourcePath resourcePath) { FsFile[] files = resourcePath.getResourceBase().listFiles(); if (files != null) { for (FsFile f : files) { if (f.isDirectory() && f.getName().startsWith("drawable")) { listDrawableResources(f, "drawable"); } else if (f.isDirectory() && f.getName().startsWith("mipmap")) { listDrawableResources(f, "mipmap"); } } } } private void listDrawableResources(FsFile dir, String type) { FsFile[] files = dir.listFiles(); if (files != null) { for (FsFile f : files) { String name = f.getName(); if (name.startsWith(".")) continue; String shortName; boolean isNinePatch; if (name.endsWith(".xml")) { // already handled, do nothing... continue; } else if (name.endsWith(".9.png")) { String[] tokens = name.split("\\.9\\.png$"); shortName = tokens[0]; isNinePatch = true; } else { shortName = f.getBaseName(); isNinePatch = false; } XmlContext fakeXmlContext = new XmlContext(resourceTable.getPackageName(), f); resourceTable.addResource(type, shortName, new FileTypedResource.Image(f, isNinePatch, fakeXmlContext)); } } } }