Loading src/org/lineageos/updater/misc/Utils.java +0 −80 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.BatteryManager; import android.os.Build; import android.os.Environment; import android.os.StatFs; import android.os.SystemProperties; Loading @@ -53,18 +52,13 @@ import org.lineageos.updater.model.UpdateInfo; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; 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; Loading Loading @@ -189,84 +183,10 @@ public class Utils { update.getTimestamp() > SystemProperties.getLong(Constants.PROP_BUILD_DATE, 0)); } 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(); } private static boolean processJsonFile(File inputJsonFile) throws IOException, JSONException { StringBuilder jsonBuilder = new StringBuilder(); try (BufferedReader br = new BufferedReader(new FileReader(inputJsonFile))) { for (String line; (line = br.readLine()) != null;) { jsonBuilder.append(line); } } JSONObject inputJsonObject = new JSONObject(jsonBuilder.toString()); JSONArray responseArray = inputJsonObject.getJSONArray("response"); Map<String, JSONObject> entriesMap = new HashMap<>(); int deviceAndroidVersion = parseAndroidVersion(Build.VERSION.RELEASE); for (int i = 0; i < responseArray.length(); i++) { JSONObject entry = responseArray.getJSONObject(i); String androidVersion = entry.getString("android_version"); long datetime = entry.getLong("datetime"); // Allow the latest update for current android. if (parseAndroidVersion(androidVersion) == deviceAndroidVersion) { if (!entriesMap.containsKey(androidVersion) || datetime > Objects.requireNonNull( entriesMap.get(androidVersion)).getLong("datetime")) { entriesMap.put(androidVersion, entry); } else { Log.d(TAG, "Update : Skipping " + entry.getString("filename") + " since a newer build is available"); } // Allow upgrade from next major release only. Allow to install initial build // for that major release and not the latest release. } else if (parseAndroidVersion(androidVersion) == deviceAndroidVersion + 1) { if (!entriesMap.containsKey(androidVersion) || (((Build.TIME / 1000) < datetime) && (datetime < Objects.requireNonNull(entriesMap.get(androidVersion) ).getLong("datetime")))) { entriesMap.put(androidVersion, entry); } else { Log.d(TAG, "Update : Skipping " + entry.getString("filename") + " since latest build is not preferred for upgrade"); } // Ignore if the device has an update available by skipping one major update. // Allow it only after installing one major android. } else { Log.d(TAG, "Update : Skipping " + entry.getString("filename") + " since the upgrade is unsupported from this android version"); } } JSONArray modifiedResponseArray = new JSONArray(); for (JSONObject entry : entriesMap.values()) { modifiedResponseArray.put(entry); } inputJsonObject.put("response", modifiedResponseArray); // Write the modified JSON object back to the input JSON file FileWriter writer = new FileWriter(inputJsonFile); writer.write(inputJsonObject.toString()); writer.close(); return true; } public static List<UpdateInfo> parseJson(File file, boolean compatibleOnly) throws IOException, JSONException { List<UpdateInfo> updates = new ArrayList<>(); if (processJsonFile(file)) { Log.d(TAG, "Ignored incompatible updates"); } String json = ""; try (BufferedReader br = new BufferedReader(new FileReader(file))) { for (String line; (line = br.readLine()) != null;) { Loading Loading
src/org/lineageos/updater/misc/Utils.java +0 −80 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.BatteryManager; import android.os.Build; import android.os.Environment; import android.os.StatFs; import android.os.SystemProperties; Loading @@ -53,18 +52,13 @@ import org.lineageos.updater.model.UpdateInfo; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; 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; Loading Loading @@ -189,84 +183,10 @@ public class Utils { update.getTimestamp() > SystemProperties.getLong(Constants.PROP_BUILD_DATE, 0)); } 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(); } private static boolean processJsonFile(File inputJsonFile) throws IOException, JSONException { StringBuilder jsonBuilder = new StringBuilder(); try (BufferedReader br = new BufferedReader(new FileReader(inputJsonFile))) { for (String line; (line = br.readLine()) != null;) { jsonBuilder.append(line); } } JSONObject inputJsonObject = new JSONObject(jsonBuilder.toString()); JSONArray responseArray = inputJsonObject.getJSONArray("response"); Map<String, JSONObject> entriesMap = new HashMap<>(); int deviceAndroidVersion = parseAndroidVersion(Build.VERSION.RELEASE); for (int i = 0; i < responseArray.length(); i++) { JSONObject entry = responseArray.getJSONObject(i); String androidVersion = entry.getString("android_version"); long datetime = entry.getLong("datetime"); // Allow the latest update for current android. if (parseAndroidVersion(androidVersion) == deviceAndroidVersion) { if (!entriesMap.containsKey(androidVersion) || datetime > Objects.requireNonNull( entriesMap.get(androidVersion)).getLong("datetime")) { entriesMap.put(androidVersion, entry); } else { Log.d(TAG, "Update : Skipping " + entry.getString("filename") + " since a newer build is available"); } // Allow upgrade from next major release only. Allow to install initial build // for that major release and not the latest release. } else if (parseAndroidVersion(androidVersion) == deviceAndroidVersion + 1) { if (!entriesMap.containsKey(androidVersion) || (((Build.TIME / 1000) < datetime) && (datetime < Objects.requireNonNull(entriesMap.get(androidVersion) ).getLong("datetime")))) { entriesMap.put(androidVersion, entry); } else { Log.d(TAG, "Update : Skipping " + entry.getString("filename") + " since latest build is not preferred for upgrade"); } // Ignore if the device has an update available by skipping one major update. // Allow it only after installing one major android. } else { Log.d(TAG, "Update : Skipping " + entry.getString("filename") + " since the upgrade is unsupported from this android version"); } } JSONArray modifiedResponseArray = new JSONArray(); for (JSONObject entry : entriesMap.values()) { modifiedResponseArray.put(entry); } inputJsonObject.put("response", modifiedResponseArray); // Write the modified JSON object back to the input JSON file FileWriter writer = new FileWriter(inputJsonFile); writer.write(inputJsonObject.toString()); writer.close(); return true; } public static List<UpdateInfo> parseJson(File file, boolean compatibleOnly) throws IOException, JSONException { List<UpdateInfo> updates = new ArrayList<>(); if (processJsonFile(file)) { Log.d(TAG, "Ignored incompatible updates"); } String json = ""; try (BufferedReader br = new BufferedReader(new FileReader(file))) { for (String line; (line = br.readLine()) != null;) { Loading