From 20cde35143f5e9f2808e361ebb674c3bb26feafe Mon Sep 17 00:00:00 2001 From: l Date: Sat, 12 May 2018 00:21:37 +0200 Subject: added NewProviderActivity basics --- .../main/java/se/leap/bitmaskclient/Constants.java | 1 + .../bitmaskclient/ProviderListBaseActivity.java | 36 ++++++--- .../bitmaskclient/ProviderSetupFailedDialog.java | 16 +++- app/src/main/res/layout/a_add_provider.xml | 47 +++++++++++ app/src/main/res/layout/v_add_provider.xml | 41 ++++++++++ app/src/main/res/values/strings.xml | 1 + .../se/leap/bitmaskclient/AddProviderActivity.java | 92 ++++++++++++++++++++++ 7 files changed, 223 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/layout/a_add_provider.xml create mode 100644 app/src/main/res/layout/v_add_provider.xml create mode 100644 app/src/production/java/se/leap/bitmaskclient/AddProviderActivity.java diff --git a/app/src/main/java/se/leap/bitmaskclient/Constants.java b/app/src/main/java/se/leap/bitmaskclient/Constants.java index d719e8d3..c79ce87b 100644 --- a/app/src/main/java/se/leap/bitmaskclient/Constants.java +++ b/app/src/main/java/se/leap/bitmaskclient/Constants.java @@ -19,6 +19,7 @@ public interface Constants { int REQUEST_CODE_CONFIGURE_LEAP = 0; int REQUEST_CODE_SWITCH_PROVIDER = 1; int REQUEST_CODE_LOG_IN = 2; + int REQUEST_CODE_ADD_PROVIDER = 3; ////////////////////////////////////////////// diff --git a/app/src/main/java/se/leap/bitmaskclient/ProviderListBaseActivity.java b/app/src/main/java/se/leap/bitmaskclient/ProviderListBaseActivity.java index 5f73a074..756264ec 100644 --- a/app/src/main/java/se/leap/bitmaskclient/ProviderListBaseActivity.java +++ b/app/src/main/java/se/leap/bitmaskclient/ProviderListBaseActivity.java @@ -1,16 +1,16 @@ /** * Copyright (c) 2017 LEAP Encryption Access Project and contributors - * + *

* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + *

* This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + *

* You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -50,6 +50,7 @@ import static se.leap.bitmaskclient.Constants.BROADCAST_PROVIDER_API_EVENT; import static se.leap.bitmaskclient.Constants.BROADCAST_RESULT_CODE; import static se.leap.bitmaskclient.Constants.BROADCAST_RESULT_KEY; import static se.leap.bitmaskclient.Constants.PROVIDER_KEY; +import static se.leap.bitmaskclient.Constants.REQUEST_CODE_ADD_PROVIDER; import static se.leap.bitmaskclient.Constants.REQUEST_CODE_CONFIGURE_LEAP; import static se.leap.bitmaskclient.ProviderAPI.CORRECTLY_DOWNLOADED_VPN_CERTIFICATE; import static se.leap.bitmaskclient.ProviderAPI.DOWNLOAD_VPN_CERTIFICATE; @@ -88,7 +89,7 @@ public abstract class ProviderListBaseActivity extends ConfigWizardBaseActivity final protected static String PROVIDER_NOT_SET = "PROVIDER NOT SET"; final protected static String SETTING_UP_PROVIDER = "PROVIDER GETS SET"; - final private static String SHOWING_PROVIDER_DETAILS = "SHOWING PROVIDER DETAILS"; + final private static String SHOWING_PROVIDER_DETAILS = "SHOWING PROVIDER DETAILS"; final private static String PENDING_SHOW_FAILED_DIALOG = "SHOW FAILED DIALOG PENDING"; final private static String SHOW_FAILED_DIALOG = "SHOW FAILED DIALOG"; final private static String REASON_TO_FAIL = "REASON TO FAIL"; @@ -101,6 +102,7 @@ public abstract class ProviderListBaseActivity extends ConfigWizardBaseActivity private boolean isActivityShowing; private String reasonToFail; + private boolean testNewURL; public abstract void retrySetUpProvider(@NonNull Provider provider); @@ -191,6 +193,11 @@ public abstract class ProviderListBaseActivity extends ConfigWizardBaseActivity setResult(resultCode, data); finish(); } + } else if (requestCode == REQUEST_CODE_ADD_PROVIDER) { + if (resultCode == RESULT_OK) { + testNewURL = true; + showAndSelectProvider(data.getStringExtra("new_url")); + } } } @@ -216,6 +223,7 @@ public abstract class ProviderListBaseActivity extends ConfigWizardBaseActivity } void handleProviderSetupFailed(Bundle resultData) { + reasonToFail = resultData.getString(ERRORS); showDownloadFailedDialog(); } @@ -304,9 +312,21 @@ public abstract class ProviderListBaseActivity extends ConfigWizardBaseActivity */ public void addAndSelectNewProvider() { FragmentTransaction fragmentTransaction = fragmentManager.removePreviousFragment(NewProviderDialog.TAG); + Intent intent = new Intent(this, AddProviderActivity.class); + startActivityForResult(intent, REQUEST_CODE_ADD_PROVIDER); + //ToDo: Delete NewProviderDialog() + } - DialogFragment newFragment = new NewProviderDialog(); - newFragment.show(fragmentTransaction, NewProviderDialog.TAG); + /** + * Open the new provider dialog + */ + @Override + public void addAndSelectNewProvider(String url) { + testNewURL = false; + FragmentTransaction fragmentTransaction = fragmentManager.removePreviousFragment(NewProviderDialog.TAG); + Intent intent = new Intent(this, AddProviderActivity.class); + intent.putExtra("invalid_url", url); + startActivityForResult(intent, REQUEST_CODE_ADD_PROVIDER); } /** @@ -319,7 +339,7 @@ public abstract class ProviderListBaseActivity extends ConfigWizardBaseActivity DialogFragment newFragment; try { JSONObject errorJson = new JSONObject(reasonToFail); - newFragment = ProviderSetupFailedDialog.newInstance(provider, errorJson); + newFragment = ProviderSetupFailedDialog.newInstance(provider, errorJson, testNewURL); } catch (JSONException e) { e.printStackTrace(); newFragment = ProviderSetupFailedDialog.newInstance(provider, reasonToFail); @@ -339,8 +359,6 @@ public abstract class ProviderListBaseActivity extends ConfigWizardBaseActivity * Once selected a provider, this fragment offers the user to log in, * use it anonymously (if possible) * or cancel his/her election pressing the back button. - * - * */ public void showProviderDetails() { // show only if current activity is shown diff --git a/app/src/main/java/se/leap/bitmaskclient/ProviderSetupFailedDialog.java b/app/src/main/java/se/leap/bitmaskclient/ProviderSetupFailedDialog.java index 5bd9575e..3d0bdbdb 100644 --- a/app/src/main/java/se/leap/bitmaskclient/ProviderSetupFailedDialog.java +++ b/app/src/main/java/se/leap/bitmaskclient/ProviderSetupFailedDialog.java @@ -52,7 +52,8 @@ public class ProviderSetupFailedDialog extends DialogFragment { DEFAULT, ERROR_CORRUPTED_PROVIDER_JSON, ERROR_INVALID_CERTIFICATE, - ERROR_CERTIFICATE_PINNING + ERROR_CERTIFICATE_PINNING, + ERROR_NEW_URL_NO_VPN_PROVIDER } /** @@ -68,7 +69,7 @@ public class ProviderSetupFailedDialog extends DialogFragment { /** * @return a new instance of this DialogFragment. */ - public static DialogFragment newInstance(Provider provider, JSONObject errorJson) { + public static DialogFragment newInstance(Provider provider, JSONObject errorJson, boolean testNewURL) { ProviderSetupFailedDialog dialogFragment = new ProviderSetupFailedDialog(); dialogFragment.provider = provider; try { @@ -81,6 +82,8 @@ public class ProviderSetupFailedDialog extends DialogFragment { if (errorJson.has(ERRORID)) { dialogFragment.downloadError = valueOf(errorJson.getString(ERRORID)); + } else if (testNewURL) { + dialogFragment.downloadError = DOWNLOAD_ERRORS.ERROR_NEW_URL_NO_VPN_PROVIDER; } } catch (Exception e) { e.printStackTrace(); @@ -123,6 +126,13 @@ public class ProviderSetupFailedDialog extends DialogFragment { } }); break; + case ERROR_NEW_URL_NO_VPN_PROVIDER: + builder.setPositiveButton(R.string.retry, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + interfaceWithConfigurationWizard.addAndSelectNewProvider(provider.getApiUrlString()); + } + }); + break; default: builder.setPositiveButton(R.string.retry, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { @@ -142,6 +152,8 @@ public class ProviderSetupFailedDialog extends DialogFragment { void cancelSettingUpProvider(); void updateProviderDetails(); + + void addAndSelectNewProvider(String url); } DownloadFailedDialogInterface interfaceWithConfigurationWizard; diff --git a/app/src/main/res/layout/a_add_provider.xml b/app/src/main/res/layout/a_add_provider.xml new file mode 100644 index 00000000..14bf8482 --- /dev/null +++ b/app/src/main/res/layout/a_add_provider.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + +