From c62e338821f3772948cf1550a39157197b368cf6 Mon Sep 17 00:00:00 2001
From: cyBerta <cyberta@riseup.net>
Date: Fri, 15 Nov 2024 12:57:59 +0100
Subject: [PATCH] impplement BitmaskCoreProvider which allows us to swap and
 mock BitmaskCorey in unit tests

---
 .../base/utils/BitmaskCoreProvider.java       | 22 ++++++++++++++++++-
 .../base/utils/PreferenceHelper.java          |  8 +++----
 bitmask-core-android                          |  2 +-
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/BitmaskCoreProvider.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/BitmaskCoreProvider.java
index a97971428..9cd2a7470 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/utils/BitmaskCoreProvider.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/BitmaskCoreProvider.java
@@ -1,2 +1,22 @@
-package se.leap.bitmaskclient.base.utils;public class BitmaskCoreProvider {
+package se.leap.bitmaskclient.base.utils;
+
+import de.blinkt.openvpn.core.NativeUtils;
+import mobile.BitmaskMobile;
+import mobilemodels.BitmaskMobileCore;
+
+public class BitmaskCoreProvider {
+    private static BitmaskMobileCore customMobileCore;
+    public static BitmaskMobileCore getBitmaskMobile() {
+        if (customMobileCore == null) {
+            return new BitmaskMobile(new PreferenceHelper.SharedPreferenceStore());
+        }
+        return customMobileCore;
+    }
+
+    public static void initBitmaskMobile(BitmaskMobileCore bitmaskMobileCore) {
+        if (!NativeUtils.isUnitTest()) {
+            throw new IllegalStateException("Initializing custom BitmaskMobileCore implementation outside of an unit test is not allowed");
+        }
+        BitmaskCoreProvider.customMobileCore = bitmaskMobileCore;
+    }
 }
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java
index 5cc3ff709..25a9a3fbb 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java
@@ -52,6 +52,7 @@ import static se.leap.bitmaskclient.base.models.Constants.USE_PORT_HOPPING;
 import static se.leap.bitmaskclient.base.models.Constants.USE_SNOWFLAKE;
 import static se.leap.bitmaskclient.base.models.Constants.USE_SYSTEM_PROXY;
 import static se.leap.bitmaskclient.base.models.Constants.USE_TUNNEL;
+import static se.leap.bitmaskclient.base.utils.BitmaskCoreProvider.getBitmaskMobile;
 
 import android.content.Context;
 import android.content.SharedPreferences;
@@ -82,6 +83,7 @@ import de.blinkt.openvpn.VpnProfile;
 import de.blinkt.openvpn.core.NativeUtils;
 import io.swagger.client.JSON;
 import mobile.BitmaskMobile;
+import mobilemodels.BitmaskMobileCore;
 import se.leap.bitmaskclient.BuildConfig;
 import se.leap.bitmaskclient.base.models.Introducer;
 import se.leap.bitmaskclient.base.models.Provider;
@@ -169,8 +171,7 @@ public class PreferenceHelper {
                 provider.setService(preferences.getString(PROVIDER_MODELS_EIPSERVICE, null));
                 provider.setBridges(preferences.getString(PROVIDER_MODELS_BRIDGES, null));
                 provider.setGateways(preferences.getString(PROVIDER_MODELS_GATEWAYS, null));
-                BitmaskMobile bm = new BitmaskMobile(new SharedPreferenceStore());
-                provider.setIntroducer(bm.getIntroducerURLByDomain(provider.getDomain()));
+                provider.setIntroducer(getBitmaskMobile().getIntroducerURLByDomain(provider.getDomain()));
 
             } catch (Exception e) {
                 e.printStackTrace();
@@ -218,13 +219,12 @@ public class PreferenceHelper {
         Set<String> providerDomains = getCustomProviderDomains();
         HashMap<String, Provider> customProviders = new HashMap<>();
         if (providerDomains.size() > 0) {
-            BitmaskMobile bm = new BitmaskMobile(new PreferenceHelper.SharedPreferenceStore());
             for (String domain : providerDomains) {
                 String mainURL = preferences.getString(Provider.MAIN_URL + "." + domain, null);
                 if (mainURL != null) {
                     Introducer introducer = null;
                     try {
-                       introducer = Introducer.fromUrl(bm.getIntroducerURLByDomain(domain));
+                       introducer = Introducer.fromUrl(BitmaskCoreProvider.getBitmaskMobile().getIntroducerURLByDomain(domain));
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
diff --git a/bitmask-core-android b/bitmask-core-android
index 1a726fb69..bdec5e522 160000
--- a/bitmask-core-android
+++ b/bitmask-core-android
@@ -1 +1 @@
-Subproject commit 1a726fb69daab25b0572266d803817de231a6d9e
+Subproject commit bdec5e522433a9b0719b000891a7c625e734e9d3
-- 
GitLab