~singpolyma/cheogram-android

5059358135130e1853ac4c05c338a48159710210 — Phillip Davis 6 months ago 6065d1b
fix NPE by refactoring onClick
1 files changed, 112 insertions(+), 109 deletions(-)

M src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
M src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java => src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +112 -109
@@ 55,6 55,7 @@ import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;



@@ 190,42 191,15 @@ public class EditAccountActivity extends OmemoActivity

                @Override
                public void onClick(final View v) {
                    final String password = binding.accountPassword.getText().toString();
                    final boolean wasDisabled =
                            mAccount != null && mAccount.getStatus() == Account.State.DISABLED;
                    final boolean accountInfoEdited = accountInfoEdited();
                    final var passwordText = binding.accountPassword.getText();
                    if (passwordText == null) return;
                    final String password = passwordText.toString();

                    ColorDrawable previewColor = (ColorDrawable) binding.colorPreview.getBackground();
                    if (previewColor != null && previewColor.getColor() != mAccount.getColor(isDark())) {
                        mAccount.setColor(previewColor.getColor());
                    }
                    final boolean registerNewAccount =
                            Objects.requireNonNullElseGet(
                                    mForceRegister,
                                    () -> binding.accountRegisterNew.isChecked() && !Config.DISALLOW_REGISTRATION_IN_UI);

                    if (mInitMode && mAccount != null) {
                        mAccount.setOption(Account.OPTION_DISABLED, false);
                    }
                    if (mAccount != null
                            && Arrays.asList(Account.State.DISABLED, Account.State.LOGGED_OUT)
                                    .contains(mAccount.getStatus())
                            && !accountInfoEdited) {
                        mAccount.setOption(Account.OPTION_SOFT_DISABLED, false);
                        mAccount.setOption(Account.OPTION_DISABLED, false);
                        if (!xmppConnectionService.updateAccount(mAccount)) {
                            Toast.makeText(
                                            EditAccountActivity.this,
                                            R.string.unable_to_update_account,
                                            Toast.LENGTH_SHORT)
                                    .show();
                        }
                        return;
                    }
                    final boolean registerNewAccount;
                    if (mForceRegister != null) {
                        registerNewAccount = mForceRegister;
                    } else {
                        registerNewAccount =
                                binding.accountRegisterNew.isChecked()
                                        && !Config.DISALLOW_REGISTRATION_IN_UI;
                    }
                    if (mUsernameMode && binding.accountJid.getText().toString().contains("@")) {
                        binding.accountJidLayout.setError(getString(R.string.invalid_username));
                        removeErrorsOnAllBut(binding.accountJidLayout);


@@ 233,60 207,6 @@ public class EditAccountActivity extends OmemoActivity
                        return;
                    }

                    XmppConnection connection =
                            mAccount == null ? null : mAccount.getXmppConnection();
                    final boolean startOrbot =
                            mAccount != null
                                    && mAccount.getStatus() == Account.State.TOR_NOT_AVAILABLE;
                    if (startOrbot) {
                        if (TorServiceUtils.isOrbotInstalled(EditAccountActivity.this)) {
                            TorServiceUtils.startOrbot(EditAccountActivity.this, REQUEST_ORBOT);
                        } else {
                            TorServiceUtils.downloadOrbot(EditAccountActivity.this, REQUEST_ORBOT);
                        }
                        return;
                    }

                    if (inNeedOfSaslAccept()) {
                        mAccount.resetPinnedMechanism();
                        if (!xmppConnectionService.updateAccount(mAccount)) {
                            Toast.makeText(
                                            EditAccountActivity.this,
                                            R.string.unable_to_update_account,
                                            Toast.LENGTH_SHORT)
                                    .show();
                        }
                        return;
                    }

                    final boolean openRegistrationUrl =
                            registerNewAccount
                                    && !accountInfoEdited
                                    && mAccount != null
                                    && mAccount.getStatus() == Account.State.REGISTRATION_WEB;
                    final boolean openPaymentUrl =
                            mAccount != null
                                    && mAccount.getStatus() == Account.State.PAYMENT_REQUIRED;
                    final boolean redirectionWorthyStatus = openPaymentUrl || openRegistrationUrl;
                    final HttpUrl url =
                            connection != null && redirectionWorthyStatus
                                    ? connection.getRedirectionUrl()
                                    : null;
                    if (url != null && !wasDisabled) {
                        try {
                            startActivity(
                                    new Intent(Intent.ACTION_VIEW, Uri.parse(url.toString())));
                            return;
                        } catch (ActivityNotFoundException e) {
                            Toast.makeText(
                                            EditAccountActivity.this,
                                            R.string.application_found_to_open_website,
                                            Toast.LENGTH_SHORT)
                                    .show();
                            return;
                        }
                    }

                    final Jid jid;
                    try {
                        if (mUsernameMode) {


@@ 353,40 273,123 @@ public class EditAccountActivity extends OmemoActivity
                        binding.accountJid.requestFocus();
                        return;
                    }
                    if (mAccount != null) {
                        if (mAccount.isOptionSet(Account.OPTION_MAGIC_CREATE)) {
                            mAccount.setOption(
                                    Account.OPTION_MAGIC_CREATE,
                                    mAccount.getPassword().contains(password));

                    final boolean isNewAccount;
                    if (mAccount == null) {
                        if (xmppConnectionService.findAccountByJid(jid) != null) {
                            binding.accountJidLayout.setError(
                                    getString(R.string.account_already_exists));
                            removeErrorsOnAllBut(binding.accountJidLayout);
                            binding.accountJid.requestFocus();
                            return;
                        }
                        mAccount.setJid(jid);
                        mAccount.setPort(numericPort);
                        mAccount.setHostname(hostname);
                        binding.accountJidLayout.setError(null);
                        mAccount.setPassword(password);
                        mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount);
                        mAccount = new Account(jid.asBareJid(), password);
                        isNewAccount = true;
                    } else {
                        isNewAccount = false;
                    }

                    if (mAccount.isOptionSet(Account.OPTION_MAGIC_CREATE)) {
                        mAccount.setOption(
                                Account.OPTION_MAGIC_CREATE,
                                mAccount.getPassword().contains(password));
                    }
                    mAccount.setJid(jid);
                    mAccount.setPort(numericPort);
                    mAccount.setHostname(hostname);
                    mAccount.setPassword(password);
                    mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount);

                    final boolean wasDisabled = mAccount.getStatus() == Account.State.DISABLED;
                    final boolean accountInfoEdited = accountInfoEdited();

                    // Check TOR FIRST, before any network operations
                    final boolean startOrbot = mAccount.getStatus() == Account.State.TOR_NOT_AVAILABLE;
                    if (startOrbot) {
                        if (TorServiceUtils.isOrbotInstalled(EditAccountActivity.this)) {
                            TorServiceUtils.startOrbot(EditAccountActivity.this, REQUEST_ORBOT);
                        } else {
                            TorServiceUtils.downloadOrbot(EditAccountActivity.this, REQUEST_ORBOT);
                        }
                        return;
                    }

                    ColorDrawable previewColor = (ColorDrawable) binding.colorPreview.getBackground();
                    if (previewColor != null && previewColor.getColor() != mAccount.getColor(isDark())) {
                        mAccount.setColor(previewColor.getColor());
                    }

                    if (mInitMode) {
                        mAccount.setOption(Account.OPTION_DISABLED, false);
                    }
                    if (Arrays.asList(Account.State.DISABLED, Account.State.LOGGED_OUT)
                                    .contains(mAccount.getStatus())
                            && !accountInfoEdited) {
                        mAccount.setOption(Account.OPTION_SOFT_DISABLED, false);
                        mAccount.setOption(Account.OPTION_DISABLED, false);
                        if (!xmppConnectionService.updateAccount(mAccount)) {
                            Toast.makeText(
                                            EditAccountActivity.this,
                                            R.string.unable_to_update_account,
                                            Toast.LENGTH_SHORT)
                                    .show();
                        }
                        return;
                    }

                    XmppConnection connection = mAccount.getXmppConnection();

                    if (inNeedOfSaslAccept()) {
                        mAccount.resetPinnedMechanism();
                        if (!xmppConnectionService.updateAccount(mAccount)) {
                            Toast.makeText(
                                            EditAccountActivity.this,
                                            R.string.unable_to_update_account,
                                            Toast.LENGTH_SHORT)
                                    .show();
                        }
                        return;
                    }

                    final boolean openRegistrationUrl =
                            registerNewAccount
                                    && !accountInfoEdited
                                    && mAccount.getStatus() == Account.State.REGISTRATION_WEB;
                    final boolean openPaymentUrl = mAccount.getStatus() == Account.State.PAYMENT_REQUIRED;
                    final boolean redirectionWorthyStatus = openPaymentUrl || openRegistrationUrl;
                    final HttpUrl url =
                            connection != null && redirectionWorthyStatus
                                    ? connection.getRedirectionUrl()
                                    : null;
                    if (url != null && !wasDisabled) {
                        try {
                            startActivity(
                                    new Intent(Intent.ACTION_VIEW, Uri.parse(url.toString())));
                            return;
                        } catch (ActivityNotFoundException e) {
                            Toast.makeText(
                                            EditAccountActivity.this,
                                            R.string.application_found_to_open_website,
                                            Toast.LENGTH_SHORT)
                                    .show();
                            return;
                        }
                    }

                    binding.accountJidLayout.setError(null);
                    if (isNewAccount) {
                        xmppConnectionService.createAccount(mAccount);
                    } else {
                        if (xmppConnectionService.findAccountByJid(jid) != null) {
                            binding.accountJidLayout.setError(
                                    getString(R.string.account_already_exists));
                            removeErrorsOnAllBut(binding.accountJidLayout);
                            binding.accountJid.requestFocus();
                        if (!xmppConnectionService.updateAccount(mAccount)) {
                            Toast.makeText(
                                            EditAccountActivity.this,
                                            R.string.unable_to_update_account,
                                            Toast.LENGTH_SHORT)
                                    .show();
                            return;
                        }
                        mAccount = new Account(jid.asBareJid(), password);
                        mAccount.setPort(numericPort);
                        mAccount.setHostname(hostname);
                        mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount);
                        xmppConnectionService.createAccount(mAccount);
                    }

                    binding.hostnameLayout.setError(null);
                    binding.portLayout.setError(null);
                    if (mAccount.isOnion()) {