Skip to content

Commit

Permalink
support for catching the default TAG_DISCOVERED event
Browse files Browse the repository at this point in the history
  • Loading branch information
m00sey committed Aug 9, 2011
1 parent 1ed46d9 commit fe714da
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 4 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.3
0.1.4
2 changes: 1 addition & 1 deletion build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<property name="sdk.dir" value="/usr/local/android"/>
<property name="target" value="android-10"/>

<property name="phonegap.version" value="1.0.0rc2"/>
<property name="phonegap.version" value="1.0.0"/>
<property name="phonegap.home" value="/usr/local/phonegap-${phonegap.version}"/>
<property name="phonegap.jar" value="${phonegap.home}/Android/phonegap-${phonegap.version}.jar"/>

Expand Down
5 changes: 5 additions & 0 deletions phonegap-nfc.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@ var Ndef = {

navigator.nfc = {

addTagListener: function (callback, win, fail) {
document.addEventListener("tag", callback, false);
PhoneGap.exec(win, fail, "NdefPlugin", "registerTag", []);
},

addMimeTypeListener: function (mimeType, callback, win, fail) {
document.addEventListener("ndef-mime", callback, false);
PhoneGap.exec(win, fail, "NdefPlugin", "registerMimeType", [mimeType]);
Expand Down
31 changes: 29 additions & 2 deletions src/com/chariotsolutions/nfc/plugin/NdefPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class NdefPlugin extends Plugin {
private static final String REGISTER_MIME_TYPE = "registerMimeType";
private static final String REGISTER_NDEF = "registerNdef";
private static final String REGISTER_NDEF_FORMATABLE = "registerNdefFormatable";
private static final String REGISTER_DEFAULT_TAG = "registerTag";
private static final String WRITE_TAG = "writeTag";
private static final String SHARE_TAG = "shareTag";
private static final String UNSHARE_TAG = "unshareTag";
Expand All @@ -33,6 +34,7 @@ public class NdefPlugin extends Plugin {
private static final String NDEF = "ndef";
private static final String NDEF_MIME = "ndef-mime";
private static final String NDEF_FORMATABLE = "ndef-formatable";
private static final String TAG_DEFAULT = "tag";

private NdefMessage p2pMessage = null;
private static String TAG = "NdefPlugin";
Expand Down Expand Up @@ -68,6 +70,11 @@ public PluginResult execute(String action, JSONArray data, String callbackId) {
addTechList(new String[]{NdefFormatable.class.getName()});
startNfc();

return new PluginResult(Status.OK);
} else if (action.equals(REGISTER_DEFAULT_TAG)) {
addTagFilter();
startNfc();

return new PluginResult(Status.OK);
} else if (action.equalsIgnoreCase(WRITE_TAG)) {
if (ctx.getIntent() == null) { // TODO remove this and handle LostTag
Expand Down Expand Up @@ -138,6 +145,10 @@ private void addTechFilter() {
intentFilters.add(new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED));
}

private void addTagFilter() {
intentFilters.add(new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED));
}

private void startNfc() {
createPendingIntent(); // onResume can call startNfc before execute

Expand Down Expand Up @@ -226,6 +237,10 @@ public void parseMessage() {
}
}

if (action.equals(NfcAdapter.ACTION_TAG_DISCOVERED)) {
fireTagEvent(tag);
}

ctx.setIntent(new Intent());
}

Expand All @@ -237,7 +252,7 @@ private void fireNdefEvent(String type, Ndef ndef, Parcelable[] messages) {
"e.tag = {1};\n" +
"document.dispatchEvent(e);";

JSONObject jsonObject = buildTagJSON(ndef, messages);
JSONObject jsonObject = buildNdefJSON(ndef, messages);
String tag = jsonObject.toString();

String command = MessageFormat.format(javascriptTemplate, type, tag);
Expand All @@ -246,7 +261,19 @@ private void fireNdefEvent(String type, Ndef ndef, Parcelable[] messages) {

}

JSONObject buildTagJSON(Ndef ndef, Parcelable[] messages) {
private void fireTagEvent (Tag tag) {
String javascriptTemplate =
"var e = document.createEvent(''Events'');\n" +
"e.initEvent(''{0}'');\n" +
"e.tag = {1};\n" +
"document.dispatchEvent(e);";

String command = MessageFormat.format(javascriptTemplate, TAG_DEFAULT, Util.tagToJSON(tag));
Log.v(TAG, command);
this.sendJavascript(command);
}

JSONObject buildNdefJSON(Ndef ndef, Parcelable[] messages) {

JSONObject json = Util.ndefToJSON(ndef);

Expand Down
16 changes: 16 additions & 0 deletions src/com/chariotsolutions/nfc/plugin/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Util {
Expand All @@ -32,6 +34,20 @@ static JSONObject ndefToJSON(Ndef ndef) {
return json;
}

static JSONObject tagToJSON(Tag tag) {
JSONObject json = new JSONObject();

if (tag != null) {
try {
json.put("id", byteArrayToJSON(tag.getId()));
json.put("techTypes", new JSONArray(Arrays.asList(tag.getTechList())));
} catch (JSONException e) {
Log.e(TAG, "Failed to convert tag into json: " + tag.toString(), e);
}
}
return json;
}

static String translateType(String type) {
String translation;
if (type.equals(Ndef.NFC_FORUM_TYPE_1)) {
Expand Down

0 comments on commit fe714da

Please sign in to comment.