diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 3c17bf714..fbc403b58 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -69,14 +69,6 @@
-
-
-
-
-
-
-
-
@@ -88,20 +80,20 @@
-
-
+
-
+
+
= Build.VERSION_CODES.JELLY_BEAN) {
- return getInviteJellyBean(record).invite();
- } else {
- byte[] payload = record.getPayload();
- if (payload[0] == 0) {
- return new Invite(Uri.parse(new String(Arrays.copyOfRange(
- payload, 1, payload.length)))).invite();
- }
- }
- }
- }
- }
- }
- }
}
return false;
}
diff --git a/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java b/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java
index 043bf247e..9ffa1b11f 100644
--- a/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/UriHandlerActivity.java
@@ -1,8 +1,14 @@
package eu.siacs.conversations.ui;
+import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.os.Build;
+import android.os.Parcelable;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
@@ -27,6 +33,11 @@ public class UriHandlerActivity extends Activity {
handleIntent(intent);
}
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+ Uri getInviteJellyBean(NdefRecord record) {
+ return record.toUri();
+ }
+
private void handleUri(Uri uri) {
final Intent intent;
final XmppUri xmppUri = new XmppUri(uri);
@@ -62,6 +73,30 @@ public class UriHandlerActivity extends Activity {
startActivity(intent);
}
+ private void handleNfcIntent(Intent data) {
+ for (Parcelable message : data.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)) {
+ if (message instanceof NdefMessage) {
+ 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) {
+ handleUri(getInviteJellyBean(record));
+ } else {
+ byte[] payload = record.getPayload();
+ if (payload[0] == 0) {
+ Uri uri = Uri.parse(new String(Arrays.copyOfRange(
+ payload, 1, payload.length)));
+ handleUri(uri);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
private void handleIntent(Intent data) {
if (data == null) {
finish();
@@ -76,6 +111,8 @@ public class UriHandlerActivity extends Activity {
case ACTION_SCAN_QR_CODE:
new IntentIntegrator(this).initiateScan(Arrays.asList("AZTEC", "QR_CODE"));
return;
+ case NfcAdapter.ACTION_NDEF_DISCOVERED:
+ handleNfcIntent(data);
}
finish();