package org.bbs.apklauncher;
import android.util.Log;
public class Version {
private static final String TAG = Version.class.getSimpleName();
public static String VERSION = "0.1";
public static boolean isNewer(String otherVersion){
return isNewer(VERSION, otherVersion);
}
public static boolean isSame(String rVersion, String lVersion){
return extractVersion(rVersion).equals(extractVersion(lVersion));
}
public static boolean isNewer(String rVersion, String lVersion){
return isNewerRaw(extractVersion(rVersion), extractVersion(lVersion));
}
public static boolean isNewerRaw(String rVersion, String lVersion){
boolean isNewer = false;
if (!isValid(rVersion)) {
throw new IllegalArgumentException("invalid version: " + rVersion);
} else if (!isValid(lVersion)) {
throw new IllegalArgumentException("invalid version: " + lVersion);
} else {
final String[] rV = rVersion.split("\\.");
final String[] lV = lVersion.split("\\.");
final int rL = rV.length;
final int lL = lV.length;
int i = 0;
for (; i < Math.min(rL, lL); i++) {
int r = Integer.parseInt(rV[i]);
int l = Integer.parseInt(lV[i]);
Log.d(TAG, "r: " + r + " l: " + l);
if (r > l){
isNewer = true;
break;
} else if (r < l) {
isNewer = false;
break;
}
}
if (i == Math.min(rL, lL) && rL > lL) {
isNewer = true;
}
}
return isNewer;
}
public static boolean isValid(String versionStr){
// TODO regex
// return versionStr.matches("^[\\.0-9]*&");
final int L = versionStr.length();
for (int i = 0 ; i < L ; i ++) {
char c = versionStr.charAt(i);
if (c == '.' || (c >= '0' && c <= '9')) {
} else {
return false;
}
}
return true;
}
public static String extractVersion(String versionStr){
// TODO extract by Regex
String v = versionStr.replaceAll(".*(\\d+[^a]*).*", "aa\\1bb\\2");
final int L = versionStr.length();
v = "";
boolean hit = false;
for (int i = 0 ; i < L ; i ++) {
char c = versionStr.charAt(i);
if (c == '.' || (c >= '0' && c <= '9')) {
hit = true;
v = v + c;
} else {
if (hit) {
break;
}
}
}
return v;
}
}