Merge "Manifest XML completion of minimum SDK"
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java
index 1c92309..64b22a2 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java
@@ -16,9 +16,23 @@
package com.android.ide.eclipse.adt.internal.editors.manifest;
+import static com.android.sdklib.xml.AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION;
+
import com.android.annotations.VisibleForTesting;
import com.android.ide.eclipse.adt.internal.editors.AndroidContentAssist;
import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData;
+import com.android.ide.eclipse.adt.internal.sdk.Sdk;
+import com.android.sdklib.AndroidVersion;
+import com.android.sdklib.IAndroidTarget;
+import com.android.util.Pair;
+
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.w3c.dom.Node;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* Content Assist Processor for AndroidManifest.xml
@@ -32,4 +46,54 @@
public ManifestContentAssist() {
super(AndroidTargetData.DESCRIPTOR_MANIFEST);
}
+
+ @Override
+ protected void computeAttributeValues(List<ICompletionProposal> proposals, int offset,
+ String parentTagName, String attributeName, Node node, String wordPrefix,
+ boolean skipEndTag, int replaceLength) {
+ if (attributeName.endsWith(':' + ATTRIBUTE_MIN_SDK_VERSION)) {
+ // The user is completing the minSdkVersion attribute: it should be
+ // an integer for the API version, but we'll add full Android version
+ // names to make it more obvious what they're selecting
+
+ List<Pair<String, String>> choices = new ArrayList<Pair<String, String>>();
+ // Max: Look up what versions I have
+ IAndroidTarget[] targets = Sdk.getCurrent().getTargets();
+ Map<String, IAndroidTarget> versionMap = new HashMap<String, IAndroidTarget>();
+ List<String> codeNames = new ArrayList<String>();
+ int maxVersion = 1;
+ for (IAndroidTarget target : targets) {
+ AndroidVersion version = target.getVersion();
+ int apiLevel = version.getApiLevel();
+ String key;
+ if (version.isPreview()) {
+ key = version.getCodename();
+ codeNames.add(key);
+ apiLevel--;
+ } else {
+ key = Integer.toString(apiLevel);
+ }
+ if (apiLevel > maxVersion) {
+ maxVersion = apiLevel;
+ }
+
+ versionMap.put(key, target);
+ }
+ for (String codeName : codeNames) {
+ choices.add(Pair.<String, String>of(codeName, null));
+ }
+ for (int i = maxVersion; i >= 1; i--) {
+ IAndroidTarget target = versionMap.get(Integer.toString(i));
+ String version = target != null ? target.getFullName() : null;
+ choices.add(Pair.of(Integer.toString(i), version));
+ }
+ char needTag = 0;
+ addMatchingProposals(proposals, choices.toArray(), offset, node, wordPrefix,
+ needTag, true /* isAttribute */, false /* isNew */,
+ skipEndTag /* skipEndTag */, replaceLength);
+ } else {
+ super.computeAttributeValues(proposals, offset, parentTagName, attributeName, node,
+ wordPrefix, skipEndTag, replaceLength);
+ }
+ }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java
index 8590b89..1b3cb3e 100644
--- a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java
@@ -461,6 +461,11 @@
checkResourceCompletion("completionvalues1.xml", "[^false]");
}
+ public void testCompletion69() throws Exception {
+ // Test minimum SDK completion
+ checkManifestCompletion("manifest.xml", "<uses-sdk android:minSdkVersion=\"^11\" />");
+ }
+
// ---- Test *applying* code completion ----
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/testdata/manifest-expected-completion69.txt b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/testdata/manifest-expected-completion69.txt
new file mode 100644
index 0000000..382011e
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/testdata/manifest-expected-completion69.txt
@@ -0,0 +1,26 @@
+Code completion in manifest.xml for <uses-sdk android:minSdkVersion="^11" />:
+AOSP
+14 : Android 4.0.1
+13 : Android 3.2
+12 : Android 3.1
+11 : Android 3.0
+10
+9 : Android 2.3
+8 : Android 2.2
+7
+6
+5 : Android 2.0
+4 : Android 1.6
+3 : Android 1.5
+2 : Android 1.1
+1
+@string/
+@android:
+@+id/
+@anim/
+@animator/
+@color/
+@drawable/
+@id/
+@layout/
+@style/