OSDN Git Service

Fix the update check for doc packages.
authorXavier Ducrohet <xav@android.com>
Fri, 24 Jul 2009 20:36:07 +0000 (13:36 -0700)
committerXavier Ducrohet <xav@android.com>
Fri, 24 Jul 2009 20:39:04 +0000 (13:39 -0700)
tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java

index d146842..abd42fb 100755 (executable)
@@ -140,4 +140,51 @@ public class DocPackage extends Package {
         // only one doc package so any doc package is the same item.\r
         return pkg instanceof DocPackage;\r
     }\r
+\r
+    /**\r
+     * {@inheritDoc}\r
+     *\r
+     * The comparison between doc packages is a bit more complex so we override the default\r
+     * implementation.\r
+     * <p/>\r
+     * Docs are upgrade if they have a higher api, or a similar api but a higher revision.\r
+     * <p/>\r
+     * What makes this more complex is handling codename.\r
+     */\r
+    @Override\r
+    public UpdateInfo canBeUpdatedBy(Package replacementPackage) {\r
+        if (replacementPackage == null) {\r
+            return UpdateInfo.INCOMPATIBLE;\r
+        }\r
+\r
+        // check they are the same item.\r
+        if (sameItemAs(replacementPackage) == false) {\r
+            return UpdateInfo.INCOMPATIBLE;\r
+        }\r
+\r
+        DocPackage replacementDoc = (DocPackage)replacementPackage;\r
+\r
+        AndroidVersion replacementVersion = replacementDoc.getVersion();\r
+\r
+        // the new doc is an update if the api level is higher\r
+        if (replacementVersion.getApiLevel() > mVersion.getApiLevel()) {\r
+            return UpdateInfo.UPDATE;\r
+        }\r
+\r
+        // if it's the exactly same (including codename), we check the revision\r
+        if (replacementVersion.equals(mVersion) &&\r
+                replacementPackage.getRevision() > this.getRevision()) {\r
+            return UpdateInfo.UPDATE;\r
+        }\r
+\r
+        // else we check if they have the same api level and the new one is a preview, in which\r
+        // case it's also an update (since preview have the api level of the _previous_ version.\r
+        if (replacementVersion.getApiLevel() == mVersion.getApiLevel() &&\r
+                replacementVersion.isPreview()) {\r
+            return UpdateInfo.UPDATE;\r
+        }\r
+\r
+        // not an upgrade but not incompatible either.\r
+        return UpdateInfo.NOT_UPDATE;\r
+    }\r
 }\r
index 369305a..1fcd6b1 100755 (executable)
@@ -330,7 +330,7 @@ public abstract class Package implements IDescription {
      *\r
      * @see #sameItemAs(Package)\r
      */\r
-    public final UpdateInfo canBeUpdatedBy(Package replacementPackage) {\r
+    public UpdateInfo canBeUpdatedBy(Package replacementPackage) {\r
         if (replacementPackage == null) {\r
             return UpdateInfo.INCOMPATIBLE;\r
         }\r