diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form
index 240e030ffbe4..734008d2f03e 100644
--- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form
+++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form
@@ -1,6 +1,6 @@
diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java
index ce2984bb27a9..59f30e3c70db 100644
--- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java
+++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java
@@ -16,15 +16,23 @@
package org.jetbrains.android.actions;
+import com.android.ide.common.resources.configuration.FolderConfiguration;
+import com.android.resources.ResourceFolderType;
import com.intellij.ide.actions.TemplateKindCombo;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.InputValidator;
+import com.intellij.ui.components.JBLabel;
import com.intellij.util.PlatformIcons;
import com.intellij.util.containers.HashMap;
+import org.jetbrains.android.uipreview.DeviceConfiguratorPanel;
+import org.jetbrains.android.uipreview.InvalidOptionValueException;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.Map;
@@ -41,9 +49,13 @@ public abstract class CreateResourceDialog extends DialogWrapper {
private JPanel myPanel;
private JLabel myUpDownHint;
private JLabel myResTypeLabel;
+ private JPanel myDeviceConfiguratorWrapper;
+ private JBLabel myErrorLabel;
+ private JTextField myDirectoryNameTextField;
private InputValidator myValidator;
private final Map myResType2ActionMap = new HashMap();
+ private final DeviceConfiguratorPanel myDeviceConfiguratorPanel;
public CreateResourceDialog(Project project, Collection actions, CreateTypedResourceFileAction selected) {
super(project);
@@ -57,16 +69,59 @@ public abstract class CreateResourceDialog extends DialogWrapper {
myResType2ActionMap.put(resType, action);
myResourceTypeCombo.addItem(action.toString(), null, resType);
}
+
+ myDeviceConfiguratorPanel = new DeviceConfiguratorPanel(null) {
+ @Override
+ public void applyEditors() {
+ try {
+ doApplyEditors();
+ final FolderConfiguration config = myDeviceConfiguratorPanel.getConfiguration();
+ final CreateTypedResourceFileAction selectedAction = getSelectedAction();
+ myErrorLabel.setText("");
+ myDirectoryNameTextField.setText("");
+ if (selectedAction != null) {
+ final String resTypeStr = selectedAction.getResourceType();
+ if (resTypeStr != null) {
+ final ResourceFolderType resFolderType = ResourceFolderType.getTypeByName(resTypeStr);
+ if (resFolderType != null) {
+ myDirectoryNameTextField.setText(config.getFolderName(resFolderType));
+ }
+ }
+ }
+ }
+ catch (InvalidOptionValueException e) {
+ myErrorLabel.setText("" + e.getMessage() + "");
+ myDirectoryNameTextField.setText("");
+ }
+ setOKActionEnabled(myDirectoryNameTextField.getText().length() > 0);
+ }
+ };
+
+ myResourceTypeCombo.getComboBox().addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ myDeviceConfiguratorPanel.applyEditors();
+ }
+ });
+
+ myDeviceConfiguratorPanel.updateAll();
+ myDeviceConfiguratorWrapper.add(myDeviceConfiguratorPanel, BorderLayout.CENTER);
+ setOKActionEnabled(myDirectoryNameTextField.getText().length() > 0);
+
init();
}
- protected abstract InputValidator createValidator(@NotNull String resourceType);
+ protected abstract InputValidator createValidator(@NotNull String subdirName);
@Override
protected void doOKAction() {
String fileName = myFileNameField.getText();
assert getSelectedAction() != null;
- myValidator = createValidator(getSelectedAction().getResourceType());
+
+ final String subdirName = myDirectoryNameTextField.getText();
+ assert subdirName != null && subdirName.length() > 0;
+
+ myValidator = createValidator(subdirName);
if (myValidator.checkInput(fileName) && myValidator.canClose(fileName)) {
super.doOKAction();
}
diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java
index 11049b66ecb0..4ea09d340a00 100644
--- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java
+++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java
@@ -70,6 +70,7 @@ public abstract class CreateResourceDirectoryDialog extends DialogWrapper {
});
myDeviceConfiguratorPanel.updateAll();
+ setOKActionEnabled(myDirectoryNameTextField.getText().length() > 0);
init();
}
diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java b/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java
index de06caa08bcc..780c57ad4260 100644
--- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java
+++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java
@@ -16,6 +16,7 @@
package org.jetbrains.android.actions;
+import com.android.AndroidConstants;
import com.intellij.CommonBundle;
import com.intellij.ide.actions.CreateElementActionBase;
import com.intellij.openapi.actionSystem.ActionManager;
@@ -106,8 +107,8 @@ public class CreateResourceFileAction extends CreateElementActionBase {
CreateTypedResourceFileAction createLayoutAction = mySubactions.get("layout");
CreateResourceDialog dialog = new CreateResourceDialog(project, mySubactions.values(), createLayoutAction) {
@Override
- protected InputValidator createValidator(@NotNull String resourceType) {
- return CreateResourceFileAction.this.createValidator(project, directory, resourceType);
+ protected InputValidator createValidator(@NotNull String subdirName) {
+ return CreateResourceFileAction.this.createValidator(project, directory, subdirName);
}
};
dialog.setTitle(getCommandName());
@@ -120,12 +121,12 @@ public class CreateResourceFileAction extends CreateElementActionBase {
}
@NotNull
- private MyInputValidator createValidator(Project project, final PsiDirectory resDir, final String resType) {
- PsiDirectory resSubdir = resDir.findSubdirectory(resType);
+ private MyInputValidator createValidator(Project project, final PsiDirectory resDir, final String subdirName) {
+ PsiDirectory resSubdir = resDir.findSubdirectory(subdirName);
if (resSubdir == null) {
resSubdir = ApplicationManager.getApplication().runWriteAction(new Computable() {
public PsiDirectory compute() {
- return resDir.createSubdirectory(resType);
+ return resDir.createSubdirectory(subdirName);
}
});
}
@@ -145,7 +146,12 @@ public class CreateResourceFileAction extends CreateElementActionBase {
}
private CreateTypedResourceFileAction getActionByDir(PsiDirectory directory) {
- return mySubactions.get(directory.getName());
+ String baseDirName = directory.getName();
+ final int index = baseDirName.indexOf(AndroidConstants.RES_QUALIFIER_SEP);
+ if (index >= 0) {
+ baseDirName = baseDirName.substring(0, index);
+ }
+ return mySubactions.get(baseDirName);
}
@Override