diff options
| -rw-r--r-- | nfc/api/system-current.txt | 5 | ||||
| -rw-r--r-- | nfc/java/android/nfc/INfcAdapter.aidl | 3 | ||||
| -rw-r--r-- | nfc/java/android/nfc/NfcOemExtension.java | 52 |
3 files changed, 60 insertions, 0 deletions
diff --git a/nfc/api/system-current.txt b/nfc/api/system-current.txt index d17a9b62d02d..94231b0facdb 100644 --- a/nfc/api/system-current.txt +++ b/nfc/api/system-current.txt @@ -58,10 +58,15 @@ package android.nfc { @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 246efc7ca557..a166b283f55b 100644 --- a/nfc/java/android/nfc/INfcAdapter.aidl +++ b/nfc/java/android/nfc/INfcAdapter.aidl @@ -114,4 +114,7 @@ interface INfcAdapter 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 011c60b080f8..6d5c069bca3a 100644 --- a/nfc/java/android/nfc/NfcOemExtension.java +++ b/nfc/java/android/nfc/NfcOemExtension.java @@ -471,6 +471,58 @@ public final class NfcOemExtension { 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 |