From 2d785c98c0af74a3e26ecb4bad2451012299dc4b Mon Sep 17 00:00:00 2001 From: Norbel AMBANUMBEN Date: Fri, 11 Oct 2024 21:54:31 +0100 Subject: feat(invite-code): register scheme for `obfsvpnintro` --- app/src/main/AndroidManifest.xml | 15 ++++++ .../leap/bitmaskclient/base/models/Provider.java | 4 ++ .../providersetup/activities/SetupActivity.java | 55 +++++++++++++++++++++- .../fragments/ProviderSelectionFragment.java | 12 ++++- 4 files changed, 84 insertions(+), 2 deletions(-) (limited to 'app/src') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cc876ecc..08433778 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,6 +39,21 @@ android:screenOrientation="portrait" android:exported="false" /> + + + + + + + + + + + + + * If the current fragment is a ProviderSelectionFragment, it will notify the fragment that the provider + * selection has changed. + *

+ * + * + * @param intent The incoming intent to be managed. + * @see #onProviderSelected(Provider) + * @see ProviderSelectionFragment#providerSelectionChanged() + */ + private void manageIntent(Intent intent) { + if (Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() != null) { + String scheme = intent.getData().getScheme(); + + if (Objects.equals(scheme, "obfsvpnintro")) { + try { + onProviderSelected(new Provider(Introducer.fromUrl(intent.getData().toString()))); + binding.viewPager.setCurrentItem(adapter.getFragmentPostion(PROVIDER_SELECTION_FRAGMENT)); + binding.viewPager.post(() -> { + /** + * @see FragmentStateAdapter#saveState() + */ + String fragmentTag = "f" + binding.viewPager.getCurrentItem(); + Fragment fragment = getSupportFragmentManager().findFragmentByTag(fragmentTag); + if (fragment instanceof ProviderSelectionFragment){ + ((ProviderSelectionFragment) fragment).providerSelectionChanged(); + } + }); + } catch (Exception e) { + Log.d("invite", e.getMessage()); + } + } + } + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + manageIntent(intent); } @Override 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 index 24da4691..e5c19e28 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/ProviderSelectionFragment.java @@ -155,7 +155,17 @@ public class ProviderSelectionFragment extends BaseSetupFragment implements Canc binding.getRoot().smoothScrollTo(binding.editCustomProvider.getLeft(), binding.getRoot().getBottom()); } }); - binding.providerRadioGroup.check(viewModel.getSelected()); + providerSelectionChanged(); + } + + public void providerSelectionChanged(){ + Provider provider = setupActivityCallback.getSelectedProvider(); + if (provider != null && provider.hasIntroducer()) { + binding.providerRadioGroup.check(INVITE_CODE_PROVIDER); + binding.editCustomProvider.setText(provider.getIntroducer().toUrl()); + } else { + binding.providerRadioGroup.check(viewModel.getSelected()); + } } private void providerSelected(String string, int checkedId) { -- cgit v1.2.3