diff --git a/src/main/java/chat/delta/rpc/types/SecurejoinSource.java b/src/main/java/chat/delta/rpc/types/SecurejoinSource.java index 5f8b6beb2..d76e93322 100644 --- a/src/main/java/chat/delta/rpc/types/SecurejoinSource.java +++ b/src/main/java/chat/delta/rpc/types/SecurejoinSource.java @@ -1,6 +1,7 @@ /* Autogenerated file, do not edit manually */ package chat.delta.rpc.types; +// FIXME: the sources are not used correctly public enum SecurejoinSource { /** Because of some problem, it is unknown where the QR code came from. */ Unknown, @@ -19,4 +20,4 @@ public enum SecurejoinSource { /** The user scanned a QR code */ Scan, -} \ No newline at end of file +} diff --git a/src/main/java/chat/delta/rpc/types/SecurejoinUiPath.java b/src/main/java/chat/delta/rpc/types/SecurejoinUiPath.java index 25bc5902c..4b4b4fb89 100644 --- a/src/main/java/chat/delta/rpc/types/SecurejoinUiPath.java +++ b/src/main/java/chat/delta/rpc/types/SecurejoinUiPath.java @@ -10,4 +10,7 @@ public enum SecurejoinUiPath { /** The user first clicked on the `+` button in the main screen, and then on "New Contact" */ NewContact, -} \ No newline at end of file + + /** The user scanned a join QR code when creating a new profile from Instant Onborading Screen */ + InstantOnboarding, +} diff --git a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java index 59aaed3a8..55cf16502 100644 --- a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java @@ -77,14 +77,18 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements private ImageView avatar; private EditText name; + private TextView invitationText; private TextView privacyPolicyBtn; private Button signUpBtn; private boolean avatarChanged; private boolean imageLoaded; private String providerHost; - private String providerQrData; + private String rawQrData; + private DcLot parsedQrData; private boolean isDcLogin; + private boolean isContactInvitation; + private boolean isGroupInvitation; private AttachmentManager attachmentManager; private Bitmap avatarBmp; @@ -120,7 +124,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements isDcLogin = false; providerHost = DEFAULT_CHATMAIL_HOST; - providerQrData = DCACCOUNT + ":" + providerHost; + rawQrData = DCACCOUNT + ":" + providerHost; attachmentManager = new AttachmentManager(this, () -> {}); avatarChanged = false; registerForEvents(); @@ -204,17 +208,31 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements private void setProviderFromQr(String rawQr) { DcLot qrParsed = dcContext.checkQr(rawQr); - boolean isDcLogin = qrParsed.getState() == DcContext.DC_QR_LOGIN; - if (isDcLogin || qrParsed.getState() == DcContext.DC_QR_ACCOUNT) { - this.isDcLogin = isDcLogin; - providerHost = qrParsed.getText1(); - providerQrData = rawQr; - updateProvider(); - } else { - new AlertDialog.Builder(this) - .setMessage(R.string.qraccount_qr_code_cannot_be_used) - .setPositiveButton(R.string.ok, null) - .show(); + switch (qrParsed.getState()) { + case DcContext.DC_QR_LOGIN: + isDcLogin = true; // Intentional fall-through + case DcContext.DC_QR_ACCOUNT: + providerHost = qrParsed.getText1(); + rawQrData = rawQr; + updateProvider(); + break; + case DcContext.DC_QR_ASK_VERIFYCONTACT: + isContactInvitation = true; + rawQrData = rawQr; + parsedQrData = qrParsed; + updateProvider(); + break; + case DcContext.DC_QR_ASK_VERIFYGROUP: + isGroupInvitation = true; + rawQrData = rawQr; + parsedQrData = qrParsed; + updateProvider(); + break; + default: + new AlertDialog.Builder(this) + .setMessage(R.string.qraccount_qr_code_cannot_be_used) + .setPositiveButton(R.string.ok, null) + .show(); } } @@ -309,6 +327,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements private void initializeResources() { this.avatar = findViewById(R.id.avatar); this.name = findViewById(R.id.name_text); + this.invitationText = findViewById(R.id.invitation_label); this.privacyPolicyBtn = findViewById(R.id.privacy_policy_button); this.signUpBtn = findViewById(R.id.signup_button); @@ -364,6 +383,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements } else { signUpBtn.setText(R.string.instant_onboarding_create); privacyPolicyBtn.setTextColor(getResources().getColor(R.color.delta_accent)); + if (DEFAULT_CHATMAIL_HOST.equals(providerHost)) { privacyPolicyBtn.setText(TextUtil.markAsExternal( getString(R.string.instant_onboarding_agree_default2, providerHost))); @@ -371,6 +391,19 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements privacyPolicyBtn.setText(TextUtil.markAsExternal( getString(R.string.instant_onboarding_agree_instance, providerHost))); } + + if (parsedQrData != null) { + if (isContactInvitation) { + String name = dcContext.getContact(parsedQrData.getId()).getDisplayName(); + invitationText.setText(this.getString(R.string.instant_onboarding_contact_info, name)); + invitationText.setVisibility(View.VISIBLE); + } else if (isGroupInvitation) { + String groupName = parsedQrData.getText1(); + invitationText.setText(this.getString(R.string.instant_onboarding_group_info, groupName)); + invitationText.setVisibility(View.VISIBLE); + } + } + } } @@ -444,6 +477,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements } final String name = this.name.getText().toString(); + // FIXME: deprecated and also (unlikely but possible) memory leak new AsyncTask() { @Override protected Boolean doInBackground(Void... params) { @@ -469,7 +503,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements if (result) { attachmentManager.cleanup(); - startQrAccountCreation(providerQrData); + startQrAccountCreation(rawQrData); } else { Toast.makeText(InstantOnboardingActivity.this, R.string.error, Toast.LENGTH_LONG).show(); } diff --git a/src/main/res/layout/instant_onboarding_activity.xml b/src/main/res/layout/instant_onboarding_activity.xml index b59832828..21f0488c3 100644 --- a/src/main/res/layout/instant_onboarding_activity.xml +++ b/src/main/res/layout/instant_onboarding_activity.xml @@ -41,6 +41,17 @@ + +