summaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2024-10-26 04:45:50 +0200
committercyberta <cyberta@riseup.net>2024-12-11 00:09:34 +0000
commit2f79616938eb8d570bad779f6846644e09cfefa4 (patch)
tree21b0391f824acbb0ec23d4fce0d4ab1c7745c18c /app/src/main
parentc0da385377c22f445bef0b70aa8da52e1fda1037 (diff)
replace deprecated Bundle.getParcelable(...) call with BundleCompat.getParcelable(...)
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java3
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/LogFragment.java3
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java3
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/models/Provider.java43
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java7
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManager.java6
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java6
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderSetupFailedDialog.java4
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/activities/SetupActivity.java5
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java4
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/EmptyPermissionSetupFragment.java3
11 files changed, 71 insertions, 16 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java
index a3e0ae34..76834332 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java
@@ -50,6 +50,7 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
+import androidx.core.os.BundleCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
@@ -116,7 +117,7 @@ public class EipFragment extends Fragment implements PropertyChangeListener {
Activity activity = getActivity();
if (activity != null) {
if (arguments != null) {
- provider = arguments.getParcelable(PROVIDER_KEY);
+ provider = BundleCompat.getParcelable(arguments, PROVIDER_KEY, Provider.class);
if (provider == null) {
handleNoProvider(activity);
} else {
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/LogFragment.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/LogFragment.java
index 56b7259e..c165d19b 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/LogFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/LogFragment.java
@@ -43,6 +43,7 @@ import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
+import androidx.core.os.BundleCompat;
import androidx.fragment.app.ListFragment;
import java.text.SimpleDateFormat;
@@ -300,7 +301,7 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
// We have been called
if (msg.what == MESSAGE_NEWLOG) {
- LogItem logMessage = msg.getData().getParcelable("logmessage");
+ LogItem logMessage = BundleCompat.getParcelable(msg.getData(), "logmessage", LogItem.class);
if (addLogMessage(logMessage))
for (DataSetObserver observer : observers) {
observer.onChanged();
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java
index 3dbdbe64..ca84d330 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java
@@ -37,6 +37,7 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
+import androidx.core.os.BundleCompat;
import androidx.fragment.app.DialogFragment;
import org.json.JSONObject;
@@ -186,7 +187,7 @@ public class MainActivityErrorDialog extends DialogFragment {
return;
}
if (savedInstanceState.containsKey(KEY_PROVIDER)) {
- this.provider = savedInstanceState.getParcelable(KEY_PROVIDER);
+ this.provider = BundleCompat.getParcelable(savedInstanceState, KEY_PROVIDER, Provider.class);
}
if (savedInstanceState.containsKey(KEY_REASON_TO_FAIL)) {
this.reasonToFail = savedInstanceState.getString(KEY_REASON_TO_FAIL);
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/models/Provider.java b/app/src/main/java/se/leap/bitmaskclient/base/models/Provider.java
index a2bf0d8e..51183e5e 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/models/Provider.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/models/Provider.java
@@ -62,6 +62,7 @@ import io.swagger.client.model.ModelsGateway;
import io.swagger.client.model.ModelsProvider;
import motd.IStringCollection;
import motd.Motd;
+import se.leap.bitmaskclient.BuildConfig;
/**
* @author Sean Leonard <meanderingcode@aetherislands.net>
@@ -90,7 +91,8 @@ public final class Provider implements Parcelable {
private String certificatePin = "";
private String certificatePinEncoding = "";
private String caCert = "";
- private int apiVersion = 3;
+ private int apiVersion = 5;
+ private int[] apiVersions = new int[0];
private String privateKeyString = "";
private transient PrivateKey privateKey = null;
private String vpnCertificate = "";
@@ -108,6 +110,7 @@ public final class Provider implements Parcelable {
final public static String
API_URL = "api_uri",
API_VERSION = "api_version",
+ API_VERSIONS = "api_versions",
ALLOW_REGISTRATION = "allow_registration",
API_RETURN_SERIAL = "serial",
SERVICE = "service",
@@ -664,7 +667,8 @@ public final class Provider implements Parcelable {
this.apiUrl = new URL(definition.getString(API_URL)).toString();
this.allowAnonymous = definition.getJSONObject(Provider.SERVICE).getBoolean(PROVIDER_ALLOW_ANONYMOUS);
this.allowRegistered = definition.getJSONObject(Provider.SERVICE).getBoolean(PROVIDER_ALLOWED_REGISTERED);
- this.apiVersion = Integer.parseInt(getDefinition().getString(Provider.API_VERSION));
+ this.apiVersions = parseApiVersionsArray();
+ this.apiVersion = selectPreferredApiVersion();
this.domain = getDefinition().getString(Provider.DOMAIN);
return true;
} catch (JSONException | ArrayIndexOutOfBoundsException | MalformedURLException | NullPointerException | NumberFormatException e) {
@@ -672,6 +676,41 @@ public final class Provider implements Parcelable {
}
}
+ /**
+ @returns latest api version supported by client and server or the version set in 'api_version'
+ in case there's not a common supported version
+ */
+ private int selectPreferredApiVersion() throws JSONException {
+ if (apiVersions.length == 0) {
+ return Integer.parseInt(getDefinition().getString(Provider.API_VERSION));
+ }
+
+ // apiVersion is a sorted Array
+ for (int i = apiVersions.length -1; i >= 0; i--) {
+ if (apiVersions[i] == BuildConfig.preferred_client_api_version ||
+ apiVersions[i] < BuildConfig.preferred_client_api_version) {
+ return apiVersions[i];
+ }
+ }
+
+ return Integer.parseInt(getDefinition().getString(Provider.API_VERSION));
+ }
+
+ private int[] parseApiVersionsArray() {
+ int[] versionArray = new int[0];
+ try {
+ JSONArray versions = getDefinition().getJSONArray(Provider.API_VERSIONS);
+ versionArray = new int[versions.length()];
+ for (int i = 0; i < versions.length(); i++) {
+ versionArray[i] = Integer.parseInt(versions.getString(i));
+ }
+ } catch (JSONException ignore) {
+ // this backend doesn't support api_versions yet
+ }
+ Arrays.sort(versionArray);
+ return versionArray;
+ }
+
public void setCaCert(String cert) {
this.caCert = cert;
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java b/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java
index f041a27f..31933717 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java
@@ -61,6 +61,7 @@ import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
+import androidx.core.os.BundleCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import org.json.JSONObject;
@@ -201,7 +202,7 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
switch (resultCode) {
case CORRECTLY_DOWNLOADED_EIP_SERVICE:
Log.d(TAG, "correctly updated service json");
- provider = resultData.getParcelable(PROVIDER_KEY);
+ provider = BundleCompat.getParcelable(resultData, PROVIDER_KEY, Provider.class);
ProviderObservable.getInstance().updateProvider(provider);
PreferenceHelper.storeProviderInPreferences(provider);
if (EipStatus.getInstance().isDisconnected()) {
@@ -209,7 +210,7 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
}
break;
case CORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE:
- provider = resultData.getParcelable(PROVIDER_KEY);
+ provider = BundleCompat.getParcelable(resultData, PROVIDER_KEY, Provider.class);
ProviderObservable.getInstance().updateProvider(provider);
PreferenceHelper.storeProviderInPreferences(provider);
EipCommand.startVPN(appContext, false);
@@ -219,7 +220,7 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
}
break;
case CORRECTLY_DOWNLOADED_GEOIP_JSON:
- provider = resultData.getParcelable(PROVIDER_KEY);
+ provider = BundleCompat.getParcelable(resultData, PROVIDER_KEY, Provider.class);
ProviderObservable.getInstance().updateProvider(provider);
PreferenceHelper.storeProviderInPreferences(provider);
maybeStartEipService(resultData);
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManager.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManager.java
index f4110877..e39f3bd7 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManager.java
@@ -30,6 +30,8 @@ import android.os.ResultReceiver;
import android.util.Log;
import android.util.Pair;
+import androidx.core.content.IntentCompat;
+
import org.jetbrains.annotations.Blocking;
import org.json.JSONException;
import org.json.JSONObject;
@@ -80,8 +82,8 @@ public class ProviderApiManager extends ProviderApiManagerBase {
}
Provider provider = null;
- if (command.getParcelableExtra(PROVIDER_KEY) != null) {
- provider = command.getParcelableExtra(PROVIDER_KEY);
+ if (command.hasExtra(PROVIDER_KEY)) {
+ provider = IntentCompat.getParcelableExtra(command, PROVIDER_KEY, Provider.class);
} else {
//TODO: consider returning error back e.g. NO_PROVIDER
Log.e(TAG, action +" called without provider!");
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java
index bd6c5ef2..4b8e8e18 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java
@@ -18,12 +18,16 @@ package se.leap.bitmaskclient.providersetup;
import static android.app.Activity.RESULT_CANCELED;
+import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY;
+
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
+import androidx.core.os.BundleCompat;
+
import java.lang.ref.WeakReference;
import se.leap.bitmaskclient.base.models.Constants;
@@ -61,7 +65,7 @@ public class ProviderApiSetupBroadcastReceiver extends BroadcastReceiver {
Log.d(TAG, "Broadcast resultCode: " + resultCode);
Bundle resultData = intent.getParcelableExtra(Constants.BROADCAST_RESULT_KEY);
- Provider handledProvider = resultData.getParcelable(Constants.PROVIDER_KEY);
+ Provider handledProvider = resultData == null ? null : BundleCompat.getParcelable(resultData, PROVIDER_KEY, Provider.class);
if (handledProvider != null && setupInterface.getProvider() != null &&
handledProvider.getMainUrl().equalsIgnoreCase(setupInterface.getProvider().getMainUrl())) {
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderSetupFailedDialog.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderSetupFailedDialog.java
index 162238bf..172d2636 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderSetupFailedDialog.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderSetupFailedDialog.java
@@ -24,6 +24,7 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.os.BundleCompat;
import androidx.fragment.app.DialogFragment;
import org.json.JSONObject;
@@ -32,6 +33,7 @@ import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.models.Provider;
import se.leap.bitmaskclient.base.utils.PreferenceHelper;
+import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.ERRORID;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.ERRORS;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.INITIAL_ACTION;
@@ -219,7 +221,7 @@ public class ProviderSetupFailedDialog extends DialogFragment {
return;
}
if (savedInstanceState.containsKey(KEY_PROVIDER)) {
- this.provider = savedInstanceState.getParcelable(KEY_PROVIDER);
+ this.provider = BundleCompat.getParcelable(savedInstanceState, KEY_PROVIDER, Provider.class);
}
if (savedInstanceState.containsKey(KEY_REASON_TO_FAIL)) {
this.reasonToFail = savedInstanceState.getString(KEY_REASON_TO_FAIL);
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/SetupActivity.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/SetupActivity.java
index f45d2f2a..191db42b 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/SetupActivity.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/SetupActivity.java
@@ -32,6 +32,7 @@ import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
+import androidx.core.os.BundleCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
@@ -81,7 +82,7 @@ public class SetupActivity extends AppCompatActivity implements SetupActivityCal
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
- provider = savedInstanceState.getParcelable(EXTRA_PROVIDER);
+ provider = BundleCompat.getParcelable(savedInstanceState, EXTRA_PROVIDER, Provider.class);
currentPosition = savedInstanceState.getInt(EXTRA_CURRENT_POSITION);
switchProvider = savedInstanceState.getBoolean(EXTRA_SWITCH_PROVIDER);
}
@@ -173,7 +174,7 @@ public class SetupActivity extends AppCompatActivity implements SetupActivityCal
setupActionBar();
if (ProviderSetupObservable.isSetupRunning()) {
- provider = ProviderSetupObservable.getResultData().getParcelable(PROVIDER_KEY);
+ provider = BundleCompat.getParcelable(ProviderSetupObservable.getResultData(), PROVIDER_KEY, Provider.class);
if (provider != null) {
currentPosition = adapter.getFragmentPostion(CONFIGURE_PROVIDER_FRAGMENT);
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java
index 31e6d991..2b322586 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java
@@ -40,6 +40,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.res.ResourcesCompat;
+import androidx.core.os.BundleCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -215,7 +216,8 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Prop
}
private void handleResult(int resultCode, Bundle resultData, boolean resumeSetup) {
- Provider provider = resultData.getParcelable(PROVIDER_KEY);
+ Provider provider = BundleCompat.getParcelable(resultData, PROVIDER_KEY, Provider.class);
+
if (ignoreProviderAPIUpdates ||
provider == null ||
(setupActivityCallback.getSelectedProvider() != null &&
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/EmptyPermissionSetupFragment.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/EmptyPermissionSetupFragment.java
index 849ac681..c6671a90 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/EmptyPermissionSetupFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/EmptyPermissionSetupFragment.java
@@ -13,6 +13,7 @@ import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.os.BundleCompat;
import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.databinding.FEmptyPermissionSetupBinding;
@@ -76,7 +77,7 @@ public class EmptyPermissionSetupFragment extends BaseSetupFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- this.vpnPermissionIntent = getArguments().getParcelable(EXTRA_VPN_INTENT);
+ this.vpnPermissionIntent = BundleCompat.getParcelable(getArguments(), EXTRA_VPN_INTENT, Intent.class);
this.notificationPermissionAction = getArguments().getString(EXTRA_NOTIFICATION_PERMISSON_ACTION);
}