summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java33
1 files changed, 26 insertions, 7 deletions
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 3c36065e..ec646cac 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
@@ -9,6 +9,7 @@ import static se.leap.bitmaskclient.R.string.description_configure_provider_circ
import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_RESULT_CODE;
import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_RESULT_KEY;
import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY;
+import static se.leap.bitmaskclient.base.utils.ConfigHelper.isDefaultBitmask;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getUseSnowflake;
import static se.leap.bitmaskclient.base.utils.ViewHelper.animateContainerVisibility;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.CORRECTLY_DOWNLOADED_VPN_CERTIFICATE;
@@ -21,20 +22,23 @@ import static se.leap.bitmaskclient.providersetup.ProviderAPI.PROVIDER_OK;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.SET_UP_PROVIDER;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.TOR_EXCEPTION;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.TOR_TIMEOUT;
-import static se.leap.bitmaskclient.tor.TorStatusObservable.getBootstrapProgress;
import static se.leap.bitmaskclient.tor.TorStatusObservable.getLastLogs;
import static se.leap.bitmaskclient.tor.TorStatusObservable.getLastSnowflakeLog;
import static se.leap.bitmaskclient.tor.TorStatusObservable.getLastTorLog;
import android.app.Activity;
import android.content.Intent;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.res.ResourcesCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -42,11 +46,13 @@ import java.util.List;
import java.util.Observable;
import java.util.Observer;
+import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.models.Provider;
import se.leap.bitmaskclient.databinding.FConfigureProviderBinding;
import se.leap.bitmaskclient.eip.EipSetupListener;
import se.leap.bitmaskclient.eip.EipSetupObserver;
import se.leap.bitmaskclient.providersetup.ProviderAPICommand;
+import se.leap.bitmaskclient.providersetup.ProviderSetupObservable;
import se.leap.bitmaskclient.providersetup.TorLogAdapter;
import se.leap.bitmaskclient.providersetup.activities.CancelCallback;
import se.leap.bitmaskclient.tor.TorStatusObservable;
@@ -60,6 +66,8 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Obse
private boolean ignoreProviderAPIUpdates = false;
private TorLogAdapter torLogAdapter;
+ private Handler handler = new Handler(Looper.getMainLooper());
+
public static ConfigureProviderFragment newInstance(int position) {
ConfigureProviderFragment fragment = new ConfigureProviderFragment();
@@ -97,14 +105,14 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Obse
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setupActivityCallback.registerCancelCallback(this);
- TorStatusObservable.getInstance().addObserver(this);
+ ProviderSetupObservable.getInstance().addObserver(this);
EipSetupObserver.addListener(this);
}
@Override
public void onDestroyView() {
setupActivityCallback.removeCancelCallback(this);
- TorStatusObservable.getInstance().deleteObserver(this);
+ ProviderSetupObservable.getInstance().deleteObserver(this);
EipSetupObserver.removeListener(this);
binding = null;
super.onDestroyView();
@@ -116,8 +124,14 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Obse
ignoreProviderAPIUpdates = false;
binding.detailContainer.setVisibility(getUseSnowflake() ? VISIBLE : GONE);
binding.tvCircumventionDescription.setText(getUseSnowflake() ? description_configure_provider_circumvention : description_configure_provider);
+ if (!isDefaultBitmask()) {
+ Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.setup_progress_spinner, null);
+ binding.progressSpinner.setAnimatedSpinnerDrawable(drawable);
+ }
+ binding.progressSpinner.update(ProviderSetupObservable.getProgress());
setupActivityCallback.setNavigationButtonHidden(true);
setupActivityCallback.setCancelButtonHidden(false);
+ ProviderSetupObservable.startSetup();
ProviderAPICommand.execute(getContext(), SET_UP_PROVIDER, setupActivityCallback.getSelectedProvider());
}
@@ -145,7 +159,7 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Obse
@Override
public void update(Observable o, Object arg) {
- if (o instanceof TorStatusObservable) {
+ if (o instanceof ProviderSetupObservable) {
Activity activity = getActivity();
if (activity == null || binding == null) {
return;
@@ -162,7 +176,7 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Obse
}
}
binding.tvProgressStatus.setText(TorStatusObservable.getStringForCurrentStatus(activity));
- binding.progressSpinner.update(getBootstrapProgress());
+ binding.progressSpinner.update(ProviderSetupObservable.getProgress());
});
}
}
@@ -191,7 +205,8 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Obse
Provider provider = resultData.getParcelable(PROVIDER_KEY);
if (ignoreProviderAPIUpdates ||
provider == null ||
- !setupActivityCallback.getSelectedProvider().getDomain().equals(provider.getDomain())) {
+ (setupActivityCallback.getSelectedProvider() != null &&
+ !setupActivityCallback.getSelectedProvider().getDomain().equals(provider.getDomain()))) {
return;
}
@@ -205,7 +220,11 @@ public class ConfigureProviderFragment extends BaseSetupFragment implements Obse
break;
case CORRECTLY_DOWNLOADED_VPN_CERTIFICATE:
setupActivityCallback.onProviderSelected(provider);
- setupActivityCallback.onConfigurationSuccess();
+ handler.postDelayed(() -> {
+ if (!ProviderSetupObservable.isCanceled()) {
+ setupActivityCallback.onConfigurationSuccess();
+ }
+ }, 750);
break;
case PROVIDER_NOK:
case INCORRECTLY_DOWNLOADED_VPN_CERTIFICATE: