summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/ProviderCredentialsBaseActivity.java
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2020-12-29 00:54:08 +0100
committercyBerta <cyberta@riseup.net>2020-12-29 00:54:08 +0100
commit6b032b751324a30120cfaabe88940f95171df11f (patch)
treeb6b26b84358726a02e27558562e7e9ea70a7aaa0 /app/src/main/java/se/leap/bitmaskclient/ProviderCredentialsBaseActivity.java
parent16da1eeb5180cbb4a0d916785a08ccbcd3c1d74e (diff)
new year cleanup: restructure messy project
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/ProviderCredentialsBaseActivity.java')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/ProviderCredentialsBaseActivity.java475
1 files changed, 0 insertions, 475 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/ProviderCredentialsBaseActivity.java b/app/src/main/java/se/leap/bitmaskclient/ProviderCredentialsBaseActivity.java
deleted file mode 100644
index c61caead..00000000
--- a/app/src/main/java/se/leap/bitmaskclient/ProviderCredentialsBaseActivity.java
+++ /dev/null
@@ -1,475 +0,0 @@
-/**
- * Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
- */
-package se.leap.bitmaskclient;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Build;
-import android.os.Build.VERSION_CODES;
-import android.os.Bundle;
-import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
-import com.google.android.material.textfield.TextInputEditText;
-import com.google.android.material.textfield.TextInputLayout;
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-import androidx.appcompat.widget.AppCompatButton;
-import androidx.appcompat.widget.AppCompatTextView;
-import android.text.Editable;
-import android.text.Html;
-import android.text.TextWatcher;
-import android.text.method.LinkMovementMethod;
-import android.text.util.Linkify;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.TextView;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import butterknife.InjectView;
-import butterknife.OnClick;
-import se.leap.bitmaskclient.Constants.CREDENTIAL_ERRORS;
-
-import static android.text.TextUtils.isEmpty;
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
-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.CREDENTIALS_PASSWORD;
-import static se.leap.bitmaskclient.Constants.CREDENTIALS_USERNAME;
-import static se.leap.bitmaskclient.Constants.PROVIDER_KEY;
-import static se.leap.bitmaskclient.ProviderAPI.DOWNLOAD_VPN_CERTIFICATE;
-import static se.leap.bitmaskclient.ProviderAPI.LOG_IN;
-import static se.leap.bitmaskclient.ProviderAPI.SIGN_UP;
-import static se.leap.bitmaskclient.ProviderAPI.USER_MESSAGE;
-
-/**
- * Base Activity for activities concerning a provider interaction
- *
- * Created by fupduck on 09.01.18.
- */
-
-public abstract class ProviderCredentialsBaseActivity extends ConfigWizardBaseActivity {
-
- final protected static String TAG = ProviderCredentialsBaseActivity.class.getName();
-
- final private static String ACTIVITY_STATE = "ACTIVITY STATE";
-
- final private static String SHOWING_FORM = "SHOWING_FORM";
- final private static String PERFORMING_ACTION = "PERFORMING_ACTION";
- final private static String USERNAME_ERROR = "USERNAME_ERROR";
- final private static String PASSWORD_ERROR = "PASSWORD_ERROR";
- final private static String PASSWORD_VERIFICATION_ERROR = "PASSWORD_VERIFICATION_ERROR";
-
- protected Intent mConfigState = new Intent(SHOWING_FORM);
- protected ProviderAPIBroadcastReceiver providerAPIBroadcastReceiver;
-
- @InjectView(R.id.provider_credentials_user_message)
- AppCompatTextView userMessage;
-
- @InjectView(R.id.provider_credentials_username)
- TextInputEditText usernameField;
-
- @InjectView(R.id.provider_credentials_password)
- TextInputEditText passwordField;
-
- @InjectView(R.id.provider_credentials_password_verification)
- TextInputEditText passwordVerificationField;
-
- @InjectView(R.id.provider_credentials_username_error)
- TextInputLayout usernameError;
-
- @InjectView(R.id.provider_credentials_password_error)
- TextInputLayout passwordError;
-
- @InjectView(R.id.provider_credentials_password_verification_error)
- TextInputLayout passwordVerificationError;
-
- @InjectView(R.id.button)
- AppCompatButton button;
-
- private boolean isUsernameError = false;
- private boolean isPasswordError = false;
- private boolean isVerificationError = false;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.a_provider_credentials);
- providerAPIBroadcastReceiver = new ProviderAPIBroadcastReceiver();
-
- IntentFilter updateIntentFilter = new IntentFilter(BROADCAST_PROVIDER_API_EVENT);
- updateIntentFilter.addCategory(Intent.CATEGORY_DEFAULT);
- LocalBroadcastManager.getInstance(this).registerReceiver(providerAPIBroadcastReceiver, updateIntentFilter);
-
- setUpListeners();
- restoreState(savedInstanceState);
-
- String userMessageString = getIntent().getStringExtra(USER_MESSAGE);
- if (userMessageString != null) {
- userMessage.setText(userMessageString);
- userMessage.setVisibility(VISIBLE);
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- String action = mConfigState.getAction();
- if (action == null) {
- return;
- }
-
- if(action.equalsIgnoreCase(PERFORMING_ACTION)) {
- showProgressBar();
- }
- }
-
- protected void restoreState(Bundle savedInstance) {
- super.restoreState(savedInstance);
- if (savedInstance == null) {
- return;
- }
- if (savedInstance.getString(USER_MESSAGE) != null) {
- userMessage.setText(savedInstance.getString(USER_MESSAGE));
- userMessage.setVisibility(VISIBLE);
- }
- updateUsernameError(savedInstance.getString(USERNAME_ERROR));
- updatePasswordError(savedInstance.getString(PASSWORD_ERROR));
- updateVerificationError(savedInstance.getString(PASSWORD_VERIFICATION_ERROR));
- if (savedInstance.getString(ACTIVITY_STATE) != null) {
- mConfigState.setAction(savedInstance.getString(ACTIVITY_STATE));
- }
- }
-
- private void updateUsernameError(String usernameErrorString) {
- usernameError.setError(usernameErrorString);
- isUsernameError = usernameErrorString != null;
- updateButton();
- }
-
- private void updatePasswordError(String passwordErrorString) {
- passwordError.setError(passwordErrorString);
- isPasswordError = passwordErrorString != null;
- updateButton();
- }
-
- private void updateVerificationError(String verificationErrorString) {
- passwordVerificationError.setError(verificationErrorString);
- isVerificationError = verificationErrorString != null;
- updateButton();
- }
-
- private void updateButton() {
- button.setEnabled(!isPasswordError &&
- !isUsernameError &&
- !isVerificationError &&
- !isEmpty(passwordField.getText()) &&
- !isEmpty(usernameField.getText()) &&
- !(passwordVerificationField.getVisibility() == VISIBLE &&
- getPasswordVerification().length() == 0));
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- outState.putString(ACTIVITY_STATE, mConfigState.getAction());
- if (userMessage.getText() != null && userMessage.getVisibility() == VISIBLE) {
- outState.putString(USER_MESSAGE, userMessage.getText().toString());
- }
- if (usernameError.getError() != null) {
- outState.putString(USERNAME_ERROR, usernameError.getError().toString());
- }
- if (passwordError.getError() != null) {
- outState.putString(PASSWORD_ERROR, passwordError.getError().toString());
- }
- if (passwordVerificationError.getError() != null) {
- outState.putString(PASSWORD_VERIFICATION_ERROR, passwordVerificationError.getError().toString());
- }
-
- super.onSaveInstanceState(outState);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (providerAPIBroadcastReceiver != null)
- LocalBroadcastManager.getInstance(this).unregisterReceiver(providerAPIBroadcastReceiver);
- }
-
- @OnClick(R.id.button)
- void handleButton() {
- mConfigState.setAction(PERFORMING_ACTION);
- hideKeyboard();
- showProgressBar();
- }
-
- protected void setButtonText(@StringRes int buttonText) {
- button.setText(buttonText);
- }
-
- String getUsername() {
- String username = usernameField.getText().toString();
- String providerDomain = provider.getDomain();
- if (username.endsWith(providerDomain)) {
- try {
- return username.split("@" + providerDomain)[0];
- } catch (ArrayIndexOutOfBoundsException e) {
- return "";
- }
- }
- return username;
- }
-
- String getPassword() {
- return passwordField.getText().toString();
- }
-
- String getPasswordVerification() {
- return passwordVerificationField.getText().toString();
- }
-
- void login(String username, String password) {
-
- Bundle parameters = bundleUsernameAndPassword(username, password);
- ProviderAPICommand.execute(this, LOG_IN, parameters, provider);
- }
-
- public void signUp(String username, String password) {
-
- Bundle parameters = bundleUsernameAndPassword(username, password);
- ProviderAPICommand.execute(this, SIGN_UP, parameters, provider);
- }
-
- void downloadVpnCertificate(Provider handledProvider) {
- provider = handledProvider;
- ProviderAPICommand.execute(this, DOWNLOAD_VPN_CERTIFICATE, provider);
- }
-
- protected Bundle bundleUsernameAndPassword(String username, String password) {
- Bundle parameters = new Bundle();
- if (!username.isEmpty())
- parameters.putString(CREDENTIALS_USERNAME, username);
- if (!password.isEmpty())
- parameters.putString(CREDENTIALS_PASSWORD, password);
- return parameters;
- }
-
- private void setUpListeners() {
- usernameField.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 (getUsername().equalsIgnoreCase("")) {
- s.clear();
- updateUsernameError(getString(R.string.username_ask));
- } else {
- updateUsernameError(null);
- String suffix = "@" + provider.getDomain();
- if (!usernameField.getText().toString().endsWith(suffix)) {
- s.append(suffix);
- usernameField.setSelection(usernameField.getText().toString().indexOf('@'));
- }
- }
- }
- });
- usernameField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- if (actionId == IME_ACTION_DONE
- || event != null && event.getAction() == KeyEvent.ACTION_DOWN
- && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
- passwordField.requestFocus();
- return true;
- }
- return false;
- }
- });
-
- passwordField.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(getPassword().length() < 8) {
- updatePasswordError(getString(R.string.error_not_valid_password_user_message));
- } else {
- updatePasswordError(null);
- }
- }
- });
- passwordField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- if (actionId == IME_ACTION_DONE
- || event != null && event.getAction() == KeyEvent.ACTION_DOWN
- && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
- if (passwordVerificationField.getVisibility() == VISIBLE) {
- passwordVerificationField.requestFocus();
- } else {
- button.performClick();
- }
- return true;
- }
- return false;
- }
- });
-
- passwordVerificationField.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(getPassword().equals(getPasswordVerification())) {
- updateVerificationError(null);
- } else {
- updateVerificationError(getString(R.string.password_mismatch));
- }
- }
- });
- passwordVerificationField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- if (actionId == IME_ACTION_DONE
- || event != null && event.getAction() == KeyEvent.ACTION_DOWN
- && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
- button.performClick();
- return true;
- }
- return false;
- }
- });
- }
-
- private void hideKeyboard() {
- InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
- if (imm != null) {
- imm.hideSoftInputFromWindow(passwordField.getWindowToken(), 0);
- }
- }
-
- private void handleReceivedErrors(Bundle arguments) {
- if (arguments.containsKey(CREDENTIAL_ERRORS.PASSWORD_INVALID_LENGTH.toString())) {
- updatePasswordError(getString(R.string.error_not_valid_password_user_message));
- } else if (arguments.containsKey(CREDENTIAL_ERRORS.RISEUP_WARNING.toString())) {
- userMessage.setVisibility(VISIBLE);
- userMessage.setText(R.string.login_riseup_warning);
- }
- if (arguments.containsKey(CREDENTIALS_USERNAME)) {
- String username = arguments.getString(CREDENTIALS_USERNAME);
- usernameField.setText(username);
- }
- if (arguments.containsKey(CREDENTIAL_ERRORS.USERNAME_MISSING.toString())) {
- updateUsernameError(getString(R.string.username_ask));
- }
- if (arguments.containsKey(USER_MESSAGE)) {
- String userMessageString = arguments.getString(USER_MESSAGE);
- try {
- userMessageString = new JSONArray(userMessageString).getString(0);
- } catch (JSONException e) {
- e.printStackTrace();
- }
-
- if (Build.VERSION.SDK_INT >= VERSION_CODES.N) {
- userMessage.setText(Html.fromHtml(userMessageString, Html.FROM_HTML_MODE_LEGACY));
- } else {
- userMessage.setText(Html.fromHtml(userMessageString));
- }
- Linkify.addLinks(userMessage, Linkify.ALL);
- userMessage.setMovementMethod(LinkMovementMethod.getInstance());
- userMessage.setVisibility(VISIBLE);
- } else if (userMessage.getVisibility() != GONE) {
- userMessage.setVisibility(GONE);
- }
-
- if (!usernameField.getText().toString().isEmpty() && passwordField.isFocusable())
- passwordField.requestFocus();
-
- mConfigState.setAction(SHOWING_FORM);
- hideProgressBar();
- }
-
- private void successfullyFinished(Provider handledProvider) {
- provider = handledProvider;
- Intent resultData = new Intent();
- resultData.putExtra(Provider.KEY, provider);
- setResult(RESULT_OK, resultData);
- finish();
- }
-
- //TODO: replace with EipSetupObserver
- public class ProviderAPIBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d(TAG, "received Broadcast");
-
- String action = intent.getAction();
- if (action == null || !action.equalsIgnoreCase(BROADCAST_PROVIDER_API_EVENT)) {
- return;
- }
-
- int resultCode = intent.getIntExtra(BROADCAST_RESULT_CODE, RESULT_CANCELED);
- Bundle resultData = intent.getParcelableExtra(BROADCAST_RESULT_KEY);
- Provider handledProvider = resultData.getParcelable(PROVIDER_KEY);
-
- switch (resultCode) {
- case ProviderAPI.SUCCESSFUL_SIGNUP:
- String password = resultData.getString(CREDENTIALS_PASSWORD);
- String username = resultData.getString(CREDENTIALS_USERNAME);
- login(username, password);
- break;
- case ProviderAPI.SUCCESSFUL_LOGIN:
- downloadVpnCertificate(handledProvider);
- break;
- case ProviderAPI.FAILED_LOGIN:
- case ProviderAPI.FAILED_SIGNUP:
- handleReceivedErrors((Bundle) intent.getParcelableExtra(BROADCAST_RESULT_KEY));
- break;
-
- case ProviderAPI.INCORRECTLY_DOWNLOADED_VPN_CERTIFICATE:
- // error handling takes place in MainActivity
- case ProviderAPI.CORRECTLY_DOWNLOADED_VPN_CERTIFICATE:
- successfullyFinished(handledProvider);
- break;
- }
- }
- }
-}