diff options
2 files changed, 68 insertions, 21 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java index 492cae4..e48cbaa 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java @@ -48,6 +48,7 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; @@ -76,6 +77,16 @@ import java.util.HashSet; */ class NewXmlFileCreationPage extends WizardPage { + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + // Ensure the initial focus is in the Name field; you usually don't need + // to edit the default text field (the project name) + if (visible && mFileNameTextField != null) { + mFileNameTextField.setFocus(); + } + } + /** * Information on one type of resource that can be created (e.g. menu, pref, layout, etc.) */ @@ -183,13 +194,17 @@ class NewXmlFileCreationPage extends WizardPage { /** * When not null, this represent extra attributes that must be specified in the * root element of the generated XML file. When null, no extra attributes are inserted. + * + * @param project the project to get the attributes for */ - String getDefaultAttrs() { + String getDefaultAttrs(IProject project) { return mDefaultAttrs; } /** * The minimum API level required by the current SDK target to support this feature. + * + * @return the minimum API level */ public int getTargetApiLevel() { return mTargetApiLevel; @@ -207,10 +222,28 @@ class NewXmlFileCreationPage extends WizardPage { AndroidTargetData.DESCRIPTOR_LAYOUT, // root seed "LinearLayout", // default root SdkConstants.NS_RESOURCES, // xmlns - "android:layout_width=\"fill_parent\"\n" + //$NON-NLS-1$ // default attributes - "android:layout_height=\"fill_parent\"", //$NON-NLS-1$ + "", // not used, see below 1 // target API level - ), + ) { + // The default attributes must be determined dynamically since whether + // we use match_parent or fill_parent depends on the API level of the + // project + @Override + String getDefaultAttrs(IProject project) { + Sdk currentSdk = Sdk.getCurrent(); + if (currentSdk != null) { + IAndroidTarget target = currentSdk.getTarget(project); + // fill_parent was renamed match_parent in API level 8 + if (target != null && target.getVersion().getApiLevel() >= 8) { + return "android:layout_width=\"match_parent\"\n" //$NON-NLS-1$ + + "android:layout_height=\"match_parent\""; //$NON-NLS-1$ + } + } + + return "android:layout_width=\"fill_parent\"\n" //$NON-NLS-1$ + + "android:layout_height=\"fill_parent\""; //$NON-NLS-1$ + } + }, new TypeInfo("Values", // UI name "An XML file with simple values: colors, strings, dimensions, etc.", // tooltip ResourceFolderType.VALUES, // folder type @@ -389,9 +422,21 @@ class NewXmlFileCreationPage extends WizardPage { /** * Returns the destination filename or an empty string. + * + * @return the filename, never null. */ public String getFileName() { - return mFileNameTextField == null ? "" : mFileNameTextField.getText(); //$NON-NLS-1$ + String fileName; + if (mFileNameTextField == null) { + fileName = ""; //$NON-NLS-1$ + } else { + fileName = mFileNameTextField.getText().trim(); + if (fileName.length() > 0 && fileName.indexOf('.') == -1) { + fileName = fileName + AndroidConstants.DOT_XML; + } + } + + return fileName; } /** @@ -718,6 +763,7 @@ class NewXmlFileCreationPage extends WizardPage { IPath wsFolderPath = null; String fileName = null; + assert res != null; // Eclipse incorrectly thinks res could be null, so tell it no if (res.getType() == IResource.FOLDER) { wsFolderPath = res.getProjectRelativePath(); } else if (res.getType() == IResource.FILE) { @@ -821,7 +867,7 @@ class NewXmlFileCreationPage extends WizardPage { if (data == null) { // We should have both a target and its data. - // However if the wizard is invoked whilst the platform is still being + // However if the wizard is invoked while the platform is still being // loaded we can end up in a weird case where we have a target but it // doesn't have any data yet. // Lets log a warning and silently ignore this root. @@ -1012,7 +1058,7 @@ class NewXmlFileCreationPage extends WizardPage { */ private void onRadioTypeUpdated(Button typeWidget) { // Do nothing if this is an internal modification or if the widget has been - // de-selected. + // deselected. if (mInternalTypeUpdate || !typeWidget.getSelection()) { return; } @@ -1253,9 +1299,9 @@ class NewXmlFileCreationPage extends WizardPage { // -- update UI & enable finish if there's no error setPageComplete(error == null); if (error != null) { - setMessage(error, WizardPage.ERROR); + setMessage(error, IMessageProvider.ERROR); } else if (warning != null) { - setMessage(warning, WizardPage.WARNING); + setMessage(warning, IMessageProvider.WARNING); } else { setErrorMessage(null); setMessage(null); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileWizard.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileWizard.java index 9f4a518..2d40cf9 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileWizard.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileWizard.java @@ -25,6 +25,7 @@ import com.android.ide.eclipse.adt.internal.wizards.newxmlfile.NewXmlFileCreatio import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.resource.ImageDescriptor; @@ -52,7 +53,7 @@ import java.io.UnsupportedEncodingException; public class NewXmlFileWizard extends Wizard implements INewWizard { private static final String PROJECT_LOGO_LARGE = "android_large"; //$NON-NLS-1$ - + protected static final String MAIN_PAGE_NAME = "newAndroidXmlFilePage"; //$NON-NLS-1$ private NewXmlFileCreationPage mMainPage; @@ -67,7 +68,7 @@ public class NewXmlFileWizard extends Wizard implements INewWizard { mMainPage.setDescription("Creates a new Android XML file."); mMainPage.setInitialSelection(selection); } - + /** * Creates the wizard page. * <p/> @@ -126,7 +127,7 @@ public class NewXmlFileWizard extends Wizard implements INewWizard { } // -- Custom Methods -- - + private IFile createXmlFile() { IFile file = mMainPage.getDestinationFile(); String name = file.getFullPath().toString(); @@ -142,7 +143,7 @@ public class NewXmlFileWizard extends Wizard implements INewWizard { } else { createWsParentDirectory(file.getParent()); } - + TypeInfo type = mMainPage.getSelectedType(); if (type == null) { // this is not expected to happen @@ -157,20 +158,20 @@ public class NewXmlFileWizard extends Wizard implements INewWizard { file.toString()); return null; } - + StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); //$NON-NLS-1$ sb.append('<').append(root); if (xmlns != null) { sb.append('\n').append(" xmlns:android=\"").append(xmlns).append("\""); //$NON-NLS-1$ //$NON-NLS-2$ } - - String attrs = type.getDefaultAttrs(); + + String attrs = type.getDefaultAttrs(mMainPage.getProject()); if (attrs != null) { sb.append("\n "); //$NON-NLS-1$ sb.append(attrs.replace("\n", "\n ")); //$NON-NLS-1$ //$NON-NLS-2$ } - + sb.append(">\n"); //$NON-NLS-1$ sb.append("</").append(root).append(">\n"); //$NON-NLS-1$ //$NON-NLS-2$ @@ -180,9 +181,9 @@ public class NewXmlFileWizard extends Wizard implements INewWizard { byte[] buf = result.getBytes("UTF8"); InputStream stream = new ByteArrayInputStream(buf); if (need_delete) { - file.delete(IFile.KEEP_HISTORY | IFile.FORCE, null /*monitor*/); + file.delete(IResource.KEEP_HISTORY | IResource.FORCE, null /*monitor*/); } - file.create(stream, true /*force*/, null /*progres*/); + file.create(stream, true /*force*/, null /*progress*/); return file; } catch (UnsupportedEncodingException e) { error = e.getMessage(); @@ -196,7 +197,7 @@ public class NewXmlFileWizard extends Wizard implements INewWizard { } private boolean createWsParentDirectory(IContainer wsPath) { - if (wsPath.getType() == IContainer.FOLDER) { + if (wsPath.getType() == IResource.FOLDER) { if (wsPath == null || wsPath.exists()) { return true; } @@ -211,7 +212,7 @@ public class NewXmlFileWizard extends Wizard implements INewWizard { e.printStackTrace(); } } - + return false; } |