diff --git a/nfc/java/android/nfc/NfcActivityManager.java b/nfc/java/android/nfc/NfcActivityManager.java index f03fc0af86b35cf394c197cbe7befc578747fa8e..0e40db612708785b4da584e62603bd3084d74988 100644 --- a/nfc/java/android/nfc/NfcActivityManager.java +++ b/nfc/java/android/nfc/NfcActivityManager.java @@ -195,16 +195,25 @@ public final class NfcActivityManager extends IAppCallback.Stub Bundle extras) { boolean isResumed; Binder token; + int pollTech, listenTech; synchronized (NfcActivityManager.this) { NfcActivityState state = getActivityState(activity); state.readerCallback = callback; state.readerModeFlags = flags; state.readerModeExtras = extras; + pollTech = state.mPollTech; + listenTech = state.mListenTech; token = state.token; isResumed = state.resumed; } if (isResumed) { - setReaderMode(token, flags, extras); + if (listenTech != NfcAdapter.FLAG_USE_ALL_TECH + || pollTech != NfcAdapter.FLAG_USE_ALL_TECH) { + throw new IllegalStateException( + "Cannot be used when alternative DiscoveryTechnology is set"); + } else { + setReaderMode(token, flags, extras); + } } } @@ -385,15 +394,12 @@ public final class NfcActivityManager extends IAppCallback.Stub boolean readerModeFlagsSet; synchronized (NfcActivityManager.this) { NfcActivityState state = getActivityState(activity); - readerModeFlagsSet = state.readerModeFlags != 0; state.mListenTech = NfcAdapter.FLAG_USE_ALL_TECH; state.mPollTech = NfcAdapter.FLAG_USE_ALL_TECH; token = state.token; isResumed = state.resumed; } - if (readerModeFlagsSet) { - disableReaderMode(activity); - } else if (isResumed) { + if (isResumed) { changeDiscoveryTech(token, NfcAdapter.FLAG_USE_ALL_TECH, NfcAdapter.FLAG_USE_ALL_TECH); } diff --git a/nfc/java/android/nfc/NfcAdapter.java b/nfc/java/android/nfc/NfcAdapter.java index 7e0a1111b5741062b33271720d3645fd29d2d0c9..e1c18843313d985e480a87a5888d671577848303 100644 --- a/nfc/java/android/nfc/NfcAdapter.java +++ b/nfc/java/android/nfc/NfcAdapter.java @@ -1846,10 +1846,7 @@ public final class NfcAdapter { throw new UnsupportedOperationException(); } } - mNfcActivityManager.enableReaderMode(activity, null, pollTechnology, null); - return; - } - if (pollTechnology == FLAG_READER_DISABLE) { + } else if (pollTechnology == FLAG_READER_DISABLE) { synchronized (sLock) { if (!sHasCeFeature) { throw new UnsupportedOperationException();