From 23fc93a7c1e340e79642d3d0bf4b4658c8645c8e Mon Sep 17 00:00:00 2001 From: Martijn Coenen Date: Mon, 28 Nov 2011 10:43:14 -0800 Subject: [PATCH] Fix NPE on mock NDEF tech operations. Change-Id: Ib67bd03b6275fdb86a5d6dedc6c7e4fed07ef8b0 --- core/java/android/nfc/Tag.java | 7 +++++-- core/java/android/nfc/tech/Ndef.java | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java index a73067a5f7094..9fe0bedfe358c 100644 --- a/core/java/android/nfc/Tag.java +++ b/core/java/android/nfc/Tag.java @@ -113,7 +113,7 @@ public final class Tag implements Parcelable { /*package*/ final String[] mTechStringList; /*package*/ final Bundle[] mTechExtras; /*package*/ final int mServiceHandle; // for use by NFC service, 0 indicates a mock - /*package*/ final INfcTag mTagService; + /*package*/ final INfcTag mTagService; // interface to NFC service, will be null if mock tag /*package*/ int mConnectedTechnology; @@ -148,7 +148,7 @@ public final class Tag implements Parcelable { * @hide */ public static Tag createMockTag(byte[] id, int[] techList, Bundle[] techListExtras) { - // set serviceHandle to 0 to indicate mock tag + // set serviceHandle to 0 and tagService to null to indicate mock tag return new Tag(id, techList, techListExtras, 0, null); } @@ -266,6 +266,9 @@ public final class Tag implements Parcelable { throw new IllegalStateException("Close connection to the technology first!"); } + if (mTagService == null) { + throw new IOException("Mock tags don't support this operation."); + } try { Tag newTag = mTagService.rediscover(getServiceHandle()); if (newTag != null) { diff --git a/core/java/android/nfc/tech/Ndef.java b/core/java/android/nfc/tech/Ndef.java index b266bb6dd1edc..226e079ca226e 100644 --- a/core/java/android/nfc/tech/Ndef.java +++ b/core/java/android/nfc/tech/Ndef.java @@ -259,6 +259,9 @@ public final class Ndef extends BasicTagTechnology { try { INfcTag tagService = mTag.getTagService(); + if (tagService == null) { + throw new IOException("Mock tags don't support this operation."); + } int serviceHandle = mTag.getServiceHandle(); if (tagService.isNdef(serviceHandle)) { NdefMessage msg = tagService.ndefRead(serviceHandle); @@ -303,6 +306,9 @@ public final class Ndef extends BasicTagTechnology { try { INfcTag tagService = mTag.getTagService(); + if (tagService == null) { + throw new IOException("Mock tags don't support this operation."); + } int serviceHandle = mTag.getServiceHandle(); if (tagService.isNdef(serviceHandle)) { int errorCode = tagService.ndefWrite(serviceHandle, msg); @@ -335,6 +341,9 @@ public final class Ndef extends BasicTagTechnology { */ public boolean canMakeReadOnly() { INfcTag tagService = mTag.getTagService(); + if (tagService == null) { + return false; + } try { return tagService.canMakeReadOnly(mNdefType); } catch (RemoteException e) { @@ -366,6 +375,9 @@ public final class Ndef extends BasicTagTechnology { try { INfcTag tagService = mTag.getTagService(); + if (tagService == null) { + return false; + } if (tagService.isNdef(mTag.getServiceHandle())) { int errorCode = tagService.ndefMakeReadOnly(mTag.getServiceHandle()); switch (errorCode) {