use of com.android.tools.idea.rendering.multi.CompatibilityRenderTarget in project android by JetBrains.
the class AndroidThemePreviewToolWindowManager method getBestConfiguration.
@Nullable
private static /*if there is no available configuration that would select the passed file*/
Configuration getBestConfiguration(@Nullable PsiFile psiFile) {
Module module = psiFile != null ? ModuleUtilCore.findModuleForPsiElement(psiFile) : null;
if (module == null) {
return null;
}
AndroidFacet facet = AndroidFacet.getInstance(module);
if (facet == null) {
return null;
}
VirtualFile virtualFile = psiFile.getVirtualFile();
ConfigurationManager manager = facet.getConfigurationManager();
List<VirtualFile> variations = ResourceHelper.getResourceVariations(virtualFile, false);
if (variations.isEmpty()) {
return manager.getConfiguration(virtualFile);
}
// There is more than one resource folder available so make sure we select a configuration that only matches the current file.
Collection<FolderConfiguration> incompatible = Collections2.transform(variations, new Function<VirtualFile, FolderConfiguration>() {
@Nullable
@Override
public FolderConfiguration apply(VirtualFile input) {
assert input != null;
return ResourceHelper.getFolderConfiguration(input);
}
});
FolderConfiguration selectedFileFolderConfiguration = ResourceHelper.getFolderConfiguration(psiFile);
if (selectedFileFolderConfiguration == null) {
// This folder probably has invalid qualifiers or they are in the wrong order
return null;
}
RestrictedConfiguration restrictedConfiguration = RestrictedConfiguration.restrict(selectedFileFolderConfiguration, incompatible);
if (restrictedConfiguration == null) {
// Unable to create a configuration that only matches this file
return null;
}
FolderConfiguration restricted = restrictedConfiguration.getAny();
Configuration newConfiguration = Configuration.create(manager, virtualFile, null, restricted);
VersionQualifier newVersionQualifier = restricted.getVersionQualifier();
if (newVersionQualifier != null) {
IAndroidTarget realTarget = manager.getHighestApiTarget() != null ? manager.getHighestApiTarget() : manager.getTarget();
assert realTarget != null;
newConfiguration.setTarget(new CompatibilityRenderTarget(realTarget, newVersionQualifier.getVersion(), null));
}
return newConfiguration;
}
use of com.android.tools.idea.rendering.multi.CompatibilityRenderTarget in project android by JetBrains.
the class ThemeResolverTest method testConfigurationUpdate.
/** Check that, after a configuration update, the resolver updates the list of themes */
public void testConfigurationUpdate() {
myFixture.copyFileToProject("themeEditor/attributeResolution/styles-v17.xml", "res/values-v17/styles.xml");
myFixture.copyFileToProject("themeEditor/attributeResolution/styles-v19.xml", "res/values-v19/styles.xml");
VirtualFile file = myFixture.copyFileToProject("themeEditor/attributeResolution/styles-v20.xml", "res/values-v20/styles.xml");
ConfigurationManager configurationManager = myFacet.getConfigurationManager();
Configuration configuration = configurationManager.getConfiguration(file);
ThemeEditorContext context = new ThemeEditorContext(configuration);
ThemeResolver resolver = context.getThemeResolver();
assertNotNull(resolver.getTheme("V20OnlyTheme"));
assertNotNull(resolver.getTheme("V19OnlyTheme"));
assertNotNull(resolver.getTheme("V17OnlyTheme"));
// Set API level 17 and check that only the V17 theme can be resolved
//noinspection ConstantConditions
configuration.setTarget(new CompatibilityRenderTarget(configurationManager.getHighestApiTarget(), 17, null));
context = new ThemeEditorContext(configuration);
resolver = context.getThemeResolver();
assertNull(resolver.getTheme("V20OnlyTheme"));
assertNull(resolver.getTheme("V19OnlyTheme"));
assertNotNull(resolver.getTheme("V17OnlyTheme"));
}
Aggregations