From 39b89423d981e01dbc831ac230990685a822d754 Mon Sep 17 00:00:00 2001 From: Ammar Githam Date: Mon, 29 Mar 2021 22:42:08 +0900 Subject: [PATCH] Handle all possible version names in update checker --- .../awais/instagrabber/utils/FlavorTown.java | 38 ++++++++++++++++--- .../instagrabber/utils/UpdateCheckCommon.java | 3 +- app/src/main/res/values/strings.xml | 1 + 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/utils/FlavorTown.java b/app/src/main/java/awais/instagrabber/utils/FlavorTown.java index 7083c694..8f06eb8b 100755 --- a/app/src/main/java/awais/instagrabber/utils/FlavorTown.java +++ b/app/src/main/java/awais/instagrabber/utils/FlavorTown.java @@ -1,12 +1,16 @@ package awais.instagrabber.utils; import android.content.Context; +import android.util.Log; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import java.util.Objects; import java.util.concurrent.ThreadLocalRandom; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import awais.instagrabber.BuildConfig; import awais.instagrabber.R; @@ -16,6 +20,7 @@ import static awais.instagrabber.utils.Utils.settingsHelper; public final class FlavorTown { private static final String TAG = "FlavorTown"; private static final UpdateChecker UPDATE_CHECKER = UpdateChecker.getInstance(); + private static final Pattern VERSION_NAME_PATTERN = Pattern.compile("v?(\\d+\\.\\d+\\.\\d+)(?:_?)(\\w*)(?:-?)(\\w*)"); private static boolean checking = false; @@ -28,21 +33,42 @@ public final class FlavorTown { if (checking) return; checking = true; AppExecutors.getInstance().networkIO().execute(() -> { - final String version = UPDATE_CHECKER.getLatestVersion(); - if (version == null) return; - if (force && version.equals(BuildConfig.VERSION_NAME)) { - Toast.makeText(context, "You're already on the latest version", Toast.LENGTH_SHORT).show(); + final String onlineVersionName = UPDATE_CHECKER.getLatestVersion(); + if (onlineVersionName == null) return; + final String onlineVersion = getVersion(onlineVersionName); + final String localVersion = getVersion(BuildConfig.VERSION_NAME); + if (Objects.equals(onlineVersion, localVersion)) { + if (force) { + AppExecutors.getInstance().mainThread().execute(() -> { + final Context applicationContext = context.getApplicationContext(); + // Check if app was closed or crashed before reaching here + if (applicationContext == null) return; + // Show toast if version number preference was tapped + Toast.makeText(applicationContext, R.string.on_latest_version, Toast.LENGTH_SHORT).show(); + }); + } return; } - final boolean shouldShowDialog = UpdateCheckCommon.shouldShowUpdateDialog(force, version); + final boolean shouldShowDialog = UpdateCheckCommon.shouldShowUpdateDialog(force, onlineVersionName); if (!shouldShowDialog) return; - UpdateCheckCommon.showUpdateDialog(context, version, (dialog, which) -> { + UpdateCheckCommon.showUpdateDialog(context, onlineVersionName, (dialog, which) -> { UPDATE_CHECKER.onDownload(context); dialog.dismiss(); }); }); } + private static String getVersion(@NonNull final String versionName) { + final Matcher matcher = VERSION_NAME_PATTERN.matcher(versionName); + if (!matcher.matches()) return versionName; + try { + return matcher.group(1); + } catch (Exception e) { + Log.e(TAG, "getVersion: ", e); + } + return versionName; + } + public static void changelogCheck(@NonNull final Context context) { if (settingsHelper.getInteger(Constants.PREV_INSTALL_VERSION) < BuildConfig.VERSION_CODE) { int appUaCode = settingsHelper.getInteger(Constants.APP_UA_CODE); diff --git a/app/src/main/java/awais/instagrabber/utils/UpdateCheckCommon.java b/app/src/main/java/awais/instagrabber/utils/UpdateCheckCommon.java index 8377c9e4..285fbb13 100644 --- a/app/src/main/java/awais/instagrabber/utils/UpdateCheckCommon.java +++ b/app/src/main/java/awais/instagrabber/utils/UpdateCheckCommon.java @@ -17,8 +17,7 @@ public final class UpdateCheckCommon { public static boolean shouldShowUpdateDialog(final boolean force, @NonNull final String version) { final String skippedVersion = settingsHelper.getString(Constants.SKIPPED_VERSION); - return force || (!version.equals(BuildConfig.VERSION_NAME) && !BuildConfig.DEBUG && !skippedVersion - .equals(version)); + return force || (!BuildConfig.DEBUG && !skippedVersion.equals(version)); } public static void showUpdateDialog(@NonNull final Context context, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e9cfe7e0..20ab88c0 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -476,4 +476,5 @@ Barinsta Crash Report Select an email app to send crash logs Skip this update + You\'re already on the latest version