[framework] Add more oem extension APIs
Bug: 338255533
Test: atest CtsNfcTestCases
Change-Id: I1a63f1cff59fc099f07f318d7e520429463c36bc
diff --git a/nfc/api/system-current.txt b/nfc/api/system-current.txt
index d17a9b6..94231b0 100644
--- a/nfc/api/system-current.txt
+++ b/nfc/api/system-current.txt
@@ -58,10 +58,15 @@
@FlaggedApi("android.nfc.nfc_oem_extension") public final class NfcOemExtension {
method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void clearPreference();
method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull public java.util.List<java.lang.String> getActiveNfceeList();
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean hasUserEnabledNfc();
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean isTagPresent();
method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void maybeTriggerFirmwareUpdate();
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void pausePolling(int);
method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void registerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.nfc.NfcOemExtension.Callback);
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void resumePolling();
method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public void setControllerAlwaysOnMode(int);
method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void synchronizeScreenState();
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void triggerInitialization();
method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void unregisterCallback(@NonNull android.nfc.NfcOemExtension.Callback);
field @FlaggedApi("android.nfc.nfc_oem_extension") public static final int DISABLE = 0; // 0x0
field @FlaggedApi("android.nfc.nfc_oem_extension") public static final int ENABLE_DEFAULT = 1; // 0x1
diff --git a/nfc/java/android/nfc/INfcAdapter.aidl b/nfc/java/android/nfc/INfcAdapter.aidl
index 246efc7..a166b28 100644
--- a/nfc/java/android/nfc/INfcAdapter.aidl
+++ b/nfc/java/android/nfc/INfcAdapter.aidl
@@ -114,4 +114,7 @@
void setScreenState();
void checkFirmware();
List<String> fetchActiveNfceeList();
+ void triggerInitialization();
+ boolean getSettingStatus();
+ boolean isTagPresent();
}
diff --git a/nfc/java/android/nfc/NfcOemExtension.java b/nfc/java/android/nfc/NfcOemExtension.java
index 011c60b..6d5c069 100644
--- a/nfc/java/android/nfc/NfcOemExtension.java
+++ b/nfc/java/android/nfc/NfcOemExtension.java
@@ -471,6 +471,58 @@
NfcAdapter.callService(() -> NfcAdapter.sService.setControllerAlwaysOn(mode));
}
+ /**
+ * Triggers NFC initialization. If OEM extension is registered
+ * (indicated via `enable_oem_extension` NFC overlay), the NFC stack initialization at bootup
+ * is delayed until the OEM extension app triggers the initialization via this call.
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public void triggerInitialization() {
+ NfcAdapter.callService(() -> NfcAdapter.sService.triggerInitialization());
+ }
+
+ /**
+ * Gets the last user toggle status.
+ * @return true if NFC is set to ON, false otherwise
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public boolean hasUserEnabledNfc() {
+ return NfcAdapter.callServiceReturn(() -> NfcAdapter.sService.getSettingStatus(), false);
+ }
+
+ /**
+ * Checks if the tag is present or not.
+ * @return true if the tag is present, false otherwise
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public boolean isTagPresent() {
+ return NfcAdapter.callServiceReturn(() -> NfcAdapter.sService.isTagPresent(), false);
+ }
+
+ /**
+ * Pauses NFC tag reader mode polling for a {@code timeoutInMs} millisecond. If polling must be
+ * resumed before timeout, use {@link #resumePolling()}.
+ * @param timeoutInMs the pause polling duration in millisecond
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public void pausePolling(int timeoutInMs) {
+ NfcAdapter.callService(() -> NfcAdapter.sService.pausePolling(timeoutInMs));
+ }
+
+ /**
+ * Resumes default NFC tag reader mode polling for the current device state if polling is
+ * paused. Calling this while polling is not paused is a no-op.
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public void resumePolling() {
+ NfcAdapter.callService(() -> NfcAdapter.sService.resumePolling());
+ }
+
private final class NfcOemExtensionCallback extends INfcOemExtensionCallback.Stub {
@Override