Merge change 21463 into donut

* changes:
  BUG 1922588: SDK Updater, Needs better license display
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
index 3c7b8c6..b28019f 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
@@ -196,9 +196,9 @@
     /** Returns a long description for an {@link IDescription}. */

     @Override

     public String getLongDescription() {

-        return String.format("%1$s.\n%2$s",

+        return String.format("%1$s,\nRevision %2$d.",

                 getShortDescription(),

-                super.getLongDescription());

+                getRevision());

     }

 

     /**

diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
index 3bd731b..75879b8 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
@@ -113,9 +113,9 @@
     /** Returns a long description for an {@link IDescription}. */

     @Override

     public String getLongDescription() {

-        return String.format("%1$s.\n%2$s",

+        return String.format("%1$s,\nRevision %2$d.",

                 getShortDescription(),

-                super.getLongDescription());

+                getRevision());

     }

 

     /**

diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java
index f11523d..74e1c59 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java
@@ -192,8 +192,7 @@
             s += String.format(" (min tools rev.: %1$d)", mMinToolsRevision);

         }

 

-        s += ".\n";

-        s += super.getLongDescription();

+        s += ".";

 

         return s;

     }

diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
index ca78b0b..23ec892 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
@@ -44,7 +44,11 @@
     }

 

     /**

-     * Returns the packages found by the last call to {@link #parseSdk(String, SdkManager, ISdkLog)}.

+     * Returns the packages found by the last call to

+     * {@link #parseSdk(String, SdkManager, ISdkLog)}.

+     * <p/>

+     * This returns initially returns null.

+     * Once the parseSdk() method has been called, this returns a possibly empty but non-null array.

      */

     public Package[] getPackages() {

         return mPackages;

diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
index 5afe73c..69d526b 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
@@ -336,8 +336,11 @@
         if (s != null) {

             sb.append(s);

         }

+        if (sb.length() > 0) {

+            sb.append("\n");

+        }

 

-        sb.append(String.format("\nRevision %1$d", getRevision()));

+        sb.append(String.format("Revision %1$d", getRevision()));

 

         s = getDescUrl();

         if (s != null && s.length() > 0) {

diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
index 1c5790d..e95656a 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
@@ -160,9 +160,7 @@
     /** Returns a long description for an {@link IDescription}. */

     @Override

     public String getLongDescription() {

-        return String.format("%1$s.\n%2$s",

-                getShortDescription(),

-                super.getLongDescription());

+        return getShortDescription() + ".";

     }

 

     /**

diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java
index bb17874..ee13379 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java
@@ -76,9 +76,7 @@
     /** Returns a long description for an {@link IDescription}. */

     @Override

     public String getLongDescription() {

-        return String.format("Android SDK Tools, revision %1$d.\n%2$s",

-                getRevision(),

-                super.getLongDescription());

+        return getShortDescription() + ".";

     }

 

     /**

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 636b9ab..8f5c4d2 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
@@ -117,26 +117,31 @@
         mDescriptionLabel.setText("Line1\nLine2\nLine3");

 

         mAddSiteButton = new Button(parent, SWT.NONE);

+        mAddSiteButton.setText("Add Site...");

+        mAddSiteButton.setToolTipText("Allows you to enter a new user external site. " +

+                "Such site can only contribute add-ons and extra packages.");

         mAddSiteButton.addSelectionListener(new SelectionAdapter() {

             @Override

             public void widgetSelected(SelectionEvent e) {

                 onAddSiteSelected(); //$hide$

             }

         });

-        mAddSiteButton.setText("Add Site...");

 

         mDeleteSiteButton = new Button(parent, SWT.NONE);

+        mDeleteSiteButton.setText("Delete Site...");

+        mDeleteSiteButton.setToolTipText("Allows you to remove an external site. " +

+                "Built-in sites cannot be removed.");

         mDeleteSiteButton.addSelectionListener(new SelectionAdapter() {

             @Override

             public void widgetSelected(SelectionEvent e) {

                 onRemoveSiteSelected(); //$hide$

             }

         });

-        mDeleteSiteButton.setText("Delete Site...");

 

         mUpdateOnlyCheckBox = new Button(parent, SWT.CHECK);

         mUpdateOnlyCheckBox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));

         mUpdateOnlyCheckBox.setText("Display updates only");

+        mUpdateOnlyCheckBox.setToolTipText("When selected, only compatible update packages are shown in the list above.");

         mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());

         mUpdateOnlyCheckBox.addSelectionListener(new SelectionAdapter() {

             @Override

@@ -146,22 +151,25 @@
         });

 

         mRefreshButton = new Button(parent, SWT.NONE);

+        mRefreshButton.setText("Refresh");

+        mRefreshButton.setToolTipText("Refreshes the list of packages from open sites.");

         mRefreshButton.addSelectionListener(new SelectionAdapter() {

             @Override

             public void widgetSelected(SelectionEvent e) {

                 onRefreshSelected(); //$hide$

             }

         });

-        mRefreshButton.setText("Refresh");

 

         mInstallSelectedButton = new Button(parent, SWT.NONE);

+        mInstallSelectedButton.setText("Install Selected");

+        mInstallSelectedButton.setToolTipText("Allows you to review all selected packages " +

+                "and install them.");

         mInstallSelectedButton.addSelectionListener(new SelectionAdapter() {

             @Override

             public void widgetSelected(SelectionEvent e) {

                 onInstallSelectedArchives();  //$hide$

             }

         });

-        mInstallSelectedButton.setText("Install Selected");

     }

 

     @Override

@@ -275,7 +283,9 @@
     }

 

     private void onShowUpdateOnly() {

-        mUpdaterData.getSettingsController().setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());

+        SettingsController controller = mUpdaterData.getSettingsController();

+        controller.setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());

+        controller.saveSettings();

         mTreeViewerSources.refresh();

     }

 

@@ -405,6 +415,9 @@
         mDeleteSiteButton.setEnabled(hasSelectedUserSource);

         mRefreshButton.setEnabled(true);

         mInstallSelectedButton.setEnabled(hasCheckedArchive);

+

+        // set value on the show only update checkbox

+        mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());

     }

 

     // End of hiding from SWT Designer

diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java
index 94f68fb..d7d3a90 100755
--- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java
+++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java
Binary files differ
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 486095c..a605e3d 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
@@ -366,7 +366,7 @@
 

     /**

      * Tries to update all the *existing* local packages.

-     * This first refreshes all sources, then compares the available remote packages when

+     * This first refreshes all sources, then compares the available remote packages with

      * the current local ones and suggest updates to be done to the user. Finally all

      * selected updates are installed.

      *

@@ -386,13 +386,13 @@
             // selected archives. If they do not match an update, list them anyway

             // except they map themselves to null (no "old" archive)

             for (Archive a : selectedArchives) {

-                if (!updates.containsValue(a)) {

+                if (!updates.containsKey(a)) {

                     updates.put(a, null);

                 }

             }

         }

 

-        UpdateChooserDialog dialog = new UpdateChooserDialog(this, updates);

+        UpdateChooserDialog dialog = new UpdateChooserDialog(getWindowShell(), this, updates);

         dialog.open();

 

         Collection<Archive> result = dialog.getResult();

@@ -444,9 +444,9 @@
         // Map [remote archive => local archive] of suitable update candidates

         Map<Archive, Archive> result = new HashMap<Archive, Archive>();

 

-        // First go thru all sources and make a local list of all available archives

+        // First go thru all sources and make a list of all available remote archives

         // sorted by package class.

-        HashMap<Class<? extends Package>, ArrayList<Archive>> availPkgs =

+        HashMap<Class<? extends Package>, ArrayList<Archive>> availablePkgs =

             new HashMap<Class<? extends Package>, ArrayList<Archive>>();

 

         if (selectedArchives != null) {

@@ -457,9 +457,9 @@
                 if (a.isCompatible()) {

                     Class<? extends Package> clazz = a.getParentPackage().getClass();

 

-                    ArrayList<Archive> list = availPkgs.get(clazz);

+                    ArrayList<Archive> list = availablePkgs.get(clazz);

                     if (list == null) {

-                        availPkgs.put(clazz, list = new ArrayList<Archive>());

+                        availablePkgs.put(clazz, list = new ArrayList<Archive>());

                     }

 

                     list.add(a);

@@ -476,9 +476,9 @@
                     for (Package remotePkg : remotePkgs) {

                         Class<? extends Package> clazz = remotePkg.getClass();

 

-                        ArrayList<Archive> list = availPkgs.get(clazz);

+                        ArrayList<Archive> list = availablePkgs.get(clazz);

                         if (list == null) {

-                            availPkgs.put(clazz, list = new ArrayList<Archive>());

+                            availablePkgs.put(clazz, list = new ArrayList<Archive>());

                         }

 

                         for (Archive a : remotePkg.getArchives()) {

@@ -500,7 +500,7 @@
 

         for (Package localPkg : localPkgs) {

             // get the available archive list for this package type

-            ArrayList<Archive> list = availPkgs.get(localPkg.getClass());

+            ArrayList<Archive> list = availablePkgs.get(localPkg.getClass());

 

             // if this list is empty, we'll never find anything that matches

             if (list == null || list.size() == 0) {

@@ -511,7 +511,7 @@
             Archive[] localArchives = localPkg.getArchives();

             if (localArchives != null && localArchives.length > 0) {

                 Archive localArchive = localArchives[0];

-                // only consider archive compatible with the current platform

+                // only consider archives compatible with the current platform

                 if (localArchive != null && localArchive.isCompatible()) {

 

                     // We checked all this archive stuff because that's what eventually gets