public AssetInfo locate(AssetManager manager, AssetKey key) {
    String name = key.getName();
    File file = (root != null) ? new File(root, name) : new File(name);
    if (file.exists() && file.isFile()) {
      try {
        // Now, check asset name requirements
        String canonical = file.getCanonicalPath();
        String absolute = file.getAbsolutePath();
        if (!canonical.endsWith(absolute)) {
          throw new AssetNotFoundException(
              "Asset name doesn't match requirements.\n"
                  + "\""
                  + canonical
                  + "\" doesn't match \""
                  + absolute
                  + "\"");
        }
      } catch (IOException ex) {
        throw new AssetLoadException("Failed to get file canonical path " + file, ex);
      }

      AssetInfo fileAssetInfo = new AssetInfoFile(manager, key, file);
      return UncompressedAssetInfo.create(fileAssetInfo);
    } else {
      return null;
    }
  }