From eecf776ac46a1eec86de5f79903bd3e7c464b0fe Mon Sep 17 00:00:00 2001 From: Raphael Date: Tue, 16 Jun 2009 16:15:31 -0700 Subject: [PATCH] SDK Updater: select specific archives in the remote page also triggers the license/install overview dialog. --- .../repository/LocalPackagesPage.java | 2 +- .../repository/RemotePackagesPage.java | 2 +- .../internal/repository/UpdaterData.java | 65 +++++++++++++------ 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalPackagesPage.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalPackagesPage.java index c8257b71c..804b05391 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalPackagesPage.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalPackagesPage.java @@ -241,7 +241,7 @@ public class LocalPackagesPage extends Composite implements ISdkListener { } private void onUpdateInstalledPackage() { - mUpdaterData.updateAll(); + mUpdaterData.updateAll(null /*selectedArchives*/); } private void onDeleteSelected() { diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java index 81498e052..88ad591f2 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java @@ -292,7 +292,7 @@ public class RemotePackagesPage extends Composite implements ISdkListener { } if (mUpdaterData != null) { - mUpdaterData.installArchives(archives); + mUpdaterData.updateAll(archives); } } diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java index 64e23ace0..a1b259410 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java @@ -263,11 +263,6 @@ class UpdaterData { final boolean forceHttp = getSettingsController().getForceHttp(); - // TODO filter the archive list to: a/ display a list of what is going to be installed, - // b/ display licenses and c/ check that the selected packages are actually upgrades - // or ask user to confirm downgrades. All this should be done in a separate class+window - // which will then call this method with the final list. - mTaskFactory.start("Installing Archives", new ITask() { public void run(ITaskMonitor monitor) { @@ -320,13 +315,17 @@ class UpdaterData { * This first refreshes all sources, then compares the available remote packages when * the current local ones and suggest updates to be done to the user. Finally all * selected updates are installed. + * + * @param selectedArchives The list of remote archive to consider for the update. + * This can be null, in which case a list of remote archive is fetched from all + * available sources. */ - public void updateAll() { - assert mTaskFactory != null; + public void updateAll(Collection selectedArchives) { + if (selectedArchives == null) { + refreshSources(true); + } - refreshSources(true); - - final Map updates = findUpdates(); + final Map updates = findUpdates(selectedArchives); UpdateChooserDialog dialog = new UpdateChooserDialog(this, updates); dialog.open(); @@ -369,8 +368,12 @@ class UpdaterData { * Return a map [remote archive => local archive] of suitable update candidates. * Returns null if there's an unexpected error. Otherwise returns a map that can be * empty but not null. + * + * @param selectedArchives The list of remote archive to consider for the update. + * This can be null, in which case a list of remote archive is fetched from all + * available sources. */ - private Map findUpdates() { + private Map findUpdates(Collection selectedArchives) { // Map [remote archive => local archive] of suitable update candidates Map result = new HashMap(); @@ -379,23 +382,43 @@ class UpdaterData { HashMap, ArrayList> availPkgs = new HashMap, ArrayList>(); - ArrayList remoteSources = getSources().getSources(); + if (selectedArchives != null) { + // Only consider the archives given - for (RepoSource remoteSrc : remoteSources) { - Package[] remotePkgs = remoteSrc.getPackages(); - if (remotePkgs != null) { - for (Package remotePkg : remotePkgs) { - Class clazz = remotePkg.getClass(); + for (Archive a : selectedArchives) { + // Only add compatible archives + if (a.isCompatible()) { + Class clazz = a.getParentPackage().getClass(); ArrayList list = availPkgs.get(clazz); if (list == null) { availPkgs.put(clazz, list = new ArrayList()); } - for (Archive a : remotePkg.getArchives()) { - // Only add compatible archives - if (a.isCompatible()) { - list.add(a); + list.add(a); + } + } + + } else { + // Get all the available archives from all loaded sources + ArrayList remoteSources = getSources().getSources(); + + for (RepoSource remoteSrc : remoteSources) { + Package[] remotePkgs = remoteSrc.getPackages(); + if (remotePkgs != null) { + for (Package remotePkg : remotePkgs) { + Class clazz = remotePkg.getClass(); + + ArrayList list = availPkgs.get(clazz); + if (list == null) { + availPkgs.put(clazz, list = new ArrayList()); + } + + for (Archive a : remotePkg.getArchives()) { + // Only add compatible archives + if (a.isCompatible()) { + list.add(a); + } } } }