Home | History | Annotate | Download | only in res
      1 package org.robolectric.res;
      2 
      3 import org.robolectric.util.Logger;
      4 
      5 /**
      6  * DrawableResourceLoader
      7  */
      8 public class DrawableResourceLoader {
      9   private final PackageResourceTable resourceTable;
     10 
     11   DrawableResourceLoader(PackageResourceTable resourceTable) {
     12     this.resourceTable = resourceTable;
     13   }
     14 
     15   /**
     16    * Returns a collection of resource IDs for all nine-patch drawables in the project.
     17    *
     18    * @param resourcePath Resource path.
     19    */
     20   void findDrawableResources(ResourcePath resourcePath) {
     21     FsFile[] files = resourcePath.getResourceBase().listFiles();
     22     if (files != null) {
     23       for (FsFile f : files) {
     24         if (f.isDirectory() && f.getName().startsWith("drawable")) {
     25           listDrawableResources(f, "drawable");
     26         } else if (f.isDirectory() && f.getName().startsWith("mipmap")) {
     27           listDrawableResources(f, "mipmap");
     28         }
     29       }
     30     }
     31   }
     32 
     33   private void listDrawableResources(FsFile dir, String type) {
     34     FsFile[] files = dir.listFiles();
     35     if (files != null) {
     36       Qualifiers qualifiers = null;
     37       try {
     38         qualifiers = Qualifiers.fromParentDir(dir);
     39       } catch (IllegalArgumentException e) {
     40         Logger.warn(dir + ": " + e.getMessage());
     41         return;
     42       }
     43 
     44       for (FsFile f : files) {
     45         String name = f.getName();
     46         if (name.startsWith(".")) continue;
     47 
     48         String shortName;
     49         boolean isNinePatch;
     50         if (name.endsWith(".xml")) {
     51           // already handled, do nothing...
     52           continue;
     53         } else if (name.endsWith(".9.png")) {
     54           String[] tokens = name.split("\\.9\\.png$", -1);
     55           shortName = tokens[0];
     56           isNinePatch = true;
     57         } else {
     58           shortName = f.getBaseName();
     59           isNinePatch = false;
     60         }
     61 
     62         XmlContext fakeXmlContext = new XmlContext(resourceTable.getPackageName(), f, qualifiers);
     63         resourceTable.addResource(type, shortName, new FileTypedResource.Image(f, isNinePatch, fakeXmlContext));
     64       }
     65     }
     66   }
     67 }
     68