diff --git a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java
index 273019a4a..32c47c661 100644
--- a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java
+++ b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java
@@ -196,9 +196,15 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
break;
case IntentIntegrator.REQUEST_CODE:
- IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
- if (scanResult != null && scanResult.getFormatName() != null) {
- setProviderFromQr(scanResult.getContents());
+ String qrRaw = data.getStringExtra(RegistrationQrActivity.QRDATA_EXTRA);
+ if (qrRaw == null) {
+ IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
+ if (scanResult != null && scanResult.getFormatName() != null) {
+ qrRaw = scanResult.getContents();
+ }
+ }
+ if (qrRaw != null) {
+ setProviderFromQr(qrRaw);
}
break;
}
diff --git a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java
index 0086093d2..aa1241b4c 100644
--- a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java
+++ b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java
@@ -336,20 +336,29 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
+
+ if (resultCode != RESULT_OK) {
+ return;
+ }
+
if (requestCode==IntentIntegrator.REQUEST_CODE) {
- IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
- if (scanResult == null || scanResult.getFormatName() == null) {
- return; // aborted
+ String qrRaw = data.getStringExtra(RegistrationQrActivity.QRDATA_EXTRA);
+ if (qrRaw == null) {
+ IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
+ if (scanResult == null || scanResult.getFormatName() == null) {
+ return; // aborted
+ }
+ qrRaw = scanResult.getContents();
}
- String qrRaw = scanResult.getContents();
DcLot qrParsed = dcContext.checkQr(qrRaw);
switch (qrParsed.getState()) {
case DcContext.DC_QR_BACKUP:
case DcContext.DC_QR_BACKUP2:
- new AlertDialog.Builder(this)
+ final String finalQrRaw = qrRaw;
+ new AlertDialog.Builder(this)
.setTitle(R.string.multidevice_receiver_title)
.setMessage(R.string.multidevice_receiver_scanning_ask)
- .setPositiveButton(R.string.perm_continue, (dialog, which) -> startBackupTransfer(qrRaw))
+ .setPositiveButton(R.string.perm_continue, (dialog, which) -> startBackupTransfer(finalQrRaw))
.setNegativeButton(R.string.cancel, null)
.setCancelable(false)
.show();
diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java
index cecedeadf..c7e03097c 100644
--- a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java
+++ b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java
@@ -76,6 +76,7 @@ public class QrCodeHandler {
break;
case DcContext.DC_QR_BACKUP:
+ case DcContext.DC_QR_BACKUP2:
builder.setTitle(R.string.multidevice_receiver_title);
builder.setMessage(activity.getString(R.string.multidevice_receiver_scanning_ask) + "\n\n" + activity.getString(R.string.multidevice_same_network_hint));
builder.setPositiveButton(R.string.perm_continue, (dialog, which) -> {
diff --git a/src/main/java/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java
index b2d03ec79..38643c67c 100644
--- a/src/main/java/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java
+++ b/src/main/java/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java
@@ -18,10 +18,12 @@ import org.thoughtcrime.securesms.BaseActionBarActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.permissions.Permissions;
+import org.thoughtcrime.securesms.util.Util;
public class RegistrationQrActivity extends BaseActionBarActivity {
public static final String ADD_AS_SECOND_DEVICE_EXTRA = "add_as_second_device";
+ public static final String QRDATA_EXTRA = "qrdata";
private CaptureManager capture;
@@ -82,6 +84,12 @@ public class RegistrationQrActivity extends BaseActionBarActivity {
case R.id.troubleshooting:
DcHelper.openHelp(this, "#multiclient");
return true;
+ case R.id.menu_paste:
+ Intent intent = new Intent();
+ intent.putExtra(QRDATA_EXTRA, Util.getTextFromClipboard(this));
+ setResult(Activity.RESULT_OK, intent);
+ finish();
+ return true;
}
return false;
diff --git a/src/main/res/menu/registration_qr_activity.xml b/src/main/res/menu/registration_qr_activity.xml
index 6d3c7d973..5076245df 100644
--- a/src/main/res/menu/registration_qr_activity.xml
+++ b/src/main/res/menu/registration_qr_activity.xml
@@ -2,6 +2,10 @@