diff options
author | Raphael Moll <ralf@android.com> | 2011-08-05 10:50:29 -0700 |
---|---|---|
committer | Raphael Moll <ralf@android.com> | 2011-08-05 10:54:35 -0700 |
commit | 5ef93c336ae68b70689970209ccd7ab67a21a752 (patch) | |
tree | 6ada4f4863b3654eec989a8f3aba82387ea68973 /sdkmanager | |
parent | 591d6494c335b131bdbdac53418bd31a3f4a8cc4 (diff) | |
download | sdk-5ef93c336ae68b70689970209ccd7ab67a21a752.zip sdk-5ef93c336ae68b70689970209ccd7ab67a21a752.tar.gz sdk-5ef93c336ae68b70689970209ccd7ab67a21a752.tar.bz2 |
SdkMan2: Fix load when there are no remote sources.
There was a bug where the package loader would not show
all locally installed packages if it didn't find any
remote source (e.g. when there's no network).
This fixes it. Also adds a UT to cover this case.
Change-Id: I5ccfd91895cfece54f2c2cdff58040c5ae8d1e98
Diffstat (limited to 'sdkmanager')
3 files changed, 41 insertions, 5 deletions
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java index 276c999..871bf1b 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java @@ -231,11 +231,15 @@ class PackagesDiffLogic { continue; } - // Remove all items which obsolete source we have not been visited. + // Remove all *remote* items which obsolete source we have not been visited. + // This detects packages which have disappeared from a remote source during an + // update and removes from the current list. + // Locally installed item are never removed. for (Iterator<PkgItem> itemIt = cat.getItems().iterator(); itemIt.hasNext(); ) { PkgItem item = itemIt.next(); - if (!mVisitedSources.contains(item.getSource())) { + if (item.getState() == PkgState.NEW && + !mVisitedSources.contains(item.getSource())) { itemIt.remove(); hasChanged = true; } diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java index 718cf60..6450c27 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java @@ -537,9 +537,6 @@ public class PackagesPage extends UpdaterPage mDiffLogic.updateStart(); mDiffLogic.getPackageLoader().loadPackages(new ISourceLoadedCallback() { - // We'll need to refresh the tree if the tree is not display the categories - // for the current sort type. - public boolean onUpdateSource(SdkSource source, Package[] newPackages) { // This runs in a thread and must not access UI directly. final boolean changed = mDiffLogic.updateSourcePackages( diff --git a/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java b/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java index c109180..923a5fe 100755 --- a/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java +++ b/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java @@ -298,6 +298,41 @@ public class PackagesDiffLogicTest extends TestCase { getTree(m, true /*displaySortByApi*/)); } + public void testSortByApi_NoRemoteSources() { + SdkSource src1 = new SdkRepoSource("http://repo.com/url1", "repo1"); + SdkSource src2 = new SdkRepoSource("http://repo.com/url2", "repo2"); + + // We have a couple installed packages + m.updateStart(); + // local packages + assertTrue(m.updateSourcePackages(true /*sortByApi*/, null /*locals*/, new Package[] { + new MockToolPackage(src1, 10, 3), + new MockPlatformToolPackage(src1, 3), + new MockExtraPackage(src2, "carrier", "custom_rom", 1, 0), + new MockExtraPackage(src2, "android", "usb_driver", 5, 3), + })); + // and no remote sources have been loaded (e.g. because there's no network) + assertFalse(m.updateEnd(true /*sortByApi*/)); + + assertEquals( + "PkgCategoryApi <API=TOOLS, label=Tools, #items=2>\n" + + "-- <INSTALLED, pkg:Android SDK Tools, revision 10>\n" + + "-- <INSTALLED, pkg:Android SDK Platform-tools, revision 3>\n" + + "PkgCategoryApi <API=EXTRAS, label=Extras, #items=2>\n" + + "-- <INSTALLED, pkg:Android USB Driver package, revision 5>\n" + + "-- <INSTALLED, pkg:Carrier Custom Rom package, revision 1>\n", + getTree(m, true /*displaySortByApi*/)); + + assertEquals( + "PkgCategorySource <source=repo1 (repo.com), #items=2>\n" + + "-- <INSTALLED, pkg:Android SDK Tools, revision 10>\n" + + "-- <INSTALLED, pkg:Android SDK Platform-tools, revision 3>\n" + + "PkgCategorySource <source=repo2 (repo.com), #items=2>\n" + + "-- <INSTALLED, pkg:Android USB Driver package, revision 5>\n" + + "-- <INSTALLED, pkg:Carrier Custom Rom package, revision 1>\n", + getTree(m, false /*displaySortByApi*/)); + } + public void testSortByApi_CompleteUpdate() { SdkSource src1 = new SdkRepoSource("http://repo.com/url1", "repo1"); SdkSource src2 = new SdkRepoSource("http://repo.com/url2", "repo2"); |