diff --git a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java index 0cde76d0..1afe1c3c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java +++ b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; @@ -47,6 +48,8 @@ import java.lang.ref.WeakReference; public class MitmAddon { /* API */ public static final String PACKAGE_NAME = "com.pcapdroid.mitm"; + public static final String PACKAGE_VERSION_NAME = "v0.2"; + public static final int PACKAGE_VERSION_CODE = 2; public static final String MITM_PERMISSION = "com.pcapdroid.permission.MITM"; public static final String MITM_SERVICE = PACKAGE_NAME + ".MitmService"; @@ -82,15 +85,24 @@ public class MitmAddon { } }; - public static boolean isInstalled(Context ctx) { + public static int getInstalledVersion(Context ctx) { try { - ctx.getPackageManager().getPackageInfo(PACKAGE_NAME, 0); - return true; + PackageInfo pInfo = ctx.getPackageManager().getPackageInfo(PACKAGE_NAME, 0); + return pInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { - return false; + return -1; } } + public static boolean isInstalled(Context ctx) { + return getInstalledVersion(ctx) == PACKAGE_VERSION_CODE; + } + + public static String getGithubReleaseUrl() { + return "https://github.com/emanuele-f/PCAPdroid-mitm/releases/download/" + + PACKAGE_VERSION_NAME + "/PCAPdroid-mitm_" + PACKAGE_VERSION_NAME +".apk"; + } + public static boolean hasMitmPermission(Context ctx) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) return ctx.checkSelfPermission(MitmAddon.MITM_PERMISSION) == PackageManager.PERMISSION_GRANTED; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallAddon.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallAddon.java index f1a7462a..b164515c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallAddon.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallAddon.java @@ -56,11 +56,25 @@ public class InstallAddon extends StepFragment { } private void installAddon() { - mStepLabel.setText(R.string.install_mitm_addon); - mStepButton.setText(R.string.install_action); + int installed_ver = MitmAddon.getInstalledVersion(requireContext()); + + if(installed_ver < 0) { + mStepLabel.setText(R.string.install_mitm_addon); + mStepButton.setText(R.string.install_action); + } else if(installed_ver < MitmAddon.PACKAGE_VERSION_CODE) { + mStepLabel.setText(R.string.mitm_addon_new_version); + mStepButton.setText(R.string.upgrade_action); + } else { + mStepLabel.setText(R.string.mitm_addon_bad_version); + mStepIcon.setColorFilter(mDangerColor); + mStepButton.setText(R.string.install_action); + mStepButton.setEnabled(false); + return; + } + mStepButton.setOnClickListener(v -> { Intent browserIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse("https://github.com/emanuele-f/PCAPdroid-mitm/releases/download/v0.1/PCAPdroid-mitm_v0.1.apk")); + Uri.parse(MitmAddon.getGithubReleaseUrl())); Utils.startActivity(requireContext(), browserIntent); }); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c52eb04e..279beff9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -282,4 +282,7 @@ The CA certificate is installed The CA certificate is not installed, run the mitm setup wizard Done + Bad PCAPdroid mitm addon version. Uninstall it and retry + The PCAPdroid plugin must be upgraded + Upgrade \ No newline at end of file