implement "correct" ndef parsing

This commit is contained in:
M. Dietrich 2014-11-04 13:14:29 +01:00
parent b3582c970e
commit b6c20d9260

View file

@ -23,6 +23,7 @@ import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent; import android.view.KeyEvent;
@ -50,6 +51,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Bookmark; import eu.siacs.conversations.entities.Bookmark;
@ -579,6 +581,7 @@ public class StartConversationActivity extends XmppActivity {
case Intent.ACTION_SENDTO: case Intent.ACTION_SENDTO:
try { try {
// TODO use Intent.parse ?!? // TODO use Intent.parse ?!?
// sample: imto://xmpp/jid@foo.com
String jid = URLDecoder.decode( String jid = URLDecoder.decode(
intent.getData().getEncodedPath(), "UTF-8").split( intent.getData().getEncodedPath(), "UTF-8").split(
"/")[1]; "/")[1];
@ -590,21 +593,30 @@ public class StartConversationActivity extends XmppActivity {
invite = new Invite(intent.getData()); invite = new Invite(intent.getData());
return invite.invite(); return invite.invite();
case NfcAdapter.ACTION_NDEF_DISCOVERED: case NfcAdapter.ACTION_NDEF_DISCOVERED:
Parcelable[] messages = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); for (Parcelable message : getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)) {
NdefMessage message = (NdefMessage) messages[0]; if (message instanceof NdefMessage) {
NdefRecord record = message.getRecords()[0]; Log.d(Config.LOGTAG, "received message=" + message);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { for (NdefRecord record : ((NdefMessage)message).getRecords()) {
invite = new Invite(record.toUri()); switch (record.getTnf()) {
} else { case NdefRecord.TNF_WELL_KNOWN:
byte[] mPayload = record.getPayload(); if (Arrays.equals(record.getType(), NdefRecord.RTD_URI)) {
if (mPayload[0] == 0) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
invite = new Invite(Uri.parse(new String(Arrays.copyOfRange( invite = new Invite(record.toUri());
mPayload, 1, mPayload.length)))); } 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; return false;
default: default:
return false; return false;