From 3eb265ae00f8032b93f09cb5ef35f2fe196ea37c Mon Sep 17 00:00:00 2001 From: George Chang Date: Mon, 30 Dec 2019 14:53:16 +0800 Subject: [PATCH] Throw IOException on multiple connects. Only one TagTechnology can be connected at a time. Other calls to connect() will return IOException. Bug: 144398423 Test: check error on multiple connects Change-Id: I19a5f33c7f0d3e7592fe7791c1e04ddc2c9d6125 --- core/java/android/nfc/Tag.java | 10 +++++----- core/java/android/nfc/tech/BasicTagTechnology.java | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java index 8bb2df0bba587..b9e6ff4a5a9ec 100644 --- a/core/java/android/nfc/Tag.java +++ b/core/java/android/nfc/Tag.java @@ -455,12 +455,12 @@ public final class Tag implements Parcelable { * * @hide */ - public synchronized void setConnectedTechnology(int technology) { - if (mConnectedTechnology == -1) { - mConnectedTechnology = technology; - } else { - throw new IllegalStateException("Close other technology first!"); + public synchronized boolean setConnectedTechnology(int technology) { + if (mConnectedTechnology != -1) { + return false; } + mConnectedTechnology = technology; + return true; } /** diff --git a/core/java/android/nfc/tech/BasicTagTechnology.java b/core/java/android/nfc/tech/BasicTagTechnology.java index b6b347ca06196..ae468fead7a2f 100644 --- a/core/java/android/nfc/tech/BasicTagTechnology.java +++ b/core/java/android/nfc/tech/BasicTagTechnology.java @@ -75,7 +75,10 @@ abstract class BasicTagTechnology implements TagTechnology { if (errorCode == ErrorCodes.SUCCESS) { // Store this in the tag object - mTag.setConnectedTechnology(mSelectedTechnology); + if (!mTag.setConnectedTechnology(mSelectedTechnology)) { + Log.e(TAG, "Close other technology first!"); + throw new IOException("Only one TagTechnology can be connected at a time."); + } mIsConnected = true; } else if (errorCode == ErrorCodes.ERROR_NOT_SUPPORTED) { throw new UnsupportedOperationException("Connecting to " +