aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Schneppe <christian.schneppe@pix-art.de>2020-01-24 19:28:14 +0100
committerChristian Schneppe <christian.schneppe@pix-art.de>2020-01-24 19:28:14 +0100
commit504e4f21a270e21fe3ae4e479998c24bf182626a (patch)
treed81e5eb513fad448379ad5ff3ea54c0f179e72da
parent99e21438c0ad268c08f09656ebc3d271c4e4031a (diff)
make registration uris work with fixed usernames
-rw-r--r--src/main/java/de/pixart/messenger/entities/Account.java2
-rw-r--r--src/main/java/de/pixart/messenger/ui/EditAccountActivity.java14
-rw-r--r--src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java59
-rw-r--r--src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java12
-rw-r--r--src/main/java/de/pixart/messenger/utils/SignupUtils.java14
-rw-r--r--src/main/res/layout/activity_magic_create.xml3
-rw-r--r--src/main/res/values/strings.xml2
7 files changed, 74 insertions, 32 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Account.java b/src/main/java/de/pixart/messenger/entities/Account.java
index edd0fdc8c..c270f5b43 100644
--- a/src/main/java/de/pixart/messenger/entities/Account.java
+++ b/src/main/java/de/pixart/messenger/entities/Account.java
@@ -66,6 +66,8 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable
public static final int OPTION_REQUIRES_ACCESS_MODE_CHANGE = 5;
public static final int OPTION_LOGGED_IN_SUCCESSFULLY = 6;
public static final int OPTION_HTTP_UPLOAD_AVAILABLE = 7;
+ public static final int OPTION_UNVERIFIED = 8;
+ public static final int OPTION_FIXED_USERNAME = 9;
private static final String KEY_PGP_SIGNATURE = "pgp_signature";
private static final String KEY_PGP_ID = "pgp_id";
public final HashSet<Pair<String, String>> inProgressDiscoFetches = new HashSet<>();
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);
diff --git a/src/main/java/de/pixart/messenger/utils/SignupUtils.java b/src/main/java/de/pixart/messenger/utils/SignupUtils.java
index 2c0418a19..52534b89d 100644
--- a/src/main/java/de/pixart/messenger/utils/SignupUtils.java
+++ b/src/main/java/de/pixart/messenger/utils/SignupUtils.java
@@ -12,6 +12,7 @@ import de.pixart.messenger.ui.MagicCreateActivity;
import de.pixart.messenger.ui.ManageAccountActivity;
import de.pixart.messenger.ui.StartConversationActivity;
import de.pixart.messenger.ui.WelcomeActivity;
+import rocks.xmpp.addr.Jid;
public class SignupUtils {
@@ -19,13 +20,22 @@ public class SignupUtils {
return true;
}
- public static Intent getTokenRegistrationIntent(final Activity activity, String domain, String preAuth) {
+ public static Intent getTokenRegistrationIntent(final Activity activity, Jid jid, String preAuth) {
final Intent intent = new Intent(activity, MagicCreateActivity.class);
- intent.putExtra(MagicCreateActivity.EXTRA_DOMAIN, domain);
+ if (jid.isDomainJid()) {
+ intent.putExtra(MagicCreateActivity.EXTRA_DOMAIN, jid.getDomain());
+ } else {
+ intent.putExtra(MagicCreateActivity.EXTRA_DOMAIN, jid.getDomain());
+ intent.putExtra(MagicCreateActivity.EXTRA_USERNAME, jid.getEscapedLocal());
+ }
intent.putExtra(MagicCreateActivity.EXTRA_PRE_AUTH, preAuth);
return intent;
}
+ public static Intent getSignUpIntent(Activity activity, boolean ignored) {
+ return getSignUpIntent(activity);
+ }
+
public static Intent getSignUpIntent(final Activity activity) {
final Intent intent = new Intent(activity, WelcomeActivity.class);
return intent;
diff --git a/src/main/res/layout/activity_magic_create.xml b/src/main/res/layout/activity_magic_create.xml
index 11f2d8b00..66cc14693 100644
--- a/src/main/res/layout/activity_magic_create.xml
+++ b/src/main/res/layout/activity_magic_create.xml
@@ -49,6 +49,7 @@
android:textAppearance="@style/TextAppearance.Conversations.Body1" />
<TextView
+ android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pick_your_username"
@@ -62,7 +63,7 @@
android:hint="@string/username_hint"
android:imeOptions="actionNext"
android:inputType="text"
- android:textColor="?attr/text_Color_Main" />
+ android:textColor="?attr/edit_text_color" />
<TextView
android:layout_width="wrap_content"
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 1c267eaf8..2b8f0074a 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -1000,4 +1000,6 @@
<string name="pref_enable_otr">Enable OTR encryption</string>
<string name="magic_create_text_on_x">You have been invited to %1$s. We will guide you through the process of creating an account.\\nWhen picking %1$s as a provider you will be able to communicate with users of other providers by giving them your full XMPP address.</string>
<string name="account_status_regis_invalid_token">Invalid registration token</string>
+ <string name="magic_create_text_fixed">You have been invited to %1$s. A username has already been picked for you. We will guide you through the process of creating an account.\nYou will be able to communicate with users of other providers by giving them your full XMPP address.</string>
+ <string name="your_server_invitation">Your server invitation</string>
</resources>