From b6c20d9260c9f7b888e8f6c5fa0a4882c7a7cb6e Mon Sep 17 00:00:00 2001 From: "M. Dietrich" Date: Tue, 4 Nov 2014 13:14:29 +0100 Subject: implement "correct" ndef parsing --- .../ui/StartConversationActivity.java | 38 ++++++++++++++-------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java') diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java index 65bc7e63..dd57c13e 100644 --- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java @@ -23,6 +23,7 @@ import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; @@ -50,6 +51,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Bookmark; @@ -579,6 +581,7 @@ public class StartConversationActivity extends XmppActivity { 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]; @@ -590,21 +593,30 @@ public class StartConversationActivity extends XmppActivity { invite = new Invite(intent.getData()); return invite.invite(); case NfcAdapter.ACTION_NDEF_DISCOVERED: - Parcelable[] messages = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); - NdefMessage message = (NdefMessage) messages[0]; - NdefRecord record = message.getRecords()[0]; - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - invite = new Invite(record.toUri()); - } else { - byte[] mPayload = record.getPayload(); - if (mPayload[0] == 0) { - invite = new Invite(Uri.parse(new String(Arrays.copyOfRange( - mPayload, 1, mPayload.length)))); + for (Parcelable message : getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)) { + if (message instanceof NdefMessage) { + Log.d(Config.LOGTAG, "received message=" + message); + for (NdefRecord record : ((NdefMessage)message).getRecords()) { + switch (record.getTnf()) { + 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()); + } else { + byte[] mPayload = record.getPayload(); + if (mPayload[0] == 0) { + invite = new Invite(Uri.parse(new String(Arrays.copyOfRange( + mPayload, 1, mPayload.length)))); + } + } + if (invite != null) { + return invite.invite(); + } + } + } + } } } - if (invite != null) { - return invite.invite(); - } return false; default: return false; -- cgit v1.2.3