// 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