summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java138
1 files changed, 138 insertions, 0 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java
new file mode 100644
index 00000000..45ba73dc
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java
@@ -0,0 +1,138 @@
+package se.leap.bitmaskclient.providersetup.fragments;
+
+import static se.leap.bitmaskclient.providersetup.fragments.viewmodel.ProviderSelectionViewModel.ADD_PROVIDER;
+
+import android.content.Context;
+import android.graphics.Typeface;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.RadioButton;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+
+import java.util.ArrayList;
+
+import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.base.models.Provider;
+import se.leap.bitmaskclient.databinding.FProviderSelectionBinding;
+import se.leap.bitmaskclient.providersetup.activities.SetupInterface;
+import se.leap.bitmaskclient.providersetup.fragments.viewmodel.ProviderSelectionViewModel;
+import se.leap.bitmaskclient.providersetup.fragments.viewmodel.ProviderSelectionViewModelFactory;
+
+public class ProviderSelectionFragment extends Fragment {
+
+ private ProviderSelectionViewModel viewModel;
+ private ArrayList<RadioButton> radioButtons;
+ private SetupInterface setupCallback;
+
+ public static ProviderSelectionFragment newInstance() {
+ return new ProviderSelectionFragment();
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ viewModel = new ViewModelProvider(this,
+ new ProviderSelectionViewModelFactory(
+ getContext().getApplicationContext().getAssets(),
+ getContext().getExternalFilesDir(null))).
+ get(ProviderSelectionViewModel.class);
+ }
+
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ FProviderSelectionBinding binding = FProviderSelectionBinding.inflate(inflater, container, false);
+
+ radioButtons = new ArrayList<>();
+ for (int i = 0; i < viewModel.size(); i++) {
+ Provider provider = viewModel.getProvider(i);
+ RadioButton radioButton = new RadioButton(binding.getRoot().getContext());
+ radioButton.setText(provider.getDomain());
+ radioButton.setId(i);
+ binding.providerRadioGroup.addView(radioButton);
+ radioButtons.add(radioButton);
+ }
+ RadioButton radioButton = new RadioButton(binding.getRoot().getContext());
+ radioButton.setText(getText(R.string.add_provider));
+ radioButton.setId(ADD_PROVIDER);
+ binding.providerRadioGroup.addView(radioButton);
+ radioButtons.add(radioButton);
+
+ binding.editCustomProvider.setVisibility(viewModel.getEditProviderVisibility());
+ binding.providerRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
+ viewModel.setSelected(checkedId);
+ for (RadioButton rb : radioButtons) {
+ rb.setTypeface(Typeface.DEFAULT, rb.getId() == checkedId ? Typeface.BOLD : Typeface.NORMAL);
+ }
+ binding.providerDescription.setText(viewModel.getProviderDescription(getContext()));
+ binding.editCustomProvider.setVisibility(viewModel.getEditProviderVisibility());
+ if (setupCallback != null) {
+ setupCallback.onSetupStepValidationChanged(viewModel.isValidConfig());
+ if (checkedId != ADD_PROVIDER) {
+ setupCallback.onProviderSelected(viewModel.getProvider(checkedId));
+ } else if (viewModel.isValidConfig()) {
+ setupCallback.onProviderSelected(new Provider(binding.editCustomProvider.getText().toString()));
+ }
+ }
+ });
+ binding.providerRadioGroup.check(viewModel.getSelected());
+
+ binding.editCustomProvider.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ viewModel.setCustomUrl(s.toString());
+ if (setupCallback == null) return;
+ setupCallback.onSetupStepValidationChanged(viewModel.isValidConfig());
+ if (viewModel.isValidConfig()) {
+ setupCallback.onProviderSelected(new Provider(s.toString()));
+ }
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {}
+ });
+ return binding.getRoot();
+ }
+
+ @Override
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+ if (getActivity() instanceof SetupInterface) {
+ setupCallback = (SetupInterface) getActivity();
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ setupCallback = null;
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ radioButtons = null;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ setupCallback.onSetupStepValidationChanged(viewModel.isValidConfig());
+ }
+} \ No newline at end of file