From: Raphael Date: Mon, 17 Aug 2009 04:14:05 +0000 (-0700) Subject: BUG 1922588: SDK Updater, Needs better license display X-Git-Tag: android-x86-2.2~251^2~172^2~22^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fe02f245d9cf225e5df9a2a869c251cab395feaa;p=android-x86%2Fsdk.git BUG 1922588: SDK Updater, Needs better license display --- diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java index 3c7b8c68e..b28019fab 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java @@ -196,9 +196,9 @@ public class AddonPackage extends Package { /** 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/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java index 3bd731b0a..75879b84d 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java @@ -113,9 +113,9 @@ public class DocPackage extends Package { /** 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/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java index f11523de6..74e1c5933 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java @@ -192,8 +192,7 @@ public class ExtraPackage extends Package { s += String.format(" (min tools rev.: %1$d)", mMinToolsRevision); } - s += ".\n"; - s += super.getLongDescription(); + s += "."; return s; } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java index ca78b0b32..23ec8920b 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java @@ -44,7 +44,11 @@ public class LocalSdkParser { } /** - * 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)}. + *

+ * 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/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java index 5afe73cd1..69d526b1d 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java @@ -336,8 +336,11 @@ public abstract class Package implements IDescription { 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/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java index 1c5790d35..e95656a21 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java @@ -160,9 +160,7 @@ public class PlatformPackage extends Package { /** 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/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java index bb178747f..ee133793e 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java @@ -76,9 +76,7 @@ public class ToolPackage extends Package { /** 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/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java index 636b9abe9..8f5c4d2b5 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java @@ -117,26 +117,31 @@ public class RemotePackagesPage extends Composite implements ISdkListener { 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 @@ public class RemotePackagesPage extends Composite implements ISdkListener { }); 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 @@ public class RemotePackagesPage extends Composite implements ISdkListener { } private void onShowUpdateOnly() { - mUpdaterData.getSettingsController().setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection()); + SettingsController controller = mUpdaterData.getSettingsController(); + controller.setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection()); + controller.saveSettings(); mTreeViewerSources.refresh(); } @@ -405,6 +415,9 @@ public class RemotePackagesPage extends Composite implements ISdkListener { 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/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java index 94f68fb10..d7d3a9024 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java @@ -28,6 +28,8 @@ import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.custom.StyleRange; +import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.SelectionAdapter; @@ -48,7 +50,6 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.Text; import java.util.ArrayList; import java.util.Collection; @@ -88,7 +89,7 @@ final class UpdateChooserDialog extends Dialog { private TableViewer mTableViewPackage; private Table mTablePackage; private TableColumn mTableColum; - private Text mPackageText; + private StyledText mPackageText; private Button mLicenseRadioAccept; private Button mLicenseRadioReject; private Button mLicenseRadioAcceptAll; @@ -99,11 +100,15 @@ final class UpdateChooserDialog extends Dialog { /** * Create the dialog. + * @param parentShell The shell to use, typically updaterData.getWindowShell() * @param updaterData The updater data * @param newToOldUpdates The map [new archive => old archive] of potential updates */ - public UpdateChooserDialog(UpdaterData updaterData, Map newToOldUpdates) { - super(updaterData.getWindowShell(), SWT.APPLICATION_MODAL); + public UpdateChooserDialog(Shell parentShell, + UpdaterData updaterData, + Map newToOldUpdates) { + super(parentShell, + SWT.APPLICATION_MODAL); mUpdaterData = updaterData; mNewToOldArchiveMap = new TreeMap(new Comparator() { @@ -207,13 +212,13 @@ final class UpdateChooserDialog extends Dialog { mPackageTextGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1)); mPackageTextGroup.setLayout(new GridLayout(1, false/*makeColumnsEqual*/)); - mPackageText = new Text(mPackageTextGroup, - SWT.MULTI | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL); + mPackageText = new StyledText(mPackageTextGroup, SWT.MULTI | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL); + mPackageText.setBackground( + getParent().getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); mPackageText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); mLicenseRadioAccept = new Button(mPackageRootComposite, SWT.RADIO); mLicenseRadioAccept.setText("Accept"); - mLicenseRadioAccept.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); mLicenseRadioAccept.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @@ -223,7 +228,6 @@ final class UpdateChooserDialog extends Dialog { mLicenseRadioReject = new Button(mPackageRootComposite, SWT.RADIO); mLicenseRadioReject.setText("Reject"); - mLicenseRadioReject.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); mLicenseRadioReject.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @@ -236,8 +240,6 @@ final class UpdateChooserDialog extends Dialog { mLicenseRadioAcceptAll = new Button(mPackageRootComposite, SWT.RADIO); mLicenseRadioAcceptAll.setText("Accept All"); - mLicenseRadioAcceptAll.setLayoutData( - new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); mLicenseRadioAcceptAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @@ -317,7 +319,6 @@ final class UpdateChooserDialog extends Dialog { onPackageSelected(); } - /** * Creates the icon of the window shell. */ @@ -445,27 +446,46 @@ final class UpdateChooserDialog extends Dialog { return; } - StringBuilder sb = new StringBuilder(); + mPackageText.setText(""); //$NON-NLS-1$ + + addSectionTitle("Package Description\n"); + addText(a.getParentPackage().getLongDescription(), "\n\n"); //$NON-NLS-1$ Archive aold = mNewToOldArchiveMap.get(a); if (aold != null) { - sb.append("*** Existing Package Description:\n"); - sb.append(aold.getParentPackage().getLongDescription()).append("\n\n"); + addText(String.format("This update will replace revision %1$s with revision %2$s.\n\n", + aold.getParentPackage().getRevision(), + a.getParentPackage().getRevision())); } - sb.append("*** New Package Description:\n"); - sb.append(a.getParentPackage().getLongDescription()).append("\n\n"); - sb.append("\n*** Archive Description:\n"); - sb.append(a.getLongDescription()).append("\n"); + addSectionTitle("Archive Description\n"); + addText(a.getLongDescription(), "\n\n"); //$NON-NLS-1$ String license = a.getParentPackage().getLicense(); if (license != null) { - sb.append("\n*** Package License:\n"); - sb.append(license).append("\n"); + addSectionTitle("License\n"); + addText(license.trim(), "\n"); //$NON-NLS-1$ + } + } + + private void addText(String...string) { + for (String s : string) { + mPackageText.append(s); } + } - mPackageText.setText(sb.toString()); + private void addSectionTitle(String string) { + String s = mPackageText.getText(); + int start = (s == null ? 0 : s.length()); + mPackageText.append(string); + + StyleRange sr = new StyleRange(); + sr.start = start; + sr.length = string.length(); + sr.fontStyle = SWT.BOLD; + sr.underline = true; + mPackageText.setStyleRange(sr); } private void updateLicenceRadios(Archive a) { diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java index 486095ca7..a605e3d73 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java @@ -366,7 +366,7 @@ class UpdaterData { /** * 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 @@ class UpdaterData { // 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 result = dialog.getResult(); @@ -444,9 +444,9 @@ class UpdaterData { // Map [remote archive => local archive] of suitable update candidates Map result = new HashMap(); - // 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, ArrayList> availPkgs = + HashMap, ArrayList> availablePkgs = new HashMap, ArrayList>(); if (selectedArchives != null) { @@ -457,9 +457,9 @@ class UpdaterData { if (a.isCompatible()) { Class clazz = a.getParentPackage().getClass(); - ArrayList list = availPkgs.get(clazz); + ArrayList list = availablePkgs.get(clazz); if (list == null) { - availPkgs.put(clazz, list = new ArrayList()); + availablePkgs.put(clazz, list = new ArrayList()); } list.add(a); @@ -476,9 +476,9 @@ class UpdaterData { for (Package remotePkg : remotePkgs) { Class clazz = remotePkg.getClass(); - ArrayList list = availPkgs.get(clazz); + ArrayList list = availablePkgs.get(clazz); if (list == null) { - availPkgs.put(clazz, list = new ArrayList()); + availablePkgs.put(clazz, list = new ArrayList()); } for (Archive a : remotePkg.getArchives()) { @@ -500,7 +500,7 @@ class UpdaterData { for (Package localPkg : localPkgs) { // get the available archive list for this package type - ArrayList list = availPkgs.get(localPkg.getClass()); + ArrayList 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 @@ class UpdaterData { 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