diff --git a/src/org/lineageos/updater/misc/BuildInfoUtils.java b/src/org/lineageos/updater/misc/BuildInfoUtils.java index 6a647faf2517460c8cd0084a87e285dfddb68b1d..c01e26cae7e0a2f9ac92888d083155703c053a50 100644 --- a/src/org/lineageos/updater/misc/BuildInfoUtils.java +++ b/src/org/lineageos/updater/misc/BuildInfoUtils.java @@ -33,4 +33,8 @@ public final class BuildInfoUtils { public static String getDisplayVersion() { return SystemProperties.get(Constants.PROP_BUILD_DISPLAY_VERSION); } + + public static String getReleaseVersion() { + return SystemProperties.get(Constants.PROP_BUILD_RELEASE_VERSION); + } } diff --git a/src/org/lineageos/updater/misc/Constants.java b/src/org/lineageos/updater/misc/Constants.java index 6ba705c7f6c691a653b55d31d1039236d1be70bc..69e759c47ee4d4747a539150f1f89ce580b5c356 100644 --- a/src/org/lineageos/updater/misc/Constants.java +++ b/src/org/lineageos/updater/misc/Constants.java @@ -42,6 +42,7 @@ public final class Constants { public static final String PROP_BUILD_DATE = "ro.build.date.utc"; public static final String PROP_BUILD_VERSION = "ro.lineage.build.version"; public static final String PROP_BUILD_DISPLAY_VERSION = "ro.lineage.display.version"; + public static final String PROP_BUILD_RELEASE_VERSION = "ro.build.version.release"; public static final String PROP_BUILD_VERSION_INCREMENTAL = "ro.build.version.incremental"; public static final String PROP_DEVICE = "ro.lineage.device"; public static final String PROP_NEXT_DEVICE = "ro.updater.next_device"; diff --git a/src/org/lineageos/updater/misc/Utils.java b/src/org/lineageos/updater/misc/Utils.java index d8022ac83cdaca60237cf556a5afdaea0721b446..6cd7a60d0e3249c2d81e6a96cf5d073e0394e61a 100644 --- a/src/org/lineageos/updater/misc/Utils.java +++ b/src/org/lineageos/updater/misc/Utils.java @@ -94,6 +94,7 @@ public class Utils { update.setDownloadUrl(object.getString("url")); update.setVersion(object.getString("version")); update.setDisplayVersion(object.getString("display_version")); + update.setReleaseVersion(object.getString("android_version")); return update; } @@ -101,12 +102,14 @@ public class Utils { int[] updateVersionParts = parseSemVer(update.getVersion()); int updateMajorVersion = updateVersionParts[0]; int updateMinorVersion = updateVersionParts[1]; - Log.d(TAG, "Update : Major "+updateMajorVersion +" Minor "+ updateMinorVersion ); + int updateMaintenanceVersion = updateVersionParts[2]; + Log.d(TAG, "Update : Major "+updateMajorVersion +" Minor "+ updateMinorVersion +" Maintenance " + updateMaintenanceVersion); int[] deviceVersionParts = parseSemVer(SystemProperties.get(Constants.PROP_BUILD_VERSION)); int deviceMajorVersion = deviceVersionParts[0]; int deviceMinorVersion = deviceVersionParts[1]; - Log.d(TAG, "Device : Major "+ deviceMajorVersion +" Minor "+ deviceMinorVersion ); + int deviceMaintenanceVersion = deviceVersionParts[2]; + Log.d(TAG, "Device : Major "+ deviceMajorVersion +" Minor "+ deviceMinorVersion + " Maintenance " + deviceMaintenanceVersion); if (!SystemProperties.getBoolean(Constants.PROP_UPDATER_ALLOW_DOWNGRADING, false) && @@ -118,6 +121,10 @@ public class Utils { Log.d(TAG, update.getName() + " has type " + update.getType()); return false; } + if (!update.getReleaseVersion().equals(SystemProperties.get(Constants.PROP_BUILD_RELEASE_VERSION))) { + Log.d(TAG, update.getName() + " android_version :" + update.getReleaseVersion()); + return false; + } if(updateMajorVersion > deviceMajorVersion){ Log.d(TAG, update.getName() + " is Newer to current Major version"); return true; @@ -126,10 +133,18 @@ public class Utils { Log.d(TAG, update.getName() + " is Older to current Major version"); return false; } + if(updateMinorVersion > deviceMinorVersion){ + Log.d(TAG, update.getName() + " is Newer to current Minor version"); + return true; + } if(updateMinorVersion < deviceMinorVersion){ Log.d(TAG, update.getName() + " is Older to current Minor version"); return false; } + if(updateMaintenanceVersion < deviceMaintenanceVersion){ + Log.d(TAG, update.getName() + " is Older to current Maintenance version"); + return false; + } return true; } @@ -138,7 +153,12 @@ public class Utils { String[] versionParts = versionCode.split(Pattern.quote(".")); int major = Integer.parseInt(versionParts[0]); int minor = Integer.parseInt(versionParts[1]); - return new int[]{ major, minor }; + int maintenance = 0; + if (versionParts.length == 3 ){ + maintenance = Integer.parseInt(versionParts[2]); + return new int[]{ major, minor ,maintenance}; + } + return new int[]{ major, minor ,maintenance}; } public static boolean canInstall(UpdateBaseInfo update) { diff --git a/src/org/lineageos/updater/model/UpdateBase.java b/src/org/lineageos/updater/model/UpdateBase.java index cfa2027ed82bec55334483be351c1447e195a00b..f6a8c27464e18613e40a8afc30769eb96e37f404 100644 --- a/src/org/lineageos/updater/model/UpdateBase.java +++ b/src/org/lineageos/updater/model/UpdateBase.java @@ -24,6 +24,7 @@ public class UpdateBase implements UpdateBaseInfo { private String mType; private String mVersion; private String mDisplayVersion; + private String mReleaseVersion; private long mFileSize; public UpdateBase() { @@ -37,6 +38,7 @@ public class UpdateBase implements UpdateBaseInfo { mType = update.getType(); mVersion = update.getVersion(); mDisplayVersion = update.getDisplayVersion(); + mReleaseVersion = update.getReleaseVersion(); mFileSize = update.getFileSize(); } @@ -94,6 +96,15 @@ public class UpdateBase implements UpdateBaseInfo { mDisplayVersion = displayVersion; } + @Override + public String getReleaseVersion() { + return mReleaseVersion; + } + + public void setReleaseVersion(String releaseVersion) { + mReleaseVersion = releaseVersion; + } + @Override public String getDownloadUrl() { return mDownloadUrl; diff --git a/src/org/lineageos/updater/model/UpdateBaseInfo.java b/src/org/lineageos/updater/model/UpdateBaseInfo.java index 2921e96fc57c93c510348eb301abdc961ca3bae9..813af0964c08d1675f1a0f84493cc6ec91b18793 100644 --- a/src/org/lineageos/updater/model/UpdateBaseInfo.java +++ b/src/org/lineageos/updater/model/UpdateBaseInfo.java @@ -28,6 +28,8 @@ public interface UpdateBaseInfo { String getDisplayVersion(); + String getReleaseVersion(); + String getDownloadUrl(); long getFileSize();