From 5b07bb3df03cc95d6b50a8eec2bd30563a6d5b43 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 26 Feb 2024 21:33:52 +0100 Subject: save manually added providers in encrypted shared preferences instead of external files dir --- .../leap/bitmaskclient/base/models/Constants.java | 1 + .../base/utils/InputStreamHelper.java | 24 ------------ .../bitmaskclient/base/utils/PreferenceHelper.java | 45 +++++++++++++++++++++- 3 files changed, 45 insertions(+), 25 deletions(-) (limited to 'app/src/main/java/se/leap/bitmaskclient/base') diff --git a/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java b/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java index 18590f0b..754491f8 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java @@ -53,6 +53,7 @@ public interface Constants { String OBFUSCATION_PINNING_KCP = "obfuscation_pinning_udp"; String OBFUSCATION_PINNING_LOCATION = "obfuscation_pinning_location"; String USE_SYSTEM_PROXY = "usesystemproxy"; + String CUSTOM_PROVIDER_DOMAINS = "custom_provider_domains"; ////////////////////////////////////////////// diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/InputStreamHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/InputStreamHelper.java index 6dfe0861..34082bcb 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/utils/InputStreamHelper.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/InputStreamHelper.java @@ -15,30 +15,6 @@ import de.blinkt.openvpn.core.NativeUtils; */ public class InputStreamHelper { - public interface InputStreamHelperInterface { - InputStream getInputStreamFrom(String filePath) throws FileNotFoundException; - - } - - private static InputStreamHelperInterface instance = new DefaultInputStreamHelper(); - - private static class DefaultInputStreamHelper implements InputStreamHelperInterface { - @Override - public InputStream getInputStreamFrom(String filePath) throws FileNotFoundException { - return new FileInputStream(filePath); - } - } - - public InputStreamHelper(InputStreamHelperInterface helperInterface) { - if (!NativeUtils.isUnitTest()) { - throw new IllegalStateException("InputStreamHelper injected with InputStreamHelperInterface outside of an unit test"); - } - instance = helperInterface; - } - //allows us to mock FileInputStream - public static InputStream getInputStreamFrom(String filePath) throws FileNotFoundException { - return instance.getInputStreamFrom(filePath); - } public static String loadInputStreamAsString(InputStream is) { java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); 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 2420a797..eee3bfb2 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 @@ -7,6 +7,7 @@ import static se.leap.bitmaskclient.base.models.Constants.ALLOW_TETHERING_USB; import static se.leap.bitmaskclient.base.models.Constants.ALLOW_TETHERING_WIFI; import static se.leap.bitmaskclient.base.models.Constants.ALWAYS_ON_SHOW_DIALOG; import static se.leap.bitmaskclient.base.models.Constants.CLEARLOG; +import static se.leap.bitmaskclient.base.models.Constants.CUSTOM_PROVIDER_DOMAINS; import static se.leap.bitmaskclient.base.models.Constants.DEFAULT_SHARED_PREFS_BATTERY_SAVER; import static se.leap.bitmaskclient.base.models.Constants.EIP_IS_ALWAYS_ON; import static se.leap.bitmaskclient.base.models.Constants.EIP_RESTART_ON_BOOT; @@ -59,6 +60,7 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.security.GeneralSecurityException; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -185,8 +187,49 @@ public class PreferenceHelper { } } + /** + * + * @return HashMap with main URL string as key and Provider as value + */ + public static HashMap getCustomProviders() { + Set providerDomains = getCustomProviderDomains(); + HashMap customProviders = new HashMap<>(); + for (String domain : providerDomains) { + String mainURL = preferences.getString(Provider.MAIN_URL + "." + domain, null); + if (mainURL != null) { + customProviders.put(mainURL, Provider.createCustomProvider(mainURL, domain)); + } + } + return customProviders; + } + + public static void setCustomProviders(Set providers) { + Set newProviderDomains = new HashSet<>(); + + // add + SharedPreferences.Editor editor = preferences.edit(); + for (Provider provider : providers) { + String providerDomain = provider.getDomain(); + editor.putString(Provider.MAIN_URL + "." + providerDomain, provider.getMainUrlString()); + newProviderDomains.add(providerDomain); + } + + // remove + Set removedProviderDomains = getCustomProviderDomains(); + removedProviderDomains.removeAll(newProviderDomains); + for (String providerDomain : removedProviderDomains) { + editor.remove(Provider.MAIN_URL + "." + providerDomain); + } + + editor.putStringSet(CUSTOM_PROVIDER_DOMAINS, newProviderDomains); + editor.apply(); + } + + static Set getCustomProviderDomains() { + return preferences.getStringSet(CUSTOM_PROVIDER_DOMAINS, new HashSet<>()); + } + // TODO: replace commit with apply after refactoring EIP - //FIXME: don't save private keys in shared preferences! use the keystore public static void storeProviderInPreferences(Provider provider, boolean async) { synchronized (LOCK) { SharedPreferences.Editor editor = preferences.edit(); -- cgit v1.2.3 From b8f3fbd25f19498e7a6a9080369ff5815c18d6d7 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Mon, 26 Feb 2024 21:34:25 +0100 Subject: fix runtime exception on location switch --- .../se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/src/main/java/se/leap/bitmaskclient/base') diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java index 16aea065..cbab1d32 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/NavigationDrawerFragment.java @@ -439,7 +439,7 @@ public class NavigationDrawerFragment extends Fragment implements SharedPreferen @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key != null && key.equals(PREFERRED_CITY)) { - initManualGatewayEntry(); + getActivity().runOnUiThread(this::initManualGatewayEntry); } } -- cgit v1.2.3 From b8adf36cbf732da19dcd100ba89d1b01af6db694 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Tue, 27 Feb 2024 00:25:34 +0100 Subject: scroll EditText to visible area after the keyboard appeared --- .../java/se/leap/bitmaskclient/base/utils/ViewHelper.java | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'app/src/main/java/se/leap/bitmaskclient/base') diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/ViewHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/ViewHelper.java index ed7bd9f2..e04ba70d 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/utils/ViewHelper.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/ViewHelper.java @@ -229,8 +229,19 @@ public class ViewHelper { } public static void hideKeyboardFrom(Context context, View view) { + if (context == null) { + return; + } InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } + public static boolean isKeyboardShown(Context context) { + if (context == null) { + return false; + } + InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE); + return imm.isActive(); + } + } -- cgit v1.2.3