From 277f0f12ca505797daec42a5211885ac07b909f9 Mon Sep 17 00:00:00 2001 From: lalottacontinua Date: Wed, 27 Jun 2018 22:40:52 +0200 Subject: #8886 implemented in insecure as well --- .../se/leap/bitmaskclient/AddProviderActivity.java | 126 +++++++++++++++++++++ .../se/leap/bitmaskclient/NewProviderDialog.java | 126 --------------------- .../se/leap/bitmaskclient/ProviderApiManager.java | 3 +- .../leap/bitmaskclient/ProviderListActivity.java | 20 +--- .../res/layout-xlarge/new_provider_dialog.xml | 26 ----- .../insecure/res/layout/new_provider_dialog.xml | 24 ---- 6 files changed, 129 insertions(+), 196 deletions(-) create mode 100644 app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java delete mode 100644 app/src/insecure/java/se/leap/bitmaskclient/NewProviderDialog.java delete mode 100644 app/src/insecure/res/layout-xlarge/new_provider_dialog.xml delete mode 100644 app/src/insecure/res/layout/new_provider_dialog.xml (limited to 'app/src/insecure') diff --git a/app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java b/app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java new file mode 100644 index 00000000..a63174c8 --- /dev/null +++ b/app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java @@ -0,0 +1,126 @@ +package se.leap.bitmaskclient; + +import android.content.Intent; +import android.os.Bundle; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; + +import javax.inject.Inject; + +import butterknife.InjectView; +import se.leap.bitmaskclient.ProviderListContent.ProviderItem; + +public class AddProviderActivity extends ConfigWizardBaseActivity { + + final public static String TAG = "AddProviderActivity"; + final public static String EXTRAS_KEY_NEW_URL = "NEW_URL"; + + @InjectView(R.id.text_uri_error) + TextInputLayout urlError; + + @InjectView(R.id.text_uri) + TextInputEditText editUrl; + + @InjectView(R.id.danger_checkbox) + CheckBox checkboxDanger; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.a_add_provider); + if (this.getIntent().getExtras() != null) { + editUrl.setText(this.getIntent().getExtras().getString(ProviderListBaseActivity.EXTRAS_KEY_INVALID_URL)); + } + + checkboxDanger.setVisibility(View.VISIBLE); + checkboxDanger.setText(R.string.danger_checkbox); + checkboxDanger.setChecked(preferences.getBoolean(ProviderItem.DANGER_ON, false)); + + final Button saveButton = findViewById(R.id.button_save); + saveButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + preferences.edit().putBoolean(ProviderItem.DANGER_ON, checkboxDanger.isChecked()).apply(); + saveProvider(); + } + }); + + final Button cancelButton = findViewById(R.id.button_cancel); + cancelButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + finish(); + } + }); + setUpListeners(); + setUpInitialUI(); + } + + private void setUpInitialUI() { + setProviderHeaderText(R.string.add_provider); + hideProgressBar(); + } + + private void saveProvider() { + String entered_url = getURL(); + if (validURL(entered_url)) { + Intent intent = this.getIntent(); + intent.putExtra(EXTRAS_KEY_NEW_URL, entered_url); + setResult(RESULT_OK, intent); + finish(); + } else { + editUrl.setText(""); + urlError.setError(getString(R.string.not_valid_url_entered)); + } + } + + private void setUpListeners() { + + editUrl.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) { + } + + @Override + public void afterTextChanged(Editable s) { + if (!validURL(getURL())) { + urlError.setError(getString(R.string.not_valid_url_entered)); + } else { + urlError.setError(null); + } + } + }); + } + + private String getURL() { + String entered_url = editUrl.getText().toString().trim(); + if (entered_url.contains("www.")) entered_url = entered_url.replaceFirst("www.", ""); + if (!entered_url.startsWith("https://")) { + if (entered_url.startsWith("http://")) { + entered_url = entered_url.substring("http://".length()); + } + entered_url = "https://".concat(entered_url); + } + return entered_url; + } + + /** + * Checks if the entered url is valid or not. + * + * @param enteredUrl + * @return true if it's not empty nor contains only the protocol. + */ + boolean validURL(String enteredUrl) { + return android.util.Patterns.WEB_URL.matcher(enteredUrl).matches(); + } + + +} diff --git a/app/src/insecure/java/se/leap/bitmaskclient/NewProviderDialog.java b/app/src/insecure/java/se/leap/bitmaskclient/NewProviderDialog.java deleted file mode 100644 index d7d9eec5..00000000 --- a/app/src/insecure/java/se/leap/bitmaskclient/NewProviderDialog.java +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Copyright (c) 2013 LEAP Encryption Access Project and contributers - * - * 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 . - */ -package se.leap.bitmaskclient; - -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.DialogFragment; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.CheckBox; -import android.widget.EditText; -import android.widget.Toast; - -import butterknife.ButterKnife; -import butterknife.InjectView; -import se.leap.bitmaskclient.ProviderListContent.ProviderItem; - -/** - * Implements the new custom provider dialog. - * - * @author parmegv - */ -public class NewProviderDialog extends DialogFragment { - - final public static String TAG = "newProviderDialog"; - - @InjectView(R.id.new_provider_url) - EditText url_input_field; - - @InjectView(R.id.danger_checkbox) - CheckBox danger_checkbox; - - public interface NewProviderDialogInterface { - void showAndSelectProvider(String url_provider, boolean danger_on); - } - - NewProviderDialogInterface interface_with_ConfigurationWizard; - - @Override - public void onAttach(Context context) { - super.onAttach(context); - try { - interface_with_ConfigurationWizard = (NewProviderDialogInterface) context; - } catch (ClassCastException e) { - throw new ClassCastException(context.toString() - + " must implement NoticeDialogListener"); - } - } - - @Override - @NonNull - public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - LayoutInflater inflater = getActivity().getLayoutInflater(); - View view = inflater.inflate(R.layout.new_provider_dialog, null); - ButterKnife.inject(this, view); - Bundle arguments = getArguments(); - if (arguments != null) { - url_input_field.setText(arguments.getString(Provider.MAIN_URL, "")); - danger_checkbox.setActivated(arguments.getBoolean(ProviderItem.DANGER_ON, false)); - } - - builder.setView(view) - .setMessage(R.string.introduce_new_provider) - .setPositiveButton(R.string.save, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - saveProvider(); - } - }) - .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - // Create the AlertDialog object and return it - return builder.create(); - } - - private void saveProvider() { - String entered_url = url_input_field.getText().toString().trim(); - if (!entered_url.startsWith("https://")) { - if (entered_url.startsWith("http://")) { - entered_url = entered_url.substring("http://".length()); - } - entered_url = "https://".concat(entered_url); - } - boolean danger_on = danger_checkbox.isChecked(); - if (validURL(entered_url)) { - interface_with_ConfigurationWizard.showAndSelectProvider(entered_url, danger_on); - Toast.makeText(getActivity().getApplicationContext(), R.string.valid_url_entered, Toast.LENGTH_LONG).show(); - } else { - url_input_field.setText(""); - danger_checkbox.setChecked(false); - Toast.makeText(getActivity().getApplicationContext(), R.string.not_valid_url_entered, Toast.LENGTH_LONG).show(); - } - } - - /** - * Checks if the entered url is valid or not. - * - * @param entered_url - * @return true if it's not empty nor contains only the protocol. - */ - boolean validURL(String entered_url) { - //return !entered_url.isEmpty() && entered_url.matches("http[s]?://.+") && !entered_url.replaceFirst("http[s]?://", "").isEmpty(); - return android.util.Patterns.WEB_URL.matcher(entered_url).matches(); - } -} diff --git a/app/src/insecure/java/se/leap/bitmaskclient/ProviderApiManager.java b/app/src/insecure/java/se/leap/bitmaskclient/ProviderApiManager.java index 798b6433..61ae790b 100644 --- a/app/src/insecure/java/se/leap/bitmaskclient/ProviderApiManager.java +++ b/app/src/insecure/java/se/leap/bitmaskclient/ProviderApiManager.java @@ -141,8 +141,7 @@ public class ProviderApiManager extends ProviderApiManagerBase { providerDotJsonString = downloadFromApiUrlWithProviderCA("/provider.json", caCert, providerDefinition, dangerOn); if (ConfigHelper.checkErroneousDownload(providerDotJsonString) || !isValidJson(providerDotJsonString)) { - result.putString(ERRORS, resources.getString(malformed_url)); - result.putBoolean(BROADCAST_RESULT_KEY, false); + setErrorResult(result, malformed_url, null); return result; } diff --git a/app/src/insecure/java/se/leap/bitmaskclient/ProviderListActivity.java b/app/src/insecure/java/se/leap/bitmaskclient/ProviderListActivity.java index 67565d70..3190d651 100644 --- a/app/src/insecure/java/se/leap/bitmaskclient/ProviderListActivity.java +++ b/app/src/insecure/java/se/leap/bitmaskclient/ProviderListActivity.java @@ -50,29 +50,13 @@ public class ProviderListActivity extends ProviderListBaseActivity { preferences.edit().remove(ProviderItem.DANGER_ON).apply(); } - public void showAndSelectProvider(String provider_main_url, boolean danger_on) { - try { - provider = new Provider(new URL((provider_main_url))); - autoSelectProvider(provider, danger_on); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } - - private void autoSelectProvider(Provider provider, boolean danger_on) { - preferences.edit().putBoolean(ProviderItem.DANGER_ON, danger_on).apply(); - this.provider = provider; - onItemSelectedLogic(); - showProgressBar(); - } - /** * Asks ProviderAPI to download a new provider.json file * * @param danger_on tells if HTTPS client should bypass certificate errors */ public void setUpProvider(boolean danger_on) { - mConfigState.setAction(SETTING_UP_PROVIDER); + configState.setAction(SETTING_UP_PROVIDER); Bundle parameters = new Bundle(); parameters.putBoolean(ProviderItem.DANGER_ON, danger_on); @@ -85,7 +69,7 @@ public class ProviderListActivity extends ProviderListBaseActivity { */ @Override public void retrySetUpProvider(@NonNull Provider provider) { - mConfigState.setAction(SETTING_UP_PROVIDER); + configState.setAction(SETTING_UP_PROVIDER); ProviderAPICommand.execute(this, SET_UP_PROVIDER, provider); } diff --git a/app/src/insecure/res/layout-xlarge/new_provider_dialog.xml b/app/src/insecure/res/layout-xlarge/new_provider_dialog.xml deleted file mode 100644 index fc7d84ab..00000000 --- a/app/src/insecure/res/layout-xlarge/new_provider_dialog.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/insecure/res/layout/new_provider_dialog.xml b/app/src/insecure/res/layout/new_provider_dialog.xml deleted file mode 100644 index 8888a1d9..00000000 --- a/app/src/insecure/res/layout/new_provider_dialog.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - \ No newline at end of file -- cgit v1.2.3