diff --git a/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.form b/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.form
index f43a933de4c7..05279b1e407c 100644
--- a/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.form
+++ b/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.form
@@ -51,7 +51,7 @@
-
+
diff --git a/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.java b/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.java
index 698b7319a208..d5ca0ec5db4a 100644
--- a/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.java
+++ b/plugins/android/src/org/jetbrains/android/newProject/AndroidAppPropertiesEditor.java
@@ -45,11 +45,11 @@ public class AndroidAppPropertiesEditor {
private JLabel myErrorLabel;
private JPanel myContentPanel;
- private final String myModuleName;
-
public AndroidAppPropertiesEditor(String moduleName) {
- myModuleName = moduleName;
- myApplicationNameField.setText(moduleName);
+ if (moduleName != null) {
+ myApplicationNameField.setText(moduleName);
+ myPackageNameField.setText(getDefaultPackageNameByModuleName(moduleName));
+ }
myHelloAndroidCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateActivityPanel();
@@ -71,6 +71,31 @@ public class AndroidAppPropertiesEditor {
});
}
+ @NotNull
+ public static String getDefaultPackageNameByModuleName(@NotNull String moduleName) {
+ return "com.example." + toIdentifier(moduleName);
+ }
+
+ @NotNull
+ private static String toIdentifier(@NotNull String s) {
+ final StringBuilder result = new StringBuilder();
+
+ for (int i = 0, n = s.length(); i < n; i++) {
+ final char c = s.charAt(i);
+
+ if (Character.isJavaIdentifierPart(c)) {
+ if (i == 0 && !Character.isJavaIdentifierStart(c)) {
+ result.append('_');
+ }
+ result.append(c);
+ }
+ else {
+ result.append('_');
+ }
+ }
+ return result.toString();
+ }
+
public void updateActivityPanel() {
myErrorLabel.setForeground(Color.RED);
UIUtil.setEnabled(myActivtiyPanel, myHelloAndroidCheckBox.isSelected(), true);
@@ -155,6 +180,10 @@ public class AndroidAppPropertiesEditor {
return myApplicationNameField;
}
+ public JTextField getPackageNameField() {
+ return myPackageNameField;
+ }
+
public JPanel getActivtiyPanel() {
return myActivtiyPanel;
}
diff --git a/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleWizardStep.java b/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleWizardStep.java
index 31ab03089d17..48a638f98f5e 100644
--- a/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleWizardStep.java
+++ b/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleWizardStep.java
@@ -241,8 +241,12 @@ public class AndroidModuleWizardStep extends ModuleWizardStep {
}
public JComponent getComponent() {
- myAppPropertiesEditor.getApplicationNameField().setText(myModuleBuilder.getName());
+ final String moduleName = myModuleBuilder.getName();
+ if (moduleName != null) {
+ myAppPropertiesEditor.getApplicationNameField().setText(moduleName);
+ myAppPropertiesEditor.getPackageNameField().setText(AndroidAppPropertiesEditor.getDefaultPackageNameByModuleName(moduleName));
+ }
Sdk selectedSdk = mySdkComboBoxWithBrowseButton.getSelectedSdk();
final PropertiesComponent properties = PropertiesComponent.getInstance();