From a466a7f2004385b8c6cd69f85dd7c2b01776ceda Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Wed, 21 Mar 2012 16:12:04 +0400 Subject: [PATCH] IDEA-79960 Set minSdkVersion attribute automatically when creating Android project --- .../newProject/AndroidModuleBuilder.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java b/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java index 40d6e70d5618..8d98f268d299 100644 --- a/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java +++ b/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java @@ -48,7 +48,10 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.ExternalChangeAction; import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; +import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.psi.xml.XmlTag; import org.jetbrains.android.AndroidFileTemplateProvider; import org.jetbrains.android.dom.manifest.Manifest; import org.jetbrains.android.dom.resources.ResourceElement; @@ -216,7 +219,7 @@ public class AndroidModuleBuilder extends JavaModuleBuilder { return true; } - IAndroidTarget target = platform.getTarget(); + final IAndroidTarget target = platform.getTarget(); final String androidToolPath = platform.getSdkData().getLocation() + File.separator + AndroidCommonUtils.toolPath(SdkConstants.androidCmdName()); @@ -328,6 +331,7 @@ public class AndroidModuleBuilder extends JavaModuleBuilder { } if (myProjectType == ProjectType.APPLICATION) { assignApplicationName(facet); + configureManifest(facet, target); createChildDirectoryIfNotExist(project, contentRoot, SdkConstants.FD_ASSETS); createChildDirectoryIfNotExist(project, contentRoot, SdkConstants.FD_NATIVE_LIBS); } @@ -376,6 +380,29 @@ public class AndroidModuleBuilder extends JavaModuleBuilder { return true; } + private static void configureManifest(@NotNull AndroidFacet facet, @NotNull IAndroidTarget target) { + final Manifest manifest = facet.getManifest(); + if (manifest == null) { + return; + } + + final XmlTag manifestTag = manifest.getXmlTag(); + if (manifestTag == null) { + return; + } + + XmlTag usesSdkTag = manifestTag.createChildTag("uses-sdk", "", null, false); + if (usesSdkTag != null) { + usesSdkTag = manifestTag.addSubTag(usesSdkTag, true); + usesSdkTag.setAttribute("minSdkVersion", SdkConstants.NS_RESOURCES, target.getVersion().getApiString()); + } + + final PsiFile manifestFile = manifestTag.getContainingFile(); + if (manifestFile != null) { + CodeStyleManager.getInstance(manifestFile.getProject()).reformat(manifestFile); + } + } + private void assignApplicationName(AndroidFacet facet) { if (myApplicationName == null || myApplicationName.length() == 0) { return; @@ -402,8 +429,8 @@ public class AndroidModuleBuilder extends JavaModuleBuilder { if (manifest != null) { manifest.getApplication().getLabel().setValue(ResourceValue.referenceTo('@', null, "string", appNameResource)); + } } - } private void createManifestFileAndAntFiles(Project project, VirtualFile contentRoot) { VirtualFile existingManifestFile = contentRoot.findChild(FN_ANDROID_MANIFEST_XML); @@ -515,6 +542,11 @@ public class AndroidModuleBuilder extends JavaModuleBuilder { }); assignApplicationName(facet); + + final AndroidPlatform platform = AndroidPlatform.parse(mySdk); + if (platform != null) { + configureManifest(facet, platform.getTarget()); + } } } };