am ab5755ae: am 1a81b50b: Merge "SDK Manager: always display Build Tools previews." into idea133 automerge: 83cb2ee

* commit 'ab5755ae17c228f38ce22273ea81a9d5731682ac':
  SDK Manager: always display Build Tools previews.
diff --git a/sdkmanager/sdkuilib/src/main/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogic.java b/sdkmanager/sdkuilib/src/main/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogic.java
index 01ea803..75bf6d6 100755
--- a/sdkmanager/sdkuilib/src/main/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogic.java
+++ b/sdkmanager/sdkuilib/src/main/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogic.java
@@ -34,10 +34,10 @@
 import com.android.sdklib.internal.repository.updater.PkgItem.PkgState;
 import com.android.sdklib.repository.FullRevision;
 import com.android.sdklib.repository.FullRevision.PreviewComparison;
-import com.android.utils.SparseArray;
 import com.android.sdkuilib.internal.repository.SwtUpdaterData;
 import com.android.sdkuilib.internal.repository.ui.PackagesPageIcons;
 import com.android.utils.Pair;
+import com.android.utils.SparseArray;
 import com.google.common.collect.Maps;
 
 import java.util.ArrayList;
@@ -265,7 +265,9 @@
                             break;
                         }
                     }
-                    if (p instanceof SystemImagePackage && item.getState() == PkgState.INSTALLED) {
+                    if (p instanceof SystemImagePackage &&
+                            ((SystemImagePackage) p).isPlatform() &&
+                            item.getState() == PkgState.INSTALLED) {
                         hasSysImg = true;
                         break;
                     }
@@ -297,7 +299,9 @@
                     // No system image in the platform, try a system image package
                     for (PkgItem item : items) {
                         Package p = item.getMainPackage();
-                        if (p instanceof SystemImagePackage && item.getState() == PkgState.NEW) {
+                        if (p instanceof SystemImagePackage &&
+                                ((SystemImagePackage) p).isPlatform() &&
+                                item.getState() == PkgState.NEW) {
                             item.setChecked(true);
                         }
                     }
@@ -595,7 +599,11 @@
 
             if (!enablePreviews && newPkg.getRevision().isPreview()) {
                 // This is a preview and previews are not enabled. Ignore the package.
-                continue nextPkg;
+                // Starting with Tools 23, we explicitly allows Build-Tools RC packages to
+                // always be visible so only RCs for Tools & Platform-Tools will be hidden.
+                if (!(newPkg instanceof BuildToolPackage)) {
+                    continue nextPkg;
+                }
             }
 
             for (PkgCategory cat : cats) {
diff --git a/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogicTest.java b/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogicTest.java
index c4e3a81..1235bf6 100755
--- a/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogicTest.java
+++ b/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/core/PackagesDiffLogicTest.java
@@ -1471,19 +1471,26 @@
                 new MockToolPackage(src1, new FullRevision(4, 0, 0, 1), 3),       // Tools 4 rc1
                 new MockPlatformToolPackage(src1, new FullRevision(3, 0, 0)),     // Plat-T 3
                 new MockPlatformToolPackage(src1, new FullRevision(5, 0, 0, 1)),  // Plat-T 5 rc1
+                new MockBuildToolPackage(src1, new FullRevision(6, 0, 0)),
+                new MockBuildToolPackage(src1, new FullRevision(7, 0, 0, 1))
         });
         m.updateEnd(true /*sortByApi*/);
 
         assertEquals(
-                "PkgCategoryApi <API=TOOLS, label=Tools, #items=2>\n" +
+                "PkgCategoryApi <API=TOOLS, label=Tools, #items=3>\n" +
                 "-- <NEW, pkg:Android SDK Tools, revision 2>\n" +
                 "-- <NEW, pkg:Android SDK Platform-tools, revision 3>\n" +
+                "-- <NEW, pkg:Android SDK Build-tools, revision 6>\n" +
+                "PkgCategoryApi <API=TOOLS-PREVIEW, label=Tools (Preview Channel), #items=1>\n" +
+                "-- <NEW, pkg:Android SDK Build-tools, revision 7 rc1>\n" +
                 "PkgCategoryApi <API=EXTRAS, label=Extras, #items=0>\n",
                 getTree(m, true /*displaySortByApi*/));
         assertEquals(
-                "PkgCategorySource <source=repo1 (1.example.com), #items=2>\n" +
+                "PkgCategorySource <source=repo1 (1.example.com), #items=4>\n" +
                 "-- <NEW, pkg:Android SDK Tools, revision 2>\n" +
-                "-- <NEW, pkg:Android SDK Platform-tools, revision 3>\n",
+                "-- <NEW, pkg:Android SDK Platform-tools, revision 3>\n" +
+                "-- <NEW, pkg:Android SDK Build-tools, revision 7 rc1>\n" +
+                "-- <NEW, pkg:Android SDK Build-tools, revision 6>\n",
                 getTree(m, false /*displaySortByApi*/));
     }
 
