ADT #1825491: Provide default choices for <uses-library>
We currently hardcode a list in the PlatformTarget and propagate
it to the UI via the AndroidTargetParser. This way we can later
decide to actually get the info from some kind of manifest.
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetData.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetData.java
index 34391c2..406aa6e 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetData.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetData.java
@@ -29,6 +29,7 @@
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.IAndroidTarget.IOptionalLibrary;
+import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Map;
@@ -97,6 +98,7 @@
/**
* Creates an AndroidTargetData object.
+ * @param platformLibraries
* @param optionalLibraries
*/
void setExtraData(IResourceRepository systemResourceRepository,
@@ -110,6 +112,7 @@
String[] broadcastIntentActionValues,
String[] serviceIntentActionValues,
String[] intentCategoryValues,
+ String[] platformLibraries,
IOptionalLibrary[] optionalLibraries,
ProjectResources resources,
LayoutBridge layoutBridge) {
@@ -126,7 +129,7 @@
setPermissions(permissionValues);
setIntentFilterActionsAndCategories(activityIntentActionValues, broadcastIntentActionValues,
serviceIntentActionValues, intentCategoryValues);
- setOptionalLibraries(optionalLibraries);
+ setOptionalLibraries(platformLibraries, optionalLibraries);
}
public DexWrapper getDexWrapper() {
@@ -276,35 +279,40 @@
* @param permissionValues the list of permissions
*/
private void setPermissions(String[] permissionValues) {
- setValues("(uses-permission,android:name)", permissionValues); //$NON-NLS-1$
+ setValues("(uses-permission,android:name)", permissionValues); //$NON-NLS-1$
setValues("(application,android:permission)", permissionValues); //$NON-NLS-1$
- setValues("(activity,android:permission)", permissionValues); //$NON-NLS-1$
- setValues("(receiver,android:permission)", permissionValues); //$NON-NLS-1$
- setValues("(service,android:permission)", permissionValues); //$NON-NLS-1$
- setValues("(provider,android:permission)", permissionValues); //$NON-NLS-1$
+ setValues("(activity,android:permission)", permissionValues); //$NON-NLS-1$
+ setValues("(receiver,android:permission)", permissionValues); //$NON-NLS-1$
+ setValues("(service,android:permission)", permissionValues); //$NON-NLS-1$
+ setValues("(provider,android:permission)", permissionValues); //$NON-NLS-1$
}
private void setIntentFilterActionsAndCategories(String[] activityIntentActions,
String[] broadcastIntentActions, String[] serviceIntentActions,
String[] intentCategoryValues) {
- setValues("(activity,action,android:name)", activityIntentActions); //$NON-NLS-1$
+ setValues("(activity,action,android:name)", activityIntentActions); //$NON-NLS-1$
setValues("(receiver,action,android:name)", broadcastIntentActions); //$NON-NLS-1$
- setValues("(service,action,android:name)", serviceIntentActions); //$NON-NLS-1$
- setValues("(category,android:name)", intentCategoryValues); //$NON-NLS-1$
+ setValues("(service,action,android:name)", serviceIntentActions); //$NON-NLS-1$
+ setValues("(category,android:name)", intentCategoryValues); //$NON-NLS-1$
}
- private void setOptionalLibraries(IOptionalLibrary[] optionalLibraries) {
- String[] values;
+ private void setOptionalLibraries(String[] platformLibraries,
+ IOptionalLibrary[] optionalLibraries) {
- if (optionalLibraries == null) {
- values = new String[0];
- } else {
- values = new String[optionalLibraries.length];
- for (int i = 0; i < optionalLibraries.length; i++) {
- values[i] = optionalLibraries[i].getName();
+ ArrayList<String> libs = new ArrayList<String>();
+
+ if (platformLibraries != null) {
+ for (String name : platformLibraries) {
+ libs.add(name);
}
}
- setValues("(uses-library,android:name)", values);
+
+ if (optionalLibraries != null) {
+ for (int i = 0; i < optionalLibraries.length; i++) {
+ libs.add(optionalLibraries[i].getName());
+ }
+ }
+ setValues("(uses-library,android:name)", libs.toArray(new String[libs.size()]));
}
/**
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetParser.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetParser.java
index 67eec78..588a96b 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetParser.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/AndroidTargetParser.java
@@ -267,6 +267,7 @@
broadcast_actions.toArray(new String[broadcast_actions.size()]),
service_actions.toArray(new String[service_actions.size()]),
categories.toArray(new String[categories.size()]),
+ mAndroidTarget.getPlatformLibraries(),
mAndroidTarget.getOptionalLibraries(),
resources,
layoutBridge);
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java
index 2336f47..b9da961 100644
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java
@@ -192,6 +192,15 @@
return mLibraries;
}
+ /**
+ * Returns the list of libraries of the underlying platform.
+ *
+ * {@inheritDoc}
+ */
+ public String[] getPlatformLibraries() {
+ return mBasePlatform.getPlatformLibraries();
+ }
+
public boolean isCompatibleBaseFor(IAndroidTarget target) {
// basic test
if (target == this) {
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java
index 896a83c..3042950 100644
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java
@@ -149,7 +149,14 @@
* @return an array of optional libraries or <code>null</code> if there is none.
*/
IOptionalLibrary[] getOptionalLibraries();
-
+
+ /**
+ * Returns the list of libraries available for a given platform.
+ *
+ * @return an array of libraries provided by the platform or <code>null</code> if there is none.
+ */
+ String[] getPlatformLibraries();
+
/**
* Returns whether the given target is compatible with the receiver.
* <p/>A target is considered compatible if applications developed for the receiver can run on
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java
index d4e40b1..326d722 100644
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java
@@ -149,15 +149,25 @@
return "HVGA";
}
- /*
- * Always returns null, as a standard platforms have no optional libraries.
+ /**
+ * Always returns null, as a standard platform ha no optional libraries.
*
- * (non-Javadoc)
+ * {@inheritDoc}
* @see com.android.sdklib.IAndroidTarget#getOptionalLibraries()
*/
public IOptionalLibrary[] getOptionalLibraries() {
return null;
}
+
+ /**
+ * Currently always return a fixed list with "android.test.runner" in it.
+ * <p/>
+ * TODO change the fixed library list to be build-dependent later.
+ * {@inheritDoc}
+ */
+ public String[] getPlatformLibraries() {
+ return new String[] { SdkConstants.ANDROID_TEST_RUNNER_LIB };
+ }
public boolean isCompatibleBaseFor(IAndroidTarget target) {
// basic test
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java
index 9eb6ade..b53bd5e 100644
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java
@@ -167,6 +167,9 @@
/** Namespace for the resource XML, i.e. "http://schemas.android.com/apk/res/android" */
public final static String NS_RESOURCES = "http://schemas.android.com/apk/res/android";
+ /** The name of the uses-library that provides "android.test.runner" */
+ public final static String ANDROID_TEST_RUNNER_LIB = "android.test.runner";
+
/* Folder path relative to the SDK root */
/** Path of the documentation directory relative to the sdk folder.
* This is an OS path, ending with a separator. */