diff options
| author | 2022-03-07 03:08:20 +0000 | |
|---|---|---|
| committer | 2022-03-07 03:08:20 +0000 | |
| commit | cea18d7f27d42f7bb0fef2ed3946a3eb403dc1fe (patch) | |
| tree | 2817b296d7315c9a1d8ef9c1f1d5e51e36444d29 | |
| parent | 181d454887306a3ef2b7b985925a32ce55281cf8 (diff) | |
| parent | 113f3a4a1d9171db7456aa9ae8b0a2b50545c326 (diff) | |
[automerge] Add tag availability checking mechanism 2p: 113f3a4a1d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16730930
Bug: 199291025
Change-Id: Ib99e5fe19b020154867910bbaeb513be277a81cd
Merged-In: Iabaab1f6d2d22e15966d31dd79099369d828f4c6
| -rw-r--r-- | core/java/android/nfc/INfcTag.aidl | 3 | ||||
| -rw-r--r-- | core/java/android/nfc/Tag.java | 21 |
2 files changed, 24 insertions, 0 deletions
diff --git a/core/java/android/nfc/INfcTag.aidl b/core/java/android/nfc/INfcTag.aidl index 539fd4adb0a0..e1ccc4fb740b 100644 --- a/core/java/android/nfc/INfcTag.aidl +++ b/core/java/android/nfc/INfcTag.aidl @@ -45,4 +45,7 @@ interface INfcTag boolean canMakeReadOnly(int ndefType); int getMaxTransceiveLength(int technology); boolean getExtendedLengthApdusSupported(); + + void setTagUpToDate(long cookie); + boolean isTagUpToDate(long cookie); } diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java index 398ec63a931b..0ce9c70569b5 100644 --- a/core/java/android/nfc/Tag.java +++ b/core/java/android/nfc/Tag.java @@ -34,6 +34,7 @@ import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; +import android.os.SystemClock; import java.io.IOException; import java.util.Arrays; @@ -121,6 +122,7 @@ public final class Tag implements Parcelable { final INfcTag mTagService; // interface to NFC service, will be null if mock tag int mConnectedTechnology; + long mCookie; /** * Hidden constructor to be used by NFC service and internal classes. @@ -140,6 +142,13 @@ public final class Tag implements Parcelable { mTagService = tagService; mConnectedTechnology = -1; + + try { + mCookie = SystemClock.elapsedRealtime(); + tagService.setTagUpToDate(mCookie); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } } /** @@ -361,6 +370,18 @@ public final class Tag implements Parcelable { /** @hide */ @UnsupportedAppUsage public INfcTag getTagService() { + try { + if (!mTagService.isTagUpToDate(mCookie)) { + String id_str = ""; + for (int i = 0; i < mId.length; i++) { + id_str = id_str + String.format("%02X ", mId[i]); + } + String msg = "Permission Denial: Tag ( ID: " + id_str + ") is out of date"; + throw new SecurityException(msg); + } + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } return mTagService; } |