diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/RepoSource.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/RepoSource.java index 1fd880fff..d8ab806ea 100755 --- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/RepoSource.java +++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/RepoSource.java @@ -62,7 +62,7 @@ public class RepoSource implements IDescription { setDefaultDescription(); } - /** Returns the URL of the source repository. */ + /** Returns the URL of the repository.xml file for this source. */ public String getUrl() { return mUrl; } diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java index 8ab37bb29..70641fe3b 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java @@ -57,7 +57,7 @@ import java.util.Collection; */ public class UpdaterWindowImpl { - private static final int NUM_FETCH_URL_MONITOR_INC = 10; + private static final int NUM_FETCH_URL_MONITOR_INC = 100; /** Internal data shared between the window and its pages. */ private final UpdaterData mUpdaterData = new UpdaterData(); @@ -342,7 +342,7 @@ public class UpdaterWindowImpl { mTaskFactory.start("Installing Archives", new ITask() { public void run(ITaskMonitor monitor) { - monitor.setProgressMax(archives.size() * (NUM_FETCH_URL_MONITOR_INC + 3)); + monitor.setProgressMax(archives.size() * (NUM_FETCH_URL_MONITOR_INC + 10)); monitor.setDescription("Preparing to install archives"); int num_installed = 0; @@ -351,20 +351,23 @@ public class UpdaterWindowImpl { if (!archive.isCompatible()) { monitor.setResult("Skipping incompatible archive: %1$s", archive.getShortDescription()); - monitor.incProgress(3); + monitor.incProgress(NUM_FETCH_URL_MONITOR_INC + 10); continue; } File archiveFile = null; try { archiveFile = downloadArchive(archive, monitor); - monitor.incProgress(1); if (archiveFile != null) { if (installArchive(archive, archiveFile, monitor)) { num_installed++; } } - monitor.incProgress(1); + monitor.incProgress(10); + } catch (Throwable t) { + // Display anything unexpected in the monitor. + monitor.setResult("Unexpected Error: %1$s", t.getMessage()); + } finally { if (archiveFile != null) { if (!archiveFile.delete()) { @@ -387,10 +390,13 @@ public class UpdaterWindowImpl { */ private File downloadArchive(Archive archive, ITaskMonitor monitor) { + File tmpFileToDelete = null; try { - File tmpFile = File.createTempFile("sdkupload", "bin"); //$NON-NLS-1$ //$NON-NLS-2$ + File tmpFile = File.createTempFile("sdkupload", ".bin"); //$NON-NLS-1$ //$NON-NLS-2$ + tmpFileToDelete = tmpFile; - monitor.setDescription("Downloading %1$s", archive.getShortDescription()); + monitor.setDescription("Downloading %1$s", + archive.getParentPackage().getShortDescription()); String link = archive.getUrl(); if (!link.startsWith("http://") //$NON-NLS-1$ @@ -405,18 +411,30 @@ public class UpdaterWindowImpl { return null; } - String base = src.getUrl(); - if (!base.endsWith("/") && !link.startsWith("/")) { //$NON-NLS-1$ //$NON-NLS-2$ - base += "/"; //$NON-NLS-1$ - } + // take the URL to the repository.xml and remove the last component + // to get the base + String repoXml = src.getUrl(); + int pos = repoXml.lastIndexOf('/'); + String base = repoXml.substring(0, pos + 1); link = base + link; } - fetchUrl(tmpFile, archive, link, monitor); + if (fetchUrl(tmpFile, archive, link, monitor)) { + // Fetching was successful, don't delete the temp file here! + tmpFileToDelete = null; + return tmpFile; + } } catch (IOException e) { monitor.setResult(e.getMessage()); + + } finally { + if (tmpFileToDelete != null) { + if (!tmpFileToDelete.delete()) { + tmpFileToDelete.deleteOnExit(); + } + } } return null; } @@ -481,7 +499,7 @@ public class UpdaterWindowImpl { String hex = "0123456789abcdef"; //$NON-NLS-1$ char[] hexDigest = new char[n * 2]; for (int i = 0; i < n; i++) { - byte b = digest[i]; + int b = digest[i] & 0x0FF; hexDigest[i*2 + 0] = hex.charAt(b >>> 4); hexDigest[i*2 + 1] = hex.charAt(b & 0x0f); }