diff --git a/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java b/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java index 28755c316..d7c097b6d 100644 --- a/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java @@ -12,6 +12,8 @@ import android.net.Uri; import android.widget.Toast; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; @@ -153,12 +155,20 @@ 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); if (requestCode == REQUEST_SCAN_QR_CODE && resultCode == RESULT_OK) { String result = intent.getStringExtra(ScanActivity.INTENT_EXTRA_RESULT); if (result != null) { + if (result.startsWith("BEGIN:VCARD\n")) { + Matcher matcher = VCARD_XMPP_PATTERN.matcher(result); + if (matcher.find()) { + result = matcher.group(2); + } + } Uri uri = Uri.parse(result); handleUri(uri, true); }