Adding new text for scanning invite code when onboarding

This commit is contained in:
wch423
2026-01-29 20:48:39 +01:00
parent 9ffc904ae5
commit 1dcf7e4860
4 changed files with 65 additions and 16 deletions
@@ -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,
}
}
@@ -10,4 +10,7 @@ public enum SecurejoinUiPath {
/** The user first clicked on the `+` button in the main screen, and then on "New Contact" */
NewContact,
}
/** The user scanned a join QR code when creating a new profile from Instant Onborading Screen */
InstantOnboarding,
}
@@ -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<Void, Void, Boolean>() {
@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();
}
@@ -41,6 +41,17 @@
</LinearLayout>
<TextView
android:id="@+id/invitation_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
android:gravity="start"
android:visibility="gone"
android:textColor="@color/gray50" />
<TextView
android:id="@+id/information_label"
android:layout_width="match_parent"