diff --git a/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/ui/SdkManagerUpgradeTest.java b/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/ui/SdkManagerUpgradeTest.java
index bbefe25..a21dda5 100755
--- a/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/ui/SdkManagerUpgradeTest.java
+++ b/sdkmanager/sdkuilib/src/test/java/com/android/sdkuilib/internal/repository/ui/SdkManagerUpgradeTest.java
@@ -98,20 +98,20 @@
 
         actual = pageImpl.getMockTreeDisplay();
         assertEquals(
-                "[]    Tools                           |  |            |                              \n" +
-                " L_[] Android SDK Tools               |  |      1.0.1 | Update available: rev. 20.0.3\n" +
-                " L_[] Android SDK Platform-tools      |  |     17.1.2 | Update available: rev. 18    \n" +
-                " L_[] Android SDK Build-tools         |  |         18 | Not installed                \n" +
-                " L_[] Android SDK Build-tools         |  |      3.0.1 | Installed                    \n" +
-                " L_[] Android SDK Build-tools         |  |          3 | Installed                    \n" +
-                "[]    Tools (Preview Channel)         |  |            |                              \n" +
+                "[]    Tools                           |  |            |                                   \n" +
+                " L_[] Android SDK Tools               |  |      1.0.1 | Update available: rev. 20.0.3     \n" +
+                " L_[] Android SDK Platform-tools      |  |     17.1.2 | Update available: rev. 18         \n" +
+                " L_[] Android SDK Build-tools         |  |         18 | Not installed                     \n" +
+                " L_[] Android SDK Build-tools         |  |      3.0.1 | Installed                         \n" +
+                " L_[] Android SDK Build-tools         |  |          3 | Installed                         \n" +
+                "[]    Tools (Preview Channel)         |  |            |                                   \n" +
                 // Note: locally installed previews are always shown, even when enable previews is false.
-                " L_[] Android SDK Build-tools         |  | 18.3.4 rc5 | Installed                    \n" +
-                "[]    Android 0.0 (API 0)             |  |            |                              \n" +
-                " L_[] SDK Platform                    |  |          1 | Installed                    \n" +
-                " L_[] Sys-Img v0 for (Tag 1, armeabi) |  |          0 | Installed                    \n" +
-                " L_[] Sources for Android SDK         |  |          0 | Installed                    \n" +
-                "[]    Extras                          |  |            |                              ",
+                " L_[] Android SDK Build-tools         |  | 18.3.4 rc5 | Update available: rev. 18.3.4 rc15\n" +
+                "[]    Android 0.0 (API 0)             |  |            |                                   \n" +
+                " L_[] SDK Platform                    |  |          1 | Installed                         \n" +
+                " L_[] Sys-Img v0 for (Tag 1, armeabi) |  |          0 | Installed                         \n" +
+                " L_[] Sources for Android SDK         |  |          0 | Installed                         \n" +
+                "[]    Extras                          |  |            |                                   ",
                 actual);
 
         assertEquals(
@@ -139,19 +139,19 @@
 
         actual = pageImpl.getMockTreeDisplay();
         assertEquals(
-                "[]    Tools                           |  |            |                              \n" +
-                " L_[] Android SDK Tools               |  |      1.0.1 | Update available: rev. 20.0.3\n" +
-                " L_[] Android SDK Platform-tools      |  |     17.1.2 | Update available: rev. 18    \n" +
-                " L_[] Android SDK Build-tools         |  |         18 | Not installed                \n" +
-                " L_[] Android SDK Build-tools         |  |      3.0.1 | Installed                    \n" +
-                " L_[] Android SDK Build-tools         |  |          3 | Installed                    \n" +
-                "[]    Tools (Preview Channel)         |  |            |                              \n" +
-                " L_[] Android SDK Build-tools         |  | 18.3.4 rc5 | Installed                    \n" +
-                "[]    Android 0.0 (API 0)             |  |            |                              \n" +
-                " L_[] SDK Platform                    |  |          1 | Installed                    \n" +
-                " L_[] Sys-Img v0 for (Tag 1, armeabi) |  |          0 | Installed                    \n" +
-                " L_[] Sources for Android SDK         |  |          0 | Installed                    \n" +
-                "[]    Extras                          |  |            |                              ",
+                "[]    Tools                           |  |            |                                   \n" +
+                " L_[] Android SDK Tools               |  |      1.0.1 | Update available: rev. 20.0.3     \n" +
+                " L_[] Android SDK Platform-tools      |  |     17.1.2 | Update available: rev. 18         \n" +
+                " L_[] Android SDK Build-tools         |  |         18 | Not installed                     \n" +
+                " L_[] Android SDK Build-tools         |  |      3.0.1 | Installed                         \n" +
+                " L_[] Android SDK Build-tools         |  |          3 | Installed                         \n" +
+                "[]    Tools (Preview Channel)         |  |            |                                   \n" +
+                " L_[] Android SDK Build-tools         |  | 18.3.4 rc5 | Update available: rev. 18.3.4 rc15\n" +
+                "[]    Android 0.0 (API 0)             |  |            |                                   \n" +
+                " L_[] SDK Platform                    |  |          1 | Installed                         \n" +
+                " L_[] Sys-Img v0 for (Tag 1, armeabi) |  |          0 | Installed                         \n" +
+                " L_[] Sources for Android SDK         |  |          0 | Installed                         \n" +
+                "[]    Extras                          |  |            |                                   ",
                 actual);
 
         assertEquals(