From: Raphael Date: Fri, 21 Oct 2011 20:12:52 +0000 (-0700) Subject: SDK Manager: label incompatible packages. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=24bf21ec932cb962fb7b335abdc30250be2de360;p=android-x86%2Fsdk.git SDK Manager: label incompatible packages. - Clearly states that a package is not compatible. - Provides an env var to work around and install anyway: $ export ANDROID_SDK_IGNORE_COMPAT=1 $ tools/android Change-Id: I5d94fbe452c72572054b2aecb781acfe3519135c --- diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java index c33fba9ef..e3354117c 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java @@ -453,4 +453,22 @@ public final class SdkConstants { return PLATFORM_UNKNOWN; } + + /** + * Returns current platform's UI name + * + * @return one of "Windows", "Mac OS X", "Linux" or "other". + */ + public static String currentPlatformName() { + String os = System.getProperty("os.name"); //$NON-NLS-1$ + if (os.startsWith("Mac OS")) { //$NON-NLS-1$ + return "Mac OS X"; //$NON-NLS-1$ + } else if (os.startsWith("Windows")) { //$NON-NLS-1$ + return "Windows"; //$NON-NLS-1$ + } else if (os.startsWith("Linux")) { //$NON-NLS-1$ + return "Linux"; //$NON-NLS-1$ + } + + return "Other"; + } } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ArchiveInstaller.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ArchiveInstaller.java index a06a88beb..ee442e1fb 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ArchiveInstaller.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ArchiveInstaller.java @@ -46,6 +46,8 @@ import java.util.Set; */ public class ArchiveInstaller { + public static final String ENV_VAR_IGNORE_COMPAT = "ANDROID_SDK_IGNORE_COMPAT"; + public static final int NUM_MONITOR_INC = 100; /** The current {@link FileOp} to use. Never null. */ @@ -110,7 +112,10 @@ public class ArchiveInstaller { return false; } - if (!newArchive.isCompatible()) { + // In detail mode, give us a way to force install of incompatible archives. + boolean checkIsCompatible = System.getenv(ENV_VAR_IGNORE_COMPAT) == null; + + if (checkIsCompatible && !newArchive.isCompatible()) { monitor.log("Skipping incompatible archive: %1$s for %2$s", name, newArchive.getOsDescription()); diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/pkg_incompat_16.png b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/pkg_incompat_16.png new file mode 100755 index 000000000..7ef989ea9 Binary files /dev/null and b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/pkg_incompat_16.png differ 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 3c1ba8a53..00315e203 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 @@ -18,6 +18,7 @@ package com.android.sdkuilib.internal.repository.sdkman2; import com.android.sdklib.SdkConstants; import com.android.sdklib.internal.repository.Archive; +import com.android.sdklib.internal.repository.ArchiveInstaller; import com.android.sdklib.internal.repository.IDescription; import com.android.sdklib.internal.repository.ITask; import com.android.sdklib.internal.repository.ITaskMonitor; @@ -97,6 +98,7 @@ public class PackagesPage extends UpdaterPage static final String ICON_SORT_BY_SOURCE = "source_icon16.png"; //$NON-NLS-1$ static final String ICON_SORT_BY_API = "platform_pkg_16.png"; //$NON-NLS-1$ static final String ICON_PKG_NEW = "pkg_new_16.png"; //$NON-NLS-1$ + static final String ICON_PKG_INCOMPAT = "pkg_incompat_16.png"; //$NON-NLS-1$ static final String ICON_PKG_UPDATE = "pkg_update_16.png"; //$NON-NLS-1$ static final String ICON_PKG_INSTALLED = "pkg_installed_16.png"; //$NON-NLS-1$ @@ -1061,17 +1063,21 @@ public class PackagesPage extends UpdaterPage int count = 0; + // Give us a way to force install of incompatible archives. + boolean checkIsCompatible = + System.getenv(ArchiveInstaller.ENV_VAR_IGNORE_COMPAT) == null; + if (mDisplayArchives) { // In detail mode, we display archives so we can install only the // archives that are actually selected. - // Note that in this mode we allow the user to install an archive - // even if it's not "compatible" with the current platform or is - // already installed. for (Object c : checked) { if (c instanceof Archive) { Archive a = (Archive) c; if (a != null) { + if (checkIsCompatible && !a.isCompatible()) { + continue; + } count++; if (outArchives != null) { outArchives.add((Archive) c); @@ -1104,7 +1110,10 @@ public class PackagesPage extends UpdaterPage } if (p != null) { for (Archive a : p.getArchives()) { - if (a != null && a.isCompatible()) { + if (a != null) { + if (checkIsCompatible && !a.isCompatible()) { + continue; + } count++; if (outArchives != null) { outArchives.add(a); @@ -1418,7 +1427,13 @@ public class PackagesPage extends UpdaterPage return "Installed"; case NEW: - return "Not installed"; + Package p = pkg.getMainPackage(); + if (p != null && p.hasCompatibleArchive()) { + return "Not installed"; + } else { + return String.format("Not compatible with %1$s", + SdkConstants.currentPlatformName()); + } } return pkg.getState().toString(); @@ -1499,7 +1514,12 @@ public class PackagesPage extends UpdaterPage return imgFactory.getImageByName(ICON_PKG_INSTALLED); } case NEW: - return imgFactory.getImageByName(ICON_PKG_NEW); + Package p = pi.getMainPackage(); + if (p != null && p.hasCompatibleArchive()) { + return imgFactory.getImageByName(ICON_PKG_NEW); + } else { + return imgFactory.getImageByName(ICON_PKG_INCOMPAT); + } } } } diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java index 5c3a469c6..d5eb0a37a 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java @@ -19,8 +19,8 @@ package com.android.sdkuilib.internal.repository.sdkman2; import com.android.sdklib.internal.repository.Archive; import com.android.sdklib.internal.repository.IPackageVersion; import com.android.sdklib.internal.repository.Package; -import com.android.sdklib.internal.repository.Package.UpdateInfo; import com.android.sdklib.internal.repository.SdkSource; +import com.android.sdklib.internal.repository.Package.UpdateInfo; /** * A {@link PkgItem} represents one main {@link Package} combined with its state @@ -257,5 +257,4 @@ public class PkgItem implements Comparable { sb.append('>'); return sb.toString(); } - }