OSDN Git Service

BUG 1922588: SDK Updater, Needs better license display
authorRaphael <raphael@google.com>
Mon, 17 Aug 2009 04:14:05 +0000 (21:14 -0700)
committerRaphael <raphael@google.com>
Mon, 17 Aug 2009 04:14:05 +0000 (21:14 -0700)
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java
sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java
sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java
sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java

index 3c7b8c6..b28019f 100755 (executable)
@@ -196,9 +196,9 @@ public class AddonPackage extends Package {
     /** Returns a long description for an {@link IDescription}. */\r
     @Override\r
     public String getLongDescription() {\r
-        return String.format("%1$s.\n%2$s",\r
+        return String.format("%1$s,\nRevision %2$d.",\r
                 getShortDescription(),\r
-                super.getLongDescription());\r
+                getRevision());\r
     }\r
 \r
     /**\r
index 3bd731b..75879b8 100755 (executable)
@@ -113,9 +113,9 @@ public class DocPackage extends Package {
     /** Returns a long description for an {@link IDescription}. */\r
     @Override\r
     public String getLongDescription() {\r
-        return String.format("%1$s.\n%2$s",\r
+        return String.format("%1$s,\nRevision %2$d.",\r
                 getShortDescription(),\r
-                super.getLongDescription());\r
+                getRevision());\r
     }\r
 \r
     /**\r
index f11523d..74e1c59 100755 (executable)
@@ -192,8 +192,7 @@ public class ExtraPackage extends Package {
             s += String.format(" (min tools rev.: %1$d)", mMinToolsRevision);\r
         }\r
 \r
-        s += ".\n";\r
-        s += super.getLongDescription();\r
+        s += ".";\r
 \r
         return s;\r
     }\r
index ca78b0b..23ec892 100755 (executable)
@@ -44,7 +44,11 @@ public class LocalSdkParser {
     }\r
 \r
     /**\r
-     * Returns the packages found by the last call to {@link #parseSdk(String, SdkManager, ISdkLog)}.\r
+     * Returns the packages found by the last call to\r
+     * {@link #parseSdk(String, SdkManager, ISdkLog)}.\r
+     * <p/>\r
+     * This returns initially returns null.\r
+     * Once the parseSdk() method has been called, this returns a possibly empty but non-null array.\r
      */\r
     public Package[] getPackages() {\r
         return mPackages;\r
index 5afe73c..69d526b 100755 (executable)
@@ -336,8 +336,11 @@ public abstract class Package implements IDescription {
         if (s != null) {\r
             sb.append(s);\r
         }\r
+        if (sb.length() > 0) {\r
+            sb.append("\n");\r
+        }\r
 \r
-        sb.append(String.format("\nRevision %1$d", getRevision()));\r
+        sb.append(String.format("Revision %1$d", getRevision()));\r
 \r
         s = getDescUrl();\r
         if (s != null && s.length() > 0) {\r
index 1c5790d..e95656a 100755 (executable)
@@ -160,9 +160,7 @@ public class PlatformPackage extends Package {
     /** Returns a long description for an {@link IDescription}. */\r
     @Override\r
     public String getLongDescription() {\r
-        return String.format("%1$s.\n%2$s",\r
-                getShortDescription(),\r
-                super.getLongDescription());\r
+        return getShortDescription() + ".";\r
     }\r
 \r
     /**\r
index bb17874..ee13379 100755 (executable)
@@ -76,9 +76,7 @@ public class ToolPackage extends Package {
     /** Returns a long description for an {@link IDescription}. */\r
     @Override\r
     public String getLongDescription() {\r
-        return String.format("Android SDK Tools, revision %1$d.\n%2$s",\r
-                getRevision(),\r
-                super.getLongDescription());\r
+        return getShortDescription() + ".";\r
     }\r
 \r
     /**\r
index 636b9ab..8f5c4d2 100755 (executable)
@@ -117,26 +117,31 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
         mDescriptionLabel.setText("Line1\nLine2\nLine3");\r
 \r
         mAddSiteButton = new Button(parent, SWT.NONE);\r
+        mAddSiteButton.setText("Add Site...");\r
+        mAddSiteButton.setToolTipText("Allows you to enter a new user external site. " +\r
+                "Such site can only contribute add-ons and extra packages.");\r
         mAddSiteButton.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
             public void widgetSelected(SelectionEvent e) {\r
                 onAddSiteSelected(); //$hide$\r
             }\r
         });\r
-        mAddSiteButton.setText("Add Site...");\r
 \r
         mDeleteSiteButton = new Button(parent, SWT.NONE);\r
+        mDeleteSiteButton.setText("Delete Site...");\r
+        mDeleteSiteButton.setToolTipText("Allows you to remove an external site. " +\r
+                "Built-in sites cannot be removed.");\r
         mDeleteSiteButton.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
             public void widgetSelected(SelectionEvent e) {\r
                 onRemoveSiteSelected(); //$hide$\r
             }\r
         });\r
-        mDeleteSiteButton.setText("Delete Site...");\r
 \r
         mUpdateOnlyCheckBox = new Button(parent, SWT.CHECK);\r
         mUpdateOnlyCheckBox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));\r
         mUpdateOnlyCheckBox.setText("Display updates only");\r
+        mUpdateOnlyCheckBox.setToolTipText("When selected, only compatible update packages are shown in the list above.");\r
         mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());\r
         mUpdateOnlyCheckBox.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
@@ -146,22 +151,25 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
         });\r
 \r
         mRefreshButton = new Button(parent, SWT.NONE);\r
+        mRefreshButton.setText("Refresh");\r
+        mRefreshButton.setToolTipText("Refreshes the list of packages from open sites.");\r
         mRefreshButton.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
             public void widgetSelected(SelectionEvent e) {\r
                 onRefreshSelected(); //$hide$\r
             }\r
         });\r
-        mRefreshButton.setText("Refresh");\r
 \r
         mInstallSelectedButton = new Button(parent, SWT.NONE);\r
+        mInstallSelectedButton.setText("Install Selected");\r
+        mInstallSelectedButton.setToolTipText("Allows you to review all selected packages " +\r
+                "and install them.");\r
         mInstallSelectedButton.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
             public void widgetSelected(SelectionEvent e) {\r
                 onInstallSelectedArchives();  //$hide$\r
             }\r
         });\r
-        mInstallSelectedButton.setText("Install Selected");\r
     }\r
 \r
     @Override\r
@@ -275,7 +283,9 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
     }\r
 \r
     private void onShowUpdateOnly() {\r
-        mUpdaterData.getSettingsController().setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());\r
+        SettingsController controller = mUpdaterData.getSettingsController();\r
+        controller.setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());\r
+        controller.saveSettings();\r
         mTreeViewerSources.refresh();\r
     }\r
 \r
@@ -405,6 +415,9 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
         mDeleteSiteButton.setEnabled(hasSelectedUserSource);\r
         mRefreshButton.setEnabled(true);\r
         mInstallSelectedButton.setEnabled(hasCheckedArchive);\r
+\r
+        // set value on the show only update checkbox\r
+        mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());\r
     }\r
 \r
     // End of hiding from SWT Designer\r
index 94f68fb..d7d3a90 100755 (executable)
@@ -28,6 +28,8 @@ import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.custom.SashForm;\r
+import org.eclipse.swt.custom.StyleRange;\r
+import org.eclipse.swt.custom.StyledText;\r
 import org.eclipse.swt.events.ControlAdapter;\r
 import org.eclipse.swt.events.ControlEvent;\r
 import org.eclipse.swt.events.SelectionAdapter;\r
@@ -48,7 +50,6 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;\r
 import org.eclipse.swt.widgets.Table;\r
 import org.eclipse.swt.widgets.TableColumn;\r
-import org.eclipse.swt.widgets.Text;\r
 \r
 import java.util.ArrayList;\r
 import java.util.Collection;\r
@@ -88,7 +89,7 @@ final class UpdateChooserDialog extends Dialog {
     private TableViewer mTableViewPackage;\r
     private Table mTablePackage;\r
     private TableColumn mTableColum;\r
-    private Text mPackageText;\r
+    private StyledText mPackageText;\r
     private Button mLicenseRadioAccept;\r
     private Button mLicenseRadioReject;\r
     private Button mLicenseRadioAcceptAll;\r
@@ -99,11 +100,15 @@ final class UpdateChooserDialog extends Dialog {
 \r
     /**\r
      * Create the dialog.\r
+     * @param parentShell The shell to use, typically updaterData.getWindowShell()\r
      * @param updaterData The updater data\r
      * @param newToOldUpdates The map [new archive => old archive] of potential updates\r
      */\r
-    public UpdateChooserDialog(UpdaterData updaterData, Map<Archive, Archive> newToOldUpdates) {\r
-        super(updaterData.getWindowShell(), SWT.APPLICATION_MODAL);\r
+    public UpdateChooserDialog(Shell parentShell,\r
+            UpdaterData updaterData,\r
+            Map<Archive, Archive> newToOldUpdates) {\r
+        super(parentShell,\r
+              SWT.APPLICATION_MODAL);\r
         mUpdaterData = updaterData;\r
 \r
         mNewToOldArchiveMap = new TreeMap<Archive, Archive>(new Comparator<Archive>() {\r
@@ -207,13 +212,13 @@ final class UpdateChooserDialog extends Dialog {
         mPackageTextGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));\r
         mPackageTextGroup.setLayout(new GridLayout(1, false/*makeColumnsEqual*/));\r
 \r
-        mPackageText = new Text(mPackageTextGroup,\r
-                SWT.MULTI | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);\r
+        mPackageText = new StyledText(mPackageTextGroup,\r                        SWT.MULTI | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);\r
+        mPackageText.setBackground(\r
+                getParent().getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));\r
         mPackageText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));\r
 \r
         mLicenseRadioAccept = new Button(mPackageRootComposite, SWT.RADIO);\r
         mLicenseRadioAccept.setText("Accept");\r
-        mLicenseRadioAccept.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));\r
         mLicenseRadioAccept.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
             public void widgetSelected(SelectionEvent e) {\r
@@ -223,7 +228,6 @@ final class UpdateChooserDialog extends Dialog {
 \r
         mLicenseRadioReject = new Button(mPackageRootComposite, SWT.RADIO);\r
         mLicenseRadioReject.setText("Reject");\r
-        mLicenseRadioReject.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));\r
         mLicenseRadioReject.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
             public void widgetSelected(SelectionEvent e) {\r
@@ -236,8 +240,6 @@ final class UpdateChooserDialog extends Dialog {
 \r
         mLicenseRadioAcceptAll = new Button(mPackageRootComposite, SWT.RADIO);\r
         mLicenseRadioAcceptAll.setText("Accept All");\r
-        mLicenseRadioAcceptAll.setLayoutData(\r
-                new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));\r
         mLicenseRadioAcceptAll.addSelectionListener(new SelectionAdapter() {\r
             @Override\r
             public void widgetSelected(SelectionEvent e) {\r
@@ -317,7 +319,6 @@ final class UpdateChooserDialog extends Dialog {
         onPackageSelected();\r
     }\r
 \r
-\r
     /**\r
      * Creates the icon of the window shell.\r
      */\r
@@ -445,27 +446,46 @@ final class UpdateChooserDialog extends Dialog {
             return;\r
         }\r
 \r
-        StringBuilder sb = new StringBuilder();\r
+        mPackageText.setText("");                                               //$NON-NLS-1$\r
+\r
+        addSectionTitle("Package Description\n");\r
+        addText(a.getParentPackage().getLongDescription(), "\n\n");             //$NON-NLS-1$\r
 \r
         Archive aold = mNewToOldArchiveMap.get(a);\r
         if (aold != null) {\r
-            sb.append("*** Existing Package Description:\n");\r
-            sb.append(aold.getParentPackage().getLongDescription()).append("\n\n");\r
+            addText(String.format("This update will replace revision %1$s with revision %2$s.\n\n",\r
+                    aold.getParentPackage().getRevision(),\r
+                    a.getParentPackage().getRevision()));\r
         }\r
 \r
-        sb.append("*** New Package Description:\n");\r
-        sb.append(a.getParentPackage().getLongDescription()).append("\n\n");\r
 \r
-        sb.append("\n*** Archive Description:\n");\r
-        sb.append(a.getLongDescription()).append("\n");\r
+        addSectionTitle("Archive Description\n");\r
+        addText(a.getLongDescription(), "\n\n");                                //$NON-NLS-1$\r
 \r
         String license = a.getParentPackage().getLicense();\r
         if (license != null) {\r
-            sb.append("\n*** Package License:\n");\r
-            sb.append(license).append("\n");\r
+            addSectionTitle("License\n");\r
+            addText(license.trim(), "\n");                                      //$NON-NLS-1$\r
+        }\r
+    }\r
+\r
+    private void addText(String...string) {\r
+        for (String s : string) {\r
+            mPackageText.append(s);\r
         }\r
+    }\r
 \r
-        mPackageText.setText(sb.toString());\r
+    private void addSectionTitle(String string) {\r
+        String s = mPackageText.getText();\r
+        int start = (s == null ? 0 : s.length());\r
+        mPackageText.append(string);\r
+\r
+        StyleRange sr = new StyleRange();\r
+        sr.start = start;\r
+        sr.length = string.length();\r
+        sr.fontStyle = SWT.BOLD;\r
+        sr.underline = true;\r
+        mPackageText.setStyleRange(sr);\r
     }\r
 \r
     private void updateLicenceRadios(Archive a) {\r
index 486095c..a605e3d 100755 (executable)
@@ -366,7 +366,7 @@ class UpdaterData {
 \r
     /**\r
      * Tries to update all the *existing* local packages.\r
-     * This first refreshes all sources, then compares the available remote packages when\r
+     * This first refreshes all sources, then compares the available remote packages with\r
      * the current local ones and suggest updates to be done to the user. Finally all\r
      * selected updates are installed.\r
      *\r
@@ -386,13 +386,13 @@ class UpdaterData {
             // selected archives. If they do not match an update, list them anyway\r
             // except they map themselves to null (no "old" archive)\r
             for (Archive a : selectedArchives) {\r
-                if (!updates.containsValue(a)) {\r
+                if (!updates.containsKey(a)) {\r
                     updates.put(a, null);\r
                 }\r
             }\r
         }\r
 \r
-        UpdateChooserDialog dialog = new UpdateChooserDialog(this, updates);\r
+        UpdateChooserDialog dialog = new UpdateChooserDialog(getWindowShell(), this, updates);\r
         dialog.open();\r
 \r
         Collection<Archive> result = dialog.getResult();\r
@@ -444,9 +444,9 @@ class UpdaterData {
         // Map [remote archive => local archive] of suitable update candidates\r
         Map<Archive, Archive> result = new HashMap<Archive, Archive>();\r
 \r
-        // First go thru all sources and make a local list of all available archives\r
+        // First go thru all sources and make a list of all available remote archives\r
         // sorted by package class.\r
-        HashMap<Class<? extends Package>, ArrayList<Archive>> availPkgs =\r
+        HashMap<Class<? extends Package>, ArrayList<Archive>> availablePkgs =\r
             new HashMap<Class<? extends Package>, ArrayList<Archive>>();\r
 \r
         if (selectedArchives != null) {\r
@@ -457,9 +457,9 @@ class UpdaterData {
                 if (a.isCompatible()) {\r
                     Class<? extends Package> clazz = a.getParentPackage().getClass();\r
 \r
-                    ArrayList<Archive> list = availPkgs.get(clazz);\r
+                    ArrayList<Archive> list = availablePkgs.get(clazz);\r
                     if (list == null) {\r
-                        availPkgs.put(clazz, list = new ArrayList<Archive>());\r
+                        availablePkgs.put(clazz, list = new ArrayList<Archive>());\r
                     }\r
 \r
                     list.add(a);\r
@@ -476,9 +476,9 @@ class UpdaterData {
                     for (Package remotePkg : remotePkgs) {\r
                         Class<? extends Package> clazz = remotePkg.getClass();\r
 \r
-                        ArrayList<Archive> list = availPkgs.get(clazz);\r
+                        ArrayList<Archive> list = availablePkgs.get(clazz);\r
                         if (list == null) {\r
-                            availPkgs.put(clazz, list = new ArrayList<Archive>());\r
+                            availablePkgs.put(clazz, list = new ArrayList<Archive>());\r
                         }\r
 \r
                         for (Archive a : remotePkg.getArchives()) {\r
@@ -500,7 +500,7 @@ class UpdaterData {
 \r
         for (Package localPkg : localPkgs) {\r
             // get the available archive list for this package type\r
-            ArrayList<Archive> list = availPkgs.get(localPkg.getClass());\r
+            ArrayList<Archive> list = availablePkgs.get(localPkg.getClass());\r
 \r
             // if this list is empty, we'll never find anything that matches\r
             if (list == null || list.size() == 0) {\r
@@ -511,7 +511,7 @@ class UpdaterData {
             Archive[] localArchives = localPkg.getArchives();\r
             if (localArchives != null && localArchives.length > 0) {\r
                 Archive localArchive = localArchives[0];\r
-                // only consider archive compatible with the current platform\r
+                // only consider archives compatible with the current platform\r
                 if (localArchive != null && localArchive.isCompatible()) {\r
 \r
                     // We checked all this archive stuff because that's what eventually gets\r