diff options
| author | cyBerta <cyberta@riseup.net> | 2024-10-26 04:45:50 +0200 | 
|---|---|---|
| committer | cyberta <cyberta@riseup.net> | 2024-12-11 00:09:34 +0000 | 
| commit | 2f79616938eb8d570bad779f6846644e09cfefa4 (patch) | |
| tree | 21b0391f824acbb0ec23d4fce0d4ab1c7745c18c /app/src | |
| parent | c0da385377c22f445bef0b70aa8da52e1fda1037 (diff) | |
replace deprecated Bundle.getParcelable(...) call with BundleCompat.getParcelable(...)
Diffstat (limited to 'app/src')
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);      } | 
