diff --git a/src/org/lineageos/updater/misc/Utils.java b/src/org/lineageos/updater/misc/Utils.java index e81795f8c33d8d545143ff7eb3bdadb93b8befa2..4ba50d5845c64a33ffed2cc1d158f703f88c168d 100644 --- a/src/org/lineageos/updater/misc/Utils.java +++ b/src/org/lineageos/updater/misc/Utils.java @@ -61,7 +61,9 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Locale; +import java.util.Objects; import java.util.UUID; +import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -123,15 +125,27 @@ public class Utils { return update; } + public static int parseAndroidVersion(String versionString) { + // Parse android versions such as 8.1.0. + // Older updates still shows in ota requests. + Pattern pattern = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)"); + Matcher matcher = pattern.matcher(versionString); + return matcher.matches() ? Integer.parseInt(Objects.requireNonNull(matcher.group(1))) + : Float.valueOf(versionString).intValue(); + } + public static boolean isCompatible(UpdateBaseInfo update) { - if (!update.getAndroidVersion().isEmpty()) { - final int majorAndroidVersion = Integer.parseInt(update.getAndroidVersion().contains(".") ? update.getAndroidVersion().split(".")[0] : update.getAndroidVersion()); - final int majorDeviceAndroidVersion = Integer.parseInt(Build.VERSION.RELEASE.contains(".") ? Build.VERSION.RELEASE.split(".")[0] : Build.VERSION.RELEASE); - if (majorDeviceAndroidVersion > majorAndroidVersion) { - Log.d(TAG, "Update : removing " + update.getName() + " current " + majorDeviceAndroidVersion+" update " + majorAndroidVersion); - return false; + String updateAndroidVersion = update.getAndroidVersion(); + if (!updateAndroidVersion.isEmpty()) { + final int updateOSVersion = parseAndroidVersion(updateAndroidVersion); + final int deviceOSVersion = parseAndroidVersion(Build.VERSION.RELEASE); + if (deviceOSVersion > updateOSVersion) { + Log.d(TAG, "Update : Skipping " + update.getName() + " since the installed version " + + deviceOSVersion + " is newer than update " + updateOSVersion); + return false; } } + int[] updateVersionParts = parseSemVer(update.getVersion()); int updateMajorVersion = updateVersionParts[0]; int updateMinorVersion = updateVersionParts[1];