Provide information on whether a polling frame is auto-transact
Bug: b/326633946
Test: Added CTS test
Merged-In: I7b749368f4795b5f7e03f6945d0fdd66b4d97f18
Change-Id: I7b749368f4795b5f7e03f6945d0fdd66b4d97f18
diff --git a/nfc/api/current.txt b/nfc/api/current.txt
index 54f1421..9e0bb86 100644
--- a/nfc/api/current.txt
+++ b/nfc/api/current.txt
@@ -265,10 +265,11 @@
}
@FlaggedApi("android.nfc.nfc_read_polling_loop") public final class PollingFrame implements android.os.Parcelable {
- ctor public PollingFrame(int, @Nullable byte[], int, int);
+ ctor public PollingFrame(int, @Nullable byte[], int, int, boolean);
method public int describeContents();
method @NonNull public byte[] getData();
method public int getTimestamp();
+ method public boolean getTriggeredAutoTransact();
method public int getType();
method public int getVendorSpecificGain();
method public void writeToParcel(@NonNull android.os.Parcel, int);
diff --git a/nfc/java/android/nfc/cardemulation/PollingFrame.java b/nfc/java/android/nfc/cardemulation/PollingFrame.java
index 29d7bdf..7028c8f 100644
--- a/nfc/java/android/nfc/cardemulation/PollingFrame.java
+++ b/nfc/java/android/nfc/cardemulation/PollingFrame.java
@@ -133,12 +133,23 @@
@FlaggedApi(android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP)
public static final String KEY_POLLING_LOOP_TIMESTAMP = "android.nfc.cardemulation.TIMESTAMP";
+ /**
+ * KEY_POLLING_LOOP_TIMESTAMP is the Bundle key for whether this polling frame triggered
+ * autoTransact in the Bundle included in MSG_POLLING_LOOP.
+ *
+ * @hide
+ */
+ @FlaggedApi(android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP)
+ public static final String KEY_POLLING_LOOP_TRIGGERED_AUTOTRANSACT =
+ "android.nfc.cardemulation.TRIGGERED_AUTOTRANSACT";
+
@PollingFrameType
private final int mType;
private final byte[] mData;
private final int mGain;
private final int mTimestamp;
+ private final boolean mTriggeredAutoTransact;
public static final @NonNull Parcelable.Creator<PollingFrame> CREATOR =
new Parcelable.Creator<>() {
@@ -159,14 +170,17 @@
mData = (data == null) ? new byte[0] : data;
mGain = frame.getInt(KEY_POLLING_LOOP_GAIN, -1);
mTimestamp = frame.getInt(KEY_POLLING_LOOP_TIMESTAMP);
+ mTriggeredAutoTransact = frame.containsKey(KEY_POLLING_LOOP_TRIGGERED_AUTOTRANSACT)
+ && frame.getBoolean(KEY_POLLING_LOOP_TRIGGERED_AUTOTRANSACT);
}
public PollingFrame(@PollingFrameType int type, @Nullable byte[] data,
- int gain, int timestamp) {
+ int gain, int timestamp, boolean triggeredAutoTransact) {
mType = type;
mData = data == null ? new byte[0] : data;
mGain = gain;
mTimestamp = timestamp;
+ mTriggeredAutoTransact = triggeredAutoTransact;
}
/**
@@ -210,6 +224,14 @@
return mTimestamp;
}
+ /**
+ * Returns whether this frame triggered the device to automatically disable observe mode and
+ * allow one transaction.
+ */
+ public boolean getTriggeredAutoTransact() {
+ return mTriggeredAutoTransact;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -233,6 +255,7 @@
}
frame.putByteArray(KEY_POLLING_LOOP_DATA, getData());
frame.putInt(KEY_POLLING_LOOP_TIMESTAMP, getTimestamp());
+ frame.putBoolean(KEY_POLLING_LOOP_TRIGGERED_AUTOTRANSACT, getTriggeredAutoTransact());
return frame;
}