diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java | 52 |
1 files changed, 23 insertions, 29 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java index dd57c13e..0f5e728f 100644 --- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java @@ -576,22 +576,11 @@ public class StartConversationActivity extends XmppActivity { if (intent == null || intent.getAction() == null) { return false; } - Invite invite = null; switch (intent.getAction()) { case Intent.ACTION_SENDTO: - try { - // TODO use Intent.parse ?!? - // sample: imto://xmpp/jid@foo.com - String jid = URLDecoder.decode( - intent.getData().getEncodedPath(), "UTF-8").split( - "/")[1]; - return handleJid(jid); - } catch (UnsupportedEncodingException e) { - return false; - } case Intent.ACTION_VIEW: - invite = new Invite(intent.getData()); - return invite.invite(); + Log.d(Config.LOGTAG, "received uri=" + intent.getData()); + return new Invite(intent.getData()).invite(); case NfcAdapter.ACTION_NDEF_DISCOVERED: for (Parcelable message : getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)) { if (message instanceof NdefMessage) { @@ -601,26 +590,21 @@ public class StartConversationActivity extends XmppActivity { case NdefRecord.TNF_WELL_KNOWN: if (Arrays.equals(record.getType(), NdefRecord.RTD_URI)) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - invite = new Invite(record.toUri()); + return new Invite(record.toUri()).invite(); } else { - byte[] mPayload = record.getPayload(); - if (mPayload[0] == 0) { - invite = new Invite(Uri.parse(new String(Arrays.copyOfRange( - mPayload, 1, mPayload.length)))); + byte[] payload = record.getPayload(); + if (payload[0] == 0) { + return new Invite(Uri.parse(new String(Arrays.copyOfRange( + payload, 1, payload.length)))).invite(); } } - if (invite != null) { - return invite.invite(); - } } } } } } - return false; - default: - return false; } + return false; } private boolean handleJid(String jid) { @@ -776,11 +760,21 @@ public class StartConversationActivity extends XmppActivity { } void parse(Uri uri) { - muc = uri.getQuery() != null && uri.getQuery().equalsIgnoreCase("join"); - if (uri.getAuthority() != null) { - jid = uri.getAuthority(); - } else { - jid = uri.getSchemeSpecificPart().split("\\?")[0]; + String scheme = uri.getScheme(); + if ("xmpp".equals(scheme)) { + // sample: xmpp:jid@foo.com + muc = "join".equalsIgnoreCase(uri.getQuery()); + if (uri.getAuthority() != null) { + jid = uri.getAuthority(); + } else { + jid = uri.getSchemeSpecificPart().split("\\?")[0]; + } + } else if ("imto".equals(scheme)) { + // sample: imto://xmpp/jid@foo.com + try { + jid = URLDecoder.decode(uri.getEncodedPath(), "UTF-8").split("/")[1]; + } catch (UnsupportedEncodingException e) { + } } } } |