summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2023-07-31 17:50:04 +0200
committercyBerta <cyberta@riseup.net>2023-07-31 17:50:04 +0200
commit4d9018316fa5a9af714de44224a440e0fa78be57 (patch)
treeeeb74fa7d36c52353a2dd053ca847f8303d0fd01 /app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ConfigureProviderFragment.java
parentaddf8d89962bf3de6d70330f9264d0e4d866613e (diff)
add cancel button, call provider stetup command in ConfigureProviderFragment and listen to the result, implementing happy path
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.java88
1 files changed, 66 insertions, 22 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 ceed2c3c..42d516a0 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
@@ -1,9 +1,14 @@
package se.leap.bitmaskclient.providersetup.fragments;
+import static android.app.Activity.RESULT_CANCELED;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE;
+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.ViewHelper.animateContainerVisibility;
+import static se.leap.bitmaskclient.providersetup.ProviderAPI.PROVIDER_OK;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.SET_UP_PROVIDER;
import static se.leap.bitmaskclient.tor.TorStatusObservable.getBootstrapProgress;
import static se.leap.bitmaskclient.tor.TorStatusObservable.getLastLogs;
@@ -12,6 +17,7 @@ import static se.leap.bitmaskclient.tor.TorStatusObservable.getLastTorLog;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -28,21 +34,27 @@ import java.util.List;
import java.util.Observable;
import java.util.Observer;
+import se.leap.bitmaskclient.base.models.Provider;
import se.leap.bitmaskclient.base.utils.PreferenceHelper;
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.TorLogAdapter;
-import se.leap.bitmaskclient.providersetup.activities.SetupInterface;
+import se.leap.bitmaskclient.providersetup.activities.CancelCallback;
+import se.leap.bitmaskclient.providersetup.activities.SetupActivityCallback;
import se.leap.bitmaskclient.tor.TorStatusObservable;
-public class ConfigureProviderFragment extends Fragment implements Observer {
+public class ConfigureProviderFragment extends Fragment implements Observer, CancelCallback, EipSetupListener {
+
+ private static final String TAG = ConfigureProviderFragment.class.getSimpleName();
public static ConfigureProviderFragment newInstance(int position) {
return new ConfigureProviderFragment(position);
}
FConfigureProviderBinding binding;
- private SetupInterface setupInterface;
+ private SetupActivityCallback setupActivityCallback;
private boolean isExpanded = false;
private final int position;
private ViewPager2.OnPageChangeCallback viewPagerCallback;
@@ -56,6 +68,7 @@ public class ConfigureProviderFragment extends Fragment implements Observer {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ torLogAdapter = new TorLogAdapter(getLastLogs());
}
@Override
@@ -64,13 +77,16 @@ public class ConfigureProviderFragment extends Fragment implements Observer {
binding = FConfigureProviderBinding.inflate(inflater, container, false);
binding.detailContainer.setVisibility(PreferenceHelper.getUseSnowflake(getContext()) ? VISIBLE : GONE);
binding.detailHeaderContainer.setOnClickListener(v -> {
- binding.ivExpand.animate().setDuration(250).rotation(isExpanded ? 0 : 270);
+ binding.ivExpand.animate().setDuration(250).rotation(isExpanded ? -90 : 0);
showConnectionDetails();
animateContainerVisibility(binding.expandableDetailContainer, isExpanded);
isExpanded = !isExpanded;
});
binding.ivExpand.animate().setDuration(0).rotation(270);
+ LinearLayoutManager layoutManager = new LinearLayoutManager(this.getContext());
+ binding.connectionDetailLogs.setLayoutManager(layoutManager);
+ binding.connectionDetailLogs.setAdapter(torLogAdapter);
return binding.getRoot();
}
@@ -85,35 +101,40 @@ public class ConfigureProviderFragment extends Fragment implements Observer {
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
- setupInterface = (SetupInterface) getActivity();
- viewPagerCallback = new ViewPager2.OnPageChangeCallback() {
- @Override
- public void onPageSelected(int position) {
- super.onPageSelected(position);
- if (position == ConfigureProviderFragment.this.position) {
- binding.detailContainer.setVisibility(PreferenceHelper.getUseSnowflake(getContext()) ? VISIBLE : GONE);
- setupInterface.setNavigationButtonHidden(true);
- ProviderAPICommand.execute(context, SET_UP_PROVIDER, setupInterface.getSelectedProvider());
+ if (getActivity() instanceof SetupActivityCallback) {
+ setupActivityCallback = (SetupActivityCallback) getActivity();
+ viewPagerCallback = new ViewPager2.OnPageChangeCallback() {
+ @Override
+ public void onPageSelected(int position) {
+ super.onPageSelected(position);
+ if (position == ConfigureProviderFragment.this.position) {
+ binding.detailContainer.setVisibility(PreferenceHelper.getUseSnowflake(getContext()) ? VISIBLE : GONE);
+ setupActivityCallback.setNavigationButtonHidden(true);
+ setupActivityCallback.setCancelButtonHidden(false);
+ ProviderAPICommand.execute(context, SET_UP_PROVIDER, setupActivityCallback.getSelectedProvider());
+ }
}
- }
- };
- setupInterface.registerOnPageChangeCallback(viewPagerCallback);
+ };
+ setupActivityCallback.registerOnPageChangeCallback(viewPagerCallback);
+ setupActivityCallback.registerCancelCallback(this);
+ }
TorStatusObservable.getInstance().addObserver(this);
+ EipSetupObserver.addListener(this);
}
@Override
public void onDetach() {
super.onDetach();
TorStatusObservable.getInstance().deleteObserver(this);
- setupInterface.removeOnPageChangeCallback(viewPagerCallback);
- setupInterface = null;
+ if (setupActivityCallback != null) {
+ setupActivityCallback.removeOnPageChangeCallback(viewPagerCallback);
+ setupActivityCallback.removeCancelCallback(this);
+ setupActivityCallback = null;
+ }
+ EipSetupObserver.removeListener(this);
}
protected void showConnectionDetails() {
- LinearLayoutManager layoutManager = new LinearLayoutManager(this.getContext());
- binding.connectionDetailLogs.setLayoutManager(layoutManager);
- torLogAdapter = new TorLogAdapter(getLastLogs());
- binding.connectionDetailLogs.setAdapter(torLogAdapter);
binding.connectionDetailLogs.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
@@ -150,6 +171,7 @@ public class ConfigureProviderFragment extends Fragment implements Observer {
setLogs(getLastTorLog(), getLastSnowflakeLog(), getLastLogs());
}
}
+ binding.tvProgressStatus.setText(TorStatusObservable.getStringForCurrentStatus(activity));
binding.progressSpinner.update(getBootstrapProgress());
});
}
@@ -160,4 +182,26 @@ public class ConfigureProviderFragment extends Fragment implements Observer {
binding.torState.setText(torLog);
binding.snowflakeState.setText(snowflakeLog);
}
+
+ @Override
+ public void onCanceled() {
+
+ }
+
+ @Override
+ public void handleEipEvent(Intent intent) {}
+
+ @Override
+ public void handleProviderApiEvent(Intent intent) {
+ int resultCode = intent.getIntExtra(BROADCAST_RESULT_CODE, RESULT_CANCELED);
+ Bundle resultData = intent.getParcelableExtra(BROADCAST_RESULT_KEY);
+ if (resultData == null) {
+ resultData = Bundle.EMPTY;
+ }
+ if (resultCode == PROVIDER_OK) {
+ Provider provider = resultData.getParcelable(PROVIDER_KEY);
+ setupActivityCallback.onProviderSelected(provider);
+ setupActivityCallback.onConfigurationSuccess();
+ }
+ }
} \ No newline at end of file