package com.hokolinks.utils.versionchecker;
import com.hokolinks.utils.log.HokoLog;
import com.hokolinks.utils.networking.async.HttpRequest;
import com.hokolinks.utils.networking.async.HttpRequestCallback;
import com.hokolinks.utils.networking.async.NetworkAsyncTask;
import org.json.JSONObject;
import java.util.regex.Pattern;
public class VersionChecker {
private static boolean requiresUpdate(String currentVersion, String githubVersion) {
String normalisedCurrentVersion = normalisedVersion(currentVersion);
String normalisedGithubVersion = normalisedVersion(githubVersion);
return normalisedCurrentVersion.compareTo(normalisedGithubVersion) < 0;
}
private static String normalisedVersion(String version) {
return normalisedVersion(version, ".", 4);
}
private static String normalisedVersion(String version, String separator, int maxWidth) {
String[] split = Pattern.compile(separator, Pattern.LITERAL).split(version);
StringBuilder stringBuilder = new StringBuilder();
for (String string : split) {
stringBuilder.append(String.format("%" + maxWidth + 's', string));
}
return stringBuilder.toString();
}
public static void checkForNewVersion(final String currentVersion, String token) {
new NetworkAsyncTask(new HttpRequest(HttpRequest.HokoNetworkOperationType.GET,
HttpRequest.getURLFromPath("version"), token, null).toRunnable(new HttpRequestCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
String version = jsonObject.optString("version");
if (version != null) {
if (requiresUpdate(currentVersion, version)) {
android.util.Log.e("HOKO", "A new version of HOKO is available, please " +
"update your gradle.properties to \"compile 'com.hokolink:hoko:" +
version + "'\"");
}
}
}
@Override
public void onFailure(Exception e) {
HokoLog.e(e);
}
})).execute();
}
}