mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
improve creating android modules from templates
This commit is contained in:
@@ -769,6 +769,11 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
|
||||
myModuleNameDocListenerEnabled = true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JTextField getModuleNameField() {
|
||||
return myModuleName;
|
||||
}
|
||||
|
||||
protected String getModuleName() {
|
||||
return myModuleName.getText().trim();
|
||||
}
|
||||
|
||||
+8
-2
@@ -30,6 +30,7 @@ import org.jetbrains.android.facet.AndroidFacet;
|
||||
import org.jetbrains.android.util.AndroidBundle;
|
||||
import org.jetbrains.android.util.AndroidCommonUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
@@ -125,7 +126,12 @@ public class AndroidAppPropertiesEditor {
|
||||
}
|
||||
|
||||
private String validatePackageName(boolean library) {
|
||||
String candidate = myPackageNameField.getText().trim();
|
||||
final String candidate = myPackageNameField.getText().trim();
|
||||
return doValidatePackageName(library, candidate, myModulesProvider);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static String doValidatePackageName(boolean library, @NotNull String candidate, @Nullable ModulesProvider modulesProvider) {
|
||||
if (candidate.length() == 0) {
|
||||
return AndroidBundle.message("specify.package.name.error");
|
||||
}
|
||||
@@ -137,7 +143,7 @@ public class AndroidAppPropertiesEditor {
|
||||
}
|
||||
|
||||
if (!library) {
|
||||
for (Module module : myModulesProvider.getModules()) {
|
||||
for (Module module : modulesProvider.getModules()) {
|
||||
final AndroidFacet facet = AndroidFacet.getInstance(module);
|
||||
if (facet != null && !facet.getConfiguration().LIBRARY_PROJECT) {
|
||||
final Manifest manifest = facet.getManifest();
|
||||
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
package org.jetbrains.android.newProject;
|
||||
|
||||
import com.intellij.ide.util.newProjectWizard.SelectTemplateStep;
|
||||
import com.intellij.ide.util.projectWizard.SettingsStep;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.ui.DocumentAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
|
||||
/**
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
class AndroidLibraryModifiedSettingsStep extends AndroidModifiedSettingsStep {
|
||||
|
||||
private final JTextField myPackageNameField;
|
||||
private boolean myPackageNameFieldChangedByUser;
|
||||
|
||||
public AndroidLibraryModifiedSettingsStep(@NotNull AndroidModuleBuilder builder, @NotNull SettingsStep settingsStep) {
|
||||
super(builder, settingsStep);
|
||||
myPackageNameField = new JTextField();
|
||||
final SelectTemplateStep step = (SelectTemplateStep)settingsStep;
|
||||
updatePackageNameField(step);
|
||||
settingsStep.addSettingsField("Pa\u001Bckage name: ", myPackageNameField);
|
||||
|
||||
myPackageNameField.getDocument().addDocumentListener(new DocumentAdapter() {
|
||||
@Override
|
||||
protected void textChanged(DocumentEvent e) {
|
||||
myPackageNameFieldChangedByUser = true;
|
||||
}
|
||||
});
|
||||
|
||||
step.getModuleNameField().getDocument().addDocumentListener(new DocumentAdapter() {
|
||||
@Override
|
||||
protected void textChanged(DocumentEvent e) {
|
||||
if (!myPackageNameFieldChangedByUser) {
|
||||
updatePackageNameField(step);
|
||||
myPackageNameFieldChangedByUser = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updatePackageNameField(SelectTemplateStep settingsStep) {
|
||||
final String moduleName = settingsStep.getModuleNameField().getText().trim();
|
||||
|
||||
if (moduleName.length() > 0) {
|
||||
myPackageNameField.setText(AndroidAppPropertiesEditor.getDefaultPackageNameByModuleName(moduleName));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate() throws ConfigurationException {
|
||||
final String message = AndroidAppPropertiesEditor.doValidatePackageName(true, getPackageName(), null);
|
||||
|
||||
if (message.length() > 0) {
|
||||
throw new ConfigurationException(message);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDataModel() {
|
||||
super.updateDataModel();
|
||||
myBuilder.setPackageName(getPackageName());
|
||||
}
|
||||
|
||||
private String getPackageName() {
|
||||
return myPackageNameField.getText().trim();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package org.jetbrains.android.newProject;
|
||||
|
||||
import com.intellij.ide.util.projectWizard.SdkSettingsStep;
|
||||
import com.intellij.ide.util.projectWizard.SettingsStep;
|
||||
import com.intellij.openapi.projectRoots.SdkTypeId;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
class AndroidModifiedSettingsStep extends SdkSettingsStep {
|
||||
protected AndroidModuleBuilder myBuilder;
|
||||
|
||||
AndroidModifiedSettingsStep(@NotNull final AndroidModuleBuilder builder, @NotNull SettingsStep settingsStep) {
|
||||
super(settingsStep, builder, new Condition<SdkTypeId>() {
|
||||
@Override
|
||||
public boolean value(SdkTypeId sdkType) {
|
||||
return builder.isSuitableSdkType(sdkType);
|
||||
}
|
||||
});
|
||||
myBuilder = builder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDataModel() {
|
||||
super.updateDataModel();
|
||||
final String path = myBuilder.getContentEntryPath();
|
||||
|
||||
if (path != null) {
|
||||
myBuilder.setSourcePaths(Collections.singletonList(Pair.create(path + "/src", "")));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,9 +28,7 @@ import com.intellij.execution.RunnerAndConfigurationSettings;
|
||||
import com.intellij.execution.configurations.GeneralCommandLine;
|
||||
import com.intellij.execution.ui.ConsoleViewContentType;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.util.projectWizard.JavaModuleBuilder;
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
||||
import com.intellij.ide.util.projectWizard.WizardContext;
|
||||
import com.intellij.ide.util.projectWizard.*;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -688,6 +686,26 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
|
||||
return StdModuleTypes.JAVA;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ModuleWizardStep modifySettingsStep(final SettingsStep settingsStep) {
|
||||
if (myProjectType == null) {
|
||||
return super.modifySettingsStep(settingsStep);
|
||||
}
|
||||
switch (myProjectType) {
|
||||
|
||||
case APPLICATION:
|
||||
return new AndroidModifiedSettingsStep(this, settingsStep);
|
||||
case LIBRARY:
|
||||
return new AndroidLibraryModifiedSettingsStep(this, settingsStep);
|
||||
case TEST:
|
||||
return new AndroidTestModifiedSettingsStep(this, settingsStep);
|
||||
default:
|
||||
LOG.error("Unknown project type " + myProjectType);
|
||||
return super.modifySettingsStep(settingsStep);
|
||||
}
|
||||
}
|
||||
|
||||
public void setTestedModule(Module module) {
|
||||
myTestedModule = module;
|
||||
}
|
||||
@@ -753,6 +771,12 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
|
||||
public String getBuilderId() {
|
||||
return "android.library";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleWizardStep[] createWizardSteps(WizardContext wizardContext,
|
||||
ModulesProvider modulesProvider) {
|
||||
return ModuleWizardStep.EMPTY_ARRAY;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Test extends AndroidModuleBuilder {
|
||||
@@ -760,6 +784,11 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
|
||||
super(ProjectType.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleWizardStep[] createWizardSteps(WizardContext wizardContext, ModulesProvider modulesProvider) {
|
||||
return ModuleWizardStep.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBuilderId() {
|
||||
return "android.test";
|
||||
|
||||
@@ -87,6 +87,7 @@ public class AndroidModuleWizardStep extends ModuleWizardStep {
|
||||
|
||||
@NonNls private static final String TARGET_SELECTION_MODE_FOR_NEW_MODULE_PROPERTY = "ANDROID_TARGET_SELECTION_MODE_FOR_NEW_MODULE";
|
||||
@NonNls private static final String TARGET_AVD_FOR_NEW_MODULE_PROPERTY = "ANDROID_TARGET_AVD_FOR_NEW_MODULE";
|
||||
private boolean myInitialized;
|
||||
|
||||
public AndroidModuleWizardStep(@NotNull AndroidModuleBuilder moduleBuilder,
|
||||
final WizardContext context,
|
||||
@@ -211,7 +212,19 @@ public class AndroidModuleWizardStep extends ModuleWizardStep {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStep() {
|
||||
if (!myInitialized) {
|
||||
myInitialized = true;
|
||||
initialize();
|
||||
}
|
||||
}
|
||||
|
||||
public JComponent getComponent() {
|
||||
return myPanel;
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
final String moduleName = myModuleBuilder.getName();
|
||||
|
||||
if (moduleName != null) {
|
||||
@@ -230,7 +243,6 @@ public class AndroidModuleWizardStep extends ModuleWizardStep {
|
||||
}
|
||||
|
||||
updateDeploymentTargetPanel();
|
||||
return myPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
package org.jetbrains.android.newProject;
|
||||
|
||||
import com.intellij.execution.RunManager;
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.ide.util.projectWizard.SettingsStep;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.android.run.AndroidRunConfiguration;
|
||||
import org.jetbrains.android.run.AndroidRunConfigurationType;
|
||||
import org.jetbrains.android.run.TargetSelectionMode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
class AndroidTestModifiedSettingsStep extends AndroidModifiedSettingsStep {
|
||||
private final AndroidModulesComboBox myModulesCombo;
|
||||
private final Project myProject;
|
||||
|
||||
public AndroidTestModifiedSettingsStep(@NotNull AndroidModuleBuilder builder, @NotNull SettingsStep settingsStep) {
|
||||
super(builder, settingsStep);
|
||||
myModulesCombo = new AndroidModulesComboBox();
|
||||
myProject = settingsStep.getContext().getProject();
|
||||
assert myProject != null : "test module can't be created as first module";
|
||||
myModulesCombo.init(myProject);
|
||||
settingsStep.addSettingsField("\u001BTested module: ", myModulesCombo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDataModel() {
|
||||
super.updateDataModel();
|
||||
final Module testedModule = myModulesCombo.getModule();
|
||||
myBuilder.setTestedModule(testedModule);
|
||||
myBuilder.setTargetSelectionMode(chooseTargetSelectionMode(testedModule));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private TargetSelectionMode chooseTargetSelectionMode(@NotNull Module testedModule) {
|
||||
final RunConfiguration[] androidConfigurations =
|
||||
RunManager.getInstance(myProject).getConfigurations(AndroidRunConfigurationType.getInstance());
|
||||
|
||||
for (RunConfiguration configuration : androidConfigurations) {
|
||||
final AndroidRunConfiguration cfg = (AndroidRunConfiguration)configuration;
|
||||
final Module module = cfg.getConfigurationModule().getModule();
|
||||
|
||||
if (testedModule.equals(module)) {
|
||||
return cfg.getTargetSelectionMode();
|
||||
}
|
||||
}
|
||||
return TargetSelectionMode.EMULATOR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate() throws ConfigurationException {
|
||||
AndroidTestPropertiesEditor.doValidate(myModulesCombo.getModule());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+4
-1
@@ -43,7 +43,10 @@ public class AndroidTestPropertiesEditor {
|
||||
}
|
||||
|
||||
public void validate() throws ConfigurationException {
|
||||
Module module = myModulesCombo.getModule();
|
||||
doValidate(myModulesCombo.getModule());
|
||||
}
|
||||
|
||||
static void doValidate(Module module) throws ConfigurationException {
|
||||
if (module == null) {
|
||||
throw new ConfigurationException(AndroidBundle.message("android.wizard.specify.tested.module.error"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user