diff options
Diffstat (limited to '')
3 files changed, 56 insertions, 29 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java index b54959316..d0f5f8542 100644 --- a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java +++ b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java @@ -356,13 +356,21 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat final Jid jid = mAccount == null ? null : mAccount.getJid(); if (SignupUtils.isSupportTokenRegistry() && jid != null && magicCreate && !jid.getDomain().equals(Config.MAGIC_CREATE_DOMAIN)) { - final Intent intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), mAccount.getKey(Account.PRE_AUTH_REGISTRATION_TOKEN)); + final Jid preset; + if (mAccount.isOptionSet(Account.OPTION_FIXED_USERNAME)) { + preset = jid.asBareJid(); + } else { + preset = Jid.ofDomain(jid.getDomain()); + } + final Intent intent = SignupUtils.getTokenRegistrationIntent(this, preset, mAccount.getKey(Account.PRE_AUTH_REGISTRATION_TOKEN)); + StartConversationActivity.addInviteUri(intent, getIntent()); startActivity(intent); return; } if (xmppConnectionService.getAccounts().size() == 0 && Config.MAGIC_CREATE_DOMAIN != null) { - Intent intent = SignupUtils.getSignUpIntent(this); + Intent intent = SignupUtils.getSignUpIntent(this, mForceRegister != null && mForceRegister); + StartConversationActivity.addInviteUri(intent, getIntent()); startActivity(intent); overridePendingTransition(R.animator.fade_in, R.animator.fade_out); } @@ -1155,7 +1163,7 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat } - final boolean editable = !mAccount.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY) && QuickConversationsService.isConversations(); + final boolean editable = !mAccount.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY) && !mAccount.isOptionSet(Account.OPTION_FIXED_USERNAME) && QuickConversationsService.isConversations(); this.binding.accountJid.setEnabled(editable); this.binding.accountJid.setFocusable(editable); this.binding.accountJid.setFocusableInTouchMode(editable); diff --git a/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java b/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java index af7b965af..f3f294828 100644 --- a/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java +++ b/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java @@ -31,9 +31,11 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad private boolean useOwnProvider = false; public static final String EXTRA_DOMAIN = "domain"; public static final String EXTRA_PRE_AUTH = "pre_auth"; + public static final String EXTRA_USERNAME = "username"; private ActivityMagicCreateBinding binding; private String domain; + private String username; private String preAuth; @Override @@ -60,6 +62,7 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad final Intent data = getIntent(); this.domain = data == null ? null : data.getStringExtra(EXTRA_DOMAIN); this.preAuth = data == null ? null : data.getStringExtra(EXTRA_PRE_AUTH); + this.username = data == null ? null : data.getStringExtra(EXTRA_USERNAME); if (getResources().getBoolean(R.bool.portrait_only)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } @@ -76,20 +79,37 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); setSupportActionBar((Toolbar) this.binding.toolbar); configureActionBar(getSupportActionBar(), this.domain == null); - if (domain != null) { + if (username != null && domain != null) { + binding.title.setText(R.string.your_server_invitation); + binding.instructions.setText(getString(R.string.magic_create_text_fixed, domain)); + binding.username.setEnabled(false); + binding.username.setText(this.username); + updateFullJidInformation(this.username); + } else if (domain != null) { binding.instructions.setText(getString(R.string.magic_create_text_on_x, domain)); } binding.createAccount.setOnClickListener(v -> { try { final String username = binding.username.getText().toString(); - if (domain == null && !useOwnProvider) { - domain = Config.MAGIC_CREATE_DOMAIN; - } - if (useOwnProvider) { - domain = "your-domain.com"; + final boolean fixedUsername; + final Jid jid; + if (this.domain != null && this.username != null) { + fixedUsername = true; + jid = Jid.ofLocalAndDomain(this.username, this.domain); + } else if (this.domain != null) { + fixedUsername = false; + jid = Jid.ofLocalAndDomain(username, this.domain); + } else { + fixedUsername = false; + if (domain == null && !useOwnProvider) { + domain = Config.MAGIC_CREATE_DOMAIN; + } + if (useOwnProvider) { + domain = "your-domain.com"; + } + jid = Jid.ofLocalAndDomain(username, domain); } - Jid jid = Jid.of(username.toLowerCase(), domain, null); - if (!jid.getEscapedLocal().equals(jid.getLocal()) || username.length() < 3) { + if (!jid.getEscapedLocal().equals(jid.getLocal()) || (this.username == null && username.length() < 3)) { binding.username.setError(getString(R.string.invalid_username)); binding.username.requestFocus(); } else { @@ -101,6 +121,7 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad account.setOption(Account.OPTION_REGISTER, true); account.setOption(Account.OPTION_DISABLED, true); account.setOption(Account.OPTION_MAGIC_CREATE, true); + account.setOption(Account.OPTION_FIXED_USERNAME, fixedUsername); if (this.preAuth != null) { account.setKey(Account.PRE_AUTH_REGISTRATION_TOKEN, this.preAuth); } @@ -134,8 +155,6 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad } }); builder.create().show(); - StartConversationActivity.addInviteUri(intent, getIntent()); - startActivity(intent); } } catch (IllegalArgumentException e) { binding.username.setError(getString(R.string.invalid_username)); @@ -157,37 +176,37 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad @Override public void afterTextChanged(Editable s) { - generateJID(s.toString()); + updateFullJidInformation(s.toString()); } @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { - generateJID(binding.username.getText().toString()); + updateFullJidInformation(binding.username.getText().toString()); } @Override public void onNothingSelected(AdapterView<?> adapterView) { - generateJID(binding.username.getText().toString()); + updateFullJidInformation(binding.username.getText().toString()); } - private void generateJID(String s) { - domain = binding.server.getSelectedItem().toString(); - if (s.trim().length() > 0) { + private void updateFullJidInformation(String username) { + this.domain = binding.server.getSelectedItem().toString(); + if (username.trim().isEmpty()) { + binding.fullJid.setVisibility(View.INVISIBLE); + } else { try { binding.fullJid.setVisibility(View.VISIBLE); final Jid jid; if (this.domain == null) { - jid = Jid.ofLocalAndDomain(s, Config.MAGIC_CREATE_DOMAIN); + jid = Jid.ofLocalAndDomain(username, Config.MAGIC_CREATE_DOMAIN); } else { - jid = Jid.ofLocalAndDomain(s, this.domain); + jid = Jid.ofLocalAndDomain(username, this.domain); } binding.fullJid.setText(getString(R.string.your_full_jid_will_be, jid.toEscapedString())); } catch (IllegalArgumentException e) { binding.fullJid.setVisibility(View.INVISIBLE); } - } else { - binding.fullJid.setVisibility(View.INVISIBLE); } } diff --git a/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java b/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java index 9d30cdeb6..59a5665f1 100644 --- a/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java +++ b/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java @@ -27,6 +27,7 @@ public class UriHandlerActivity extends AppCompatActivity { public static final String ACTION_SCAN_QR_CODE = "scan_qr_code"; private static final int REQUEST_SCAN_QR_CODE = 0x1234; private static final int REQUEST_CAMERA_PERMISSIONS_TO_SCAN = 0x6789; + private static final Pattern VCARD_XMPP_PATTERN = Pattern.compile("\nIMPP([^:]*):(xmpp:.+)\n"); private boolean handled = false; public static void scan(Activity activity) { @@ -90,15 +91,16 @@ public class UriHandlerActivity extends AppCompatActivity { final String preauth = xmppUri.getParamater("preauth"); final Jid jid = xmppUri.getJid(); if (xmppUri.isAction(XmppUri.ACTION_REGISTER)) { - if (jid.isDomainJid()) { - intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), preauth); - startActivity(intent); + if (jid.getEscapedLocal() != null && accounts.contains(jid.asBareJid())) { + Toast.makeText(this, R.string.account_already_exists, Toast.LENGTH_LONG).show(); return; } + intent = SignupUtils.getTokenRegistrationIntent(this, jid, preauth); + startActivity(intent); return; } if (xmppUri.isAction(XmppUri.ACTION_ROSTER) && "y".equals(xmppUri.getParamater("ibr"))) { - intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), preauth); + intent = SignupUtils.getTokenRegistrationIntent(this, Jid.ofDomain(jid.getDomain()), preauth); intent.putExtra(StartConversationActivity.EXTRA_INVITE_URI, xmppUri.toString()); startActivity(intent); return; @@ -181,8 +183,6 @@ public class UriHandlerActivity extends AppCompatActivity { finish(); } - private static final Pattern VCARD_XMPP_PATTERN = Pattern.compile("\nIMPP([^:]*):(xmpp:.+)\n"); - @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, requestCode, intent); |