package org.robolectric.internal;
import org.robolectric.annotation.Config;
import org.robolectric.manifest.AndroidManifest;
import org.robolectric.res.Fs;
import org.robolectric.res.FsFile;
import java.net.URL;
import java.util.List;
import java.util.Properties;
import static java.util.Collections.emptyList;
public class DefaultManifestFactory implements ManifestFactory {
private Properties properties;
public DefaultManifestFactory(Properties properties) {
this.properties = properties;
}
@Override
public ManifestIdentifier identify(Config config) {
FsFile manifestFile = Fs.fileFromPath(properties.getProperty("android_merged_manifest"));
FsFile resourcesDir = Fs.fileFromPath(properties.getProperty("android_merged_resources"));
FsFile assetsDir = Fs.fileFromPath(properties.getProperty("android_merged_assets"));
String packageName = null;
List<FsFile> libraryDirs = emptyList();
String manifestConfig = config.manifest();
if (Config.NONE.equals(manifestConfig)) {
manifestFile = null;
} else if (!Config.DEFAULT_MANIFEST_NAME.equals(manifestConfig)) {
manifestFile = resolveFile(manifestConfig);
}
if (!Config.DEFAULT_RES_FOLDER.equals(config.resourceDir())) {
resourcesDir = resolveFile(config.resourceDir());
}
if (!Config.DEFAULT_ASSET_FOLDER.equals(config.assetDir())) {
assetsDir = resolveFile(config.assetDir());
}
if (!Config.DEFAULT_PACKAGE_NAME.equals(config.packageName())) {
packageName = config.packageName();
}
return new ManifestIdentifier(manifestFile, resourcesDir, assetsDir, packageName, libraryDirs);
}
private FsFile resolveFile(String manifestConfig) {
FsFile manifestFile;URL manifestUrl = getClass().getResource(manifestConfig);
if (manifestUrl == null || !manifestUrl.getProtocol().equals("file")) {
throw new IllegalArgumentException("couldn't find '" + manifestConfig + "'");
}
manifestFile = Fs.fileFromPath(manifestUrl.getPath());
return manifestFile;
}
@Override
public AndroidManifest create(ManifestIdentifier manifestIdentifier) {
return new AndroidManifest(manifestIdentifier.getManifestFile(), manifestIdentifier.getResDir(), manifestIdentifier.getAssetDir());
}
}