SDK Updater: samples support.
- Scan unknown /samples folders.
- Sample icon for package list.
- Renamed all package icons to <name>_pkg_16.png to simplify loader.
Bug: 2384690
Change-Id: I4deb11c37918e75357b3bb5212f0007126a8f3de
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
index b92f771..1fe7fa0 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
@@ -106,17 +106,17 @@
// Get the samples dir for a platform if it is located in the new
// root /samples dir. We purposely ignore "old" samples that are
// located under the platform dir.
- String s = target.getPath(IAndroidTarget.SAMPLES);
- File f = new File(s);
- if (f.exists() && f.getParentFile().equals(samplesRoot)) {
- Properties props2 = parseProperties(
- new File(f, SdkConstants.FN_SOURCE_PROP));
- SamplePackage pkg2 = new SamplePackage(target, props2);
- packages.add(pkg2);
- visited.add(f);
+ File samplesDir = new File(target.getPath(IAndroidTarget.SAMPLES));
+ if (samplesDir.exists() && samplesDir.getParentFile().equals(samplesRoot)) {
+ Properties samplesProps = parseProperties(
+ new File(samplesDir, SdkConstants.FN_SOURCE_PROP));
+ if (samplesProps != null) {
+ SamplePackage pkg2 = new SamplePackage(target, samplesProps);
+ packages.add(pkg2);
+ }
+ visited.add(samplesDir);
}
}
-
} else {
pkg = new AddonPackage(target, props);
}
@@ -130,28 +130,30 @@
}
}
- scanExtra(osSdkRoot, visited, packages, log);
-
- // TODO scanSample folder for samples that have not been visited yet
- // (e.g. for platforms that are not installed)
+ scanMissingSamples(osSdkRoot, visited, packages, log);
+ scanExtras(osSdkRoot, visited, packages, log);
mPackages = packages.toArray(new Package[packages.size()]);
return mPackages;
}
/**
- * Find any other directory what we haven't successfully visited and
- * assume they contain extra packages.
- * @param log
+ * Find any other directory <em>at the top level</em> that hasn't been visited yet
+ * and assume they contain extra packages. This is <em>not</em> a recursive search.
*/
- private void scanExtra(String osSdkRoot,
+ private void scanExtras(String osSdkRoot,
HashSet<File> visited,
ArrayList<Package> packages,
ISdkLog log) {
File root = new File(osSdkRoot);
+
+ if (!root.isDirectory()) {
+ // This should not happen. It makes listFiles() return null so let's avoid it.
+ return;
+ }
+
for (File dir : root.listFiles()) {
if (dir.isDirectory() && !visited.contains(dir)) {
-
Properties props = parseProperties(new File(dir, SdkConstants.FN_SOURCE_PROP));
if (props != null) {
try {
@@ -171,6 +173,7 @@
// We only accept this as an extra package if it has a valid local path.
if (pkg.isPathValid()) {
packages.add(pkg);
+ visited.add(dir);
}
} catch (Exception e) {
log.error(e, null);
@@ -181,6 +184,40 @@
}
/**
+ * Find any other sub-directories under the /samples root that hasn't been visited yet
+ * and assume they contain sample packages. This is <em>not</em> a recursive search.
+ * <p/>
+ * The use case is to find samples dirs under /samples when their target isn't loaded.
+ */
+ private void scanMissingSamples(String osSdkRoot,
+ HashSet<File> visited,
+ ArrayList<Package> packages,
+ ISdkLog log) {
+ File root = new File(osSdkRoot);
+ root = new File(root, SdkConstants.FD_SAMPLES);
+
+ if (!root.isDirectory()) {
+ // It makes listFiles() return null so let's avoid it.
+ return;
+ }
+
+ for (File dir : root.listFiles()) {
+ if (dir.isDirectory() && !visited.contains(dir)) {
+ Properties props = parseProperties(new File(dir, SdkConstants.FN_SOURCE_PROP));
+ if (props != null) {
+ try {
+ SamplePackage pkg = new SamplePackage(dir.getAbsolutePath(), props);
+ packages.add(pkg);
+ visited.add(dir);
+ } catch (Exception e) {
+ log.error(e, null);
+ }
+ }
+ }
+ }
+ }
+
+ /**
* Try to find a tools package at the given location.
* Returns null if not found.
*/
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java
index f4c64a2..33ffde1 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SamplePackage.java
@@ -111,16 +111,16 @@
* from properties.
*/
SamplePackage(String archiveOsPath, Properties props) throws AndroidVersionException {
- super( null, //source
- props, //properties
- 0, //revision will be taken from props
- null, //license
- null, //description
- null, //descUrl
- Os.ANY, //archiveOs
- Arch.ANY, //archiveArch
- archiveOsPath //archiveOsPath
- );
+ super(null, //source
+ props, //properties
+ 0, //revision will be taken from props
+ null, //license
+ null, //description
+ null, //descUrl
+ Os.ANY, //archiveOs
+ Arch.ANY, //archiveArch
+ archiveOsPath //archiveOsPath
+ );
mVersion = new AndroidVersion(props);
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java
index cbd846e..5111f49 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java
@@ -16,14 +16,9 @@
package com.android.sdkuilib.internal.repository.icons;
-import com.android.sdklib.internal.repository.AddonPackage;
import com.android.sdklib.internal.repository.Archive;
-import com.android.sdklib.internal.repository.DocPackage;
-import com.android.sdklib.internal.repository.ExtraPackage;
import com.android.sdklib.internal.repository.Package;
-import com.android.sdklib.internal.repository.PlatformPackage;
import com.android.sdklib.internal.repository.RepoSource;
-import com.android.sdklib.internal.repository.ToolPackage;
import com.android.sdkuilib.internal.repository.RepoSourcesAdapter;
import org.eclipse.swt.SWTException;
@@ -90,6 +85,18 @@
* expected file is missing.
*/
public Image getImageForObject(Object object) {
+
+ if (object == null) {
+ return null;
+ }
+
+ String clz = object.getClass().getSimpleName();
+ if (clz.endsWith(Package.class.getSimpleName())) {
+ String name = clz.replaceFirst(Package.class.getSimpleName(), "").toLowerCase() + //$NON-NLS-1$
+ "_pkg_16.png"; //$NON-NLS-1$
+ return getImageByName(name);
+ }
+
if (object instanceof RepoSource) {
return getImageByName("source_icon16.png"); //$NON-NLS-1$
@@ -98,29 +105,16 @@
} else if (object instanceof RepoSourcesAdapter.RepoSourceEmpty) {
return getImageByName("nopkg_icon16.png"); //$NON-NLS-1$
+ }
- } else if (object instanceof PlatformPackage) {
- return getImageByName("android_icon_16.png"); //$NON-NLS-1$
-
- } else if (object instanceof AddonPackage) {
- return getImageByName("addon_icon16.png"); //$NON-NLS-1$
-
- } else if (object instanceof ToolPackage) {
- return getImageByName("tool_icon16.png"); //$NON-NLS-1$
-
- } else if (object instanceof DocPackage) {
- return getImageByName("doc_icon16.png"); //$NON-NLS-1$
-
- } else if (object instanceof ExtraPackage) {
- return getImageByName("extra_icon16.png"); //$NON-NLS-1$
-
- } else if (object instanceof Archive) {
+ if (object instanceof Archive) {
if (((Archive) object).isCompatible()) {
return getImageByName("archive_icon16.png"); //$NON-NLS-1$
} else {
return getImageByName("incompat_icon16.png"); //$NON-NLS-1$
}
}
+
return null;
}
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/addon_icon16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/addon_pkg_16.png
similarity index 100%
rename from sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/addon_icon16.png
rename to sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/addon_pkg_16.png
Binary files differ
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/doc_icon16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/doc_icon16.png
deleted file mode 100755
index 8f56cb0..0000000
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/doc_icon16.png
+++ /dev/null
Binary files differ
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/doc_pkg_16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/doc_pkg_16.png
new file mode 100755
index 0000000..186b3b1
--- /dev/null
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/doc_pkg_16.png
Binary files differ
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/extra_icon16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/extra_pkg_16.png
similarity index 100%
rename from sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/extra_icon16.png
rename to sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/extra_pkg_16.png
Binary files differ
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/platform_pkg_16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/platform_pkg_16.png
new file mode 100755
index 0000000..0b0744b
--- /dev/null
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/platform_pkg_16.png
Binary files differ
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/sample_pkg_16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/sample_pkg_16.png
new file mode 100755
index 0000000..8d31865
--- /dev/null
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/sample_pkg_16.png
Binary files differ
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/tool_icon16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/tool_pkg_16.png
similarity index 100%
rename from sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/tool_icon16.png
rename to sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/tool_pkg_16.png
Binary files differ