Introduce
setNdefPushMessage()
setNdefPushMessageCallback()
setNdefPushCompleteCallback()
Deprecate public API
enableForegroundNdefPush()
disableForegroundNdefPush()
Hide & Deprecate staged (public but never released) API
enableForegroundNdefPushCallback()
The new API's do not require the application to explicitly call
enable()/disable() in onPause()/onResume(), we use a Fragment behind
the scenes to manager this automatically.
NDEF Push can be disabled by using a null parameter, so each
enable()/disable() pair is collapsed to a single set() call.
Application code should now look something like:
public void onCreate() {
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
if (adapter != null) { // check that NFC is available on this device
adapter.setNdefPushMessage(myNdefMessage, this);
}
}
And that's it - no need to explicitly hook into onPause() and onResume() events.
Also - introduce a generic NfcEvent class that is provided as a parameter on
all NFC callbacks. Right now it just provides the NfcAdapter, but using
the wrapper classes allows us to add more fields later without changing
the callback signature. (i'm thinking Bluetooth).
Change-Id: I371dcb026b535b8199225c1262eca64ce644458a
Remove
o registerTearDownApdus()
o deregisterTearDownApdus()
They were already NO-OPS, and don't work in the general case.
Add
o authenticate(byte[] token)
This future proofs us for a more flexible access control scheme.
Change-Id: I4cb67ceeb63d61cbc333c9b244a96d8687402168
NdefMessages created from byte arrays set the wrong flags on
NdefRecord: every record had at least FLAG_MB|FLAG_ME set, instead of actually
setting the flags from the byte-stream itself. Fixed by creating an internal
constructor which can take the flags.
Public constructor remains the same, as we don't want to bother application
writers with these flags - they can be inferred from the context in which the
record is used. Getting the flags is not a public operation on an NdefRecord
either. However, applications can get the byte[] representation and it
is reasonable for them to expect the flags byte to be set correctly.
Change-Id: Ic32411688dd092c55b1aeccbba9635792e15a671
This is it. I promise.
ACTION_TECHNOLOGY_DISCOVERED -> ACTION_TECH_DISCOVERED
This was missed in our technology->tech rename.
Hide TagTechnology.reconnect()
This is used to reset any per-connection state in a tag, by reconnecting
to it. The first problem is that it belongs on Tag, not TagTechnology. The
second problem is that it may become redundant once we add Tag.rediscover()
which will also reconnect to the tag, and will also return a new Tag with
newly created technologies enumerated. And the third and most significant
problem is that you can already achieve the same result by just calling
close() followed by connect().
Hide Tag.createMockTag()
This API cannot be used reliably. First it requires using int[] for the
technology list, but those int constants are now hidden. Second it requires
knowledge of the extras parcel used to fill technology specific data - also
not public.
Introduce TagTechnology.isConnected()
Every child class already impelmented this, and given that connect() and
close() are defined on the interface, then isConnected() should be there
too.
Modify Ndef.getType to return a string (not int)
Allows more flexibility in adding new NDEF types. Current public strings are
org.nfcforum.ndef.type1
org.nfcforum.ndef.type2
org.nfcforum.ndef.type3
org.nfcforum.ndef.type4
com.nxp.ndef.mifareclassic
Add NdefFormatable.formatReadOnly()
This allows you to make the tag read-only at the same time as performing
format and write. It is important because we currently don't have any
public API to re-enumerate a tag technology list after making a tag
NDEF compatible, so you can't perform the format as a seperate step
without physically removing the tag from field and returning it.
Modify Readonly -> ReadOnly
Make Tag class final
Change-Id: Icf306aeb37b936ca3007e4868e99b6baceac4aff
IOException on close() can be useful to indicate that in-progress transactions
were canceled.
I also audited all of our tech classes to make sure every function that needs
to throw IOException does so.
Change-Id: Iaa9c43d79d59ff85772d5c3e4b4d57a6fa8df4cf
o Some javadoc updates
o writeBlock -> writePages (Block means something else in NFC Forum).
o validate page offset
Change-Id: Icae54db3397d57aaa451caaa86d56e8ba82507f2
This makes the system more flexible and allows
adding new technology types without having to
update the API.
Change-Id: Iaee6b633965e501a70e8afc3f1d54d9d94a4d05a
Also make sure they are non-negative.
This is not documented in Mifare Classic spec, but based on findings from NXP:
- Operand should be stored in little-endian format in the transceive buffer
- Tag ignores the sign bit on the operand, its effectively 31-bit unsigned
- Overflow and underflow generates an error.
Change-Id: Id3389b3894ded732c4b00d564ca53f5df651359e