Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98e0ada5 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "[framework] Add API for commitRouting and extractOemPackages" into main am: bbbac2d1

parents 6c3dcb2a bbbac2d1
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -57,6 +57,7 @@ package android.nfc {


  @FlaggedApi("android.nfc.nfc_oem_extension") public final class NfcOemExtension {
  @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") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void clearPreference();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public int forceRoutingTableCommit();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull public java.util.List<java.lang.String> getActiveNfceeList();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull public java.util.List<java.lang.String> getActiveNfceeList();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.nfc.RoutingStatus getRoutingStatus();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.nfc.RoutingStatus getRoutingStatus();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public java.util.List<android.nfc.NfcRoutingTableEntry> getRoutingTable();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public java.util.List<android.nfc.NfcRoutingTableEntry> getRoutingTable();
@@ -73,6 +74,9 @@ package android.nfc {
    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 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 triggerInitialization();
    method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void unregisterCallback(@NonNull android.nfc.NfcOemExtension.Callback);
    method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void unregisterCallback(@NonNull android.nfc.NfcOemExtension.Callback);
    field public static final int COMMIT_ROUTING_STATUS_FAILED = 3; // 0x3
    field public static final int COMMIT_ROUTING_STATUS_FAILED_UPDATE_IN_PROGRESS = 6; // 0x6
    field public static final int COMMIT_ROUTING_STATUS_OK = 0; // 0x0
    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 DISABLE = 0; // 0x0
    field @FlaggedApi("android.nfc.nfc_oem_extension") public static final int ENABLE_DEFAULT = 1; // 0x1
    field @FlaggedApi("android.nfc.nfc_oem_extension") public static final int ENABLE_DEFAULT = 1; // 0x1
    field @FlaggedApi("android.nfc.nfc_oem_extension") public static final int ENABLE_EE = 3; // 0x3
    field @FlaggedApi("android.nfc.nfc_oem_extension") public static final int ENABLE_EE = 3; // 0x3
@@ -96,6 +100,7 @@ package android.nfc {
    method public void onEnableFinished(int);
    method public void onEnableFinished(int);
    method public void onEnableRequested(@NonNull java.util.function.Consumer<java.lang.Boolean>);
    method public void onEnableRequested(@NonNull java.util.function.Consumer<java.lang.Boolean>);
    method public void onEnableStarted();
    method public void onEnableStarted();
    method public void onExtractOemPackages(@NonNull android.nfc.NdefMessage, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>);
    method public void onGetOemAppSearchIntent(@NonNull java.util.List<java.lang.String>, @NonNull java.util.function.Consumer<android.content.Intent>);
    method public void onGetOemAppSearchIntent(@NonNull java.util.List<java.lang.String>, @NonNull java.util.function.Consumer<android.content.Intent>);
    method public void onHceEventReceived(int);
    method public void onHceEventReceived(int);
    method public void onLaunchHceAppChooserActivity(@NonNull String, @NonNull java.util.List<android.nfc.cardemulation.ApduServiceInfo>, @NonNull android.content.ComponentName, @NonNull String);
    method public void onLaunchHceAppChooserActivity(@NonNull String, @NonNull java.util.List<android.nfc.cardemulation.ApduServiceInfo>, @NonNull android.content.ComponentName, @NonNull String);
@@ -106,7 +111,7 @@ package android.nfc {
    method public void onReaderOptionChanged(boolean);
    method public void onReaderOptionChanged(boolean);
    method public void onRfDiscoveryStarted(boolean);
    method public void onRfDiscoveryStarted(boolean);
    method public void onRfFieldActivated(boolean);
    method public void onRfFieldActivated(boolean);
    method public void onRoutingChanged();
    method public void onRoutingChanged(@NonNull java.util.function.Consumer<java.lang.Boolean>);
    method public void onRoutingTableFull();
    method public void onRoutingTableFull();
    method public void onStateUpdated(int);
    method public void onStateUpdated(int);
    method public void onTagConnected(boolean);
    method public void onTagConnected(boolean);
+1 −0
Original line number Original line Diff line number Diff line
@@ -120,4 +120,5 @@ interface INfcAdapter
    boolean isTagPresent();
    boolean isTagPresent();
    List<Entry> getRoutingTableEntryList();
    List<Entry> getRoutingTableEntryList();
    void indicateDataMigration(boolean inProgress, String pkg);
    void indicateDataMigration(boolean inProgress, String pkg);
    int commitRouting();
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -41,7 +41,7 @@ interface INfcOemExtensionCallback {
   void onEnableFinished(int status);
   void onEnableFinished(int status);
   void onDisableFinished(int status);
   void onDisableFinished(int status);
   void onTagDispatch(in ResultReceiver isSkipped);
   void onTagDispatch(in ResultReceiver isSkipped);
   void onRoutingChanged();
   void onRoutingChanged(in ResultReceiver isSkipped);
   void onHceEventReceived(int action);
   void onHceEventReceived(int action);
   void onReaderOptionChanged(boolean enabled);
   void onReaderOptionChanged(boolean enabled);
   void onCardEmulationActivated(boolean isActivated);
   void onCardEmulationActivated(boolean isActivated);
@@ -54,4 +54,5 @@ interface INfcOemExtensionCallback {
   void onLaunchHceTapAgainActivity(in ApduServiceInfo service, in String category);
   void onLaunchHceTapAgainActivity(in ApduServiceInfo service, in String category);
   void onRoutingTableFull();
   void onRoutingTableFull();
   void onLogEventNotified(in OemLogItems item);
   void onLogEventNotified(in OemLogItems item);
   void onExtractOemPackages(in NdefMessage message, in ResultReceiver packageReceiver);
}
}
+73 −4
Original line number Original line Diff line number Diff line
@@ -193,6 +193,30 @@ public final class NfcOemExtension {
    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface StatusCode {}
    public @interface StatusCode {}


    /**
     * Routing commit succeeded.
     */
    public static final int COMMIT_ROUTING_STATUS_OK = 0;
    /**
     * Routing commit failed.
     */
    public static final int COMMIT_ROUTING_STATUS_FAILED = 3;
    /**
     * Routing commit failed due to the update is in progress.
     */
    public static final int COMMIT_ROUTING_STATUS_FAILED_UPDATE_IN_PROGRESS = 6;

    /**
     * Status codes returned when calling {@link #forceRoutingTableCommit()}
     * @hide
     */
    @IntDef(prefix = "COMMIT_ROUTING_STATUS_", value = {
            COMMIT_ROUTING_STATUS_OK,
            COMMIT_ROUTING_STATUS_FAILED,
            COMMIT_ROUTING_STATUS_FAILED_UPDATE_IN_PROGRESS,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface CommitRoutingStatusCode {}
    /**
    /**
     * Interface for Oem extensions for NFC.
     * Interface for Oem extensions for NFC.
     */
     */
@@ -286,8 +310,12 @@ public final class NfcOemExtension {


        /**
        /**
         * Notifies routing configuration is changed.
         * Notifies routing configuration is changed.
         * @param isCommitRoutingSkipped The {@link Consumer} to be
         * completed. If routing commit should be skipped,
         * the {@link Consumer#accept(Object)} should be called with
         * {@link Boolean#TRUE}, otherwise call with {@link Boolean#FALSE}.
         */
         */
        void onRoutingChanged();
        void onRoutingChanged(@NonNull Consumer<Boolean> isCommitRoutingSkipped);


        /**
        /**
         * API to activate start stop cpu boost on hce event.
         * API to activate start stop cpu boost on hce event.
@@ -404,6 +432,19 @@ public final class NfcOemExtension {
         * @param item the log items that contains log information of NFC event.
         * @param item the log items that contains log information of NFC event.
         */
         */
        void onLogEventNotified(@NonNull OemLogItems item);
        void onLogEventNotified(@NonNull OemLogItems item);

        /**
         * Callback to to extract OEM defined packages from given NDEF message when
         * a NFC tag is detected. These are used to handle NFC tags encoded with a
         * proprietary format for storing app name (Android native app format).
         *
         * @param message NDEF message containing OEM package names
         * @param packageConsumer The {@link Consumer} to be completed.
         *                        The {@link Consumer#accept(Object)} should be called with
         *                        the list of package names.
         */
        void onExtractOemPackages(@NonNull NdefMessage message,
                @NonNull Consumer<List<String>> packageConsumer);
    }
    }




@@ -740,6 +781,18 @@ public final class NfcOemExtension {
        return result;
        return result;
    }
    }


    /**
     * API to force a routing table commit.
     * @return a {@link StatusCode} to indicate if commit routing succeeded or not
     */
    @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
    @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
    @CommitRoutingStatusCode
    public int forceRoutingTableCommit() {
        return NfcAdapter.callServiceReturn(
                () -> NfcAdapter.sService.commitRouting(), COMMIT_ROUTING_STATUS_FAILED);
    }

    private final class NfcOemExtensionCallback extends INfcOemExtensionCallback.Stub {
    private final class NfcOemExtensionCallback extends INfcOemExtensionCallback.Stub {


        @Override
        @Override
@@ -843,9 +896,10 @@ public final class NfcOemExtension {
                        new ReceiverWrapper<>(isSkipped), cb::onTagDispatch, ex));
                        new ReceiverWrapper<>(isSkipped), cb::onTagDispatch, ex));
        }
        }
        @Override
        @Override
        public void onRoutingChanged() throws RemoteException {
        public void onRoutingChanged(ResultReceiver isSkipped) throws RemoteException {
            mCallbackMap.forEach((cb, ex) ->
            mCallbackMap.forEach((cb, ex) ->
                    handleVoidCallback(null, (Object input) -> cb.onRoutingChanged(), ex));
                    handleVoidCallback(
                            new ReceiverWrapper<>(isSkipped), cb::onRoutingChanged, ex));
        }
        }
        @Override
        @Override
        public void onHceEventReceived(int action) throws RemoteException {
        public void onHceEventReceived(int action) throws RemoteException {
@@ -924,6 +978,15 @@ public final class NfcOemExtension {
                    handleVoidCallback(item, cb::onLogEventNotified, ex));
                    handleVoidCallback(item, cb::onLogEventNotified, ex));
        }
        }


        @Override
        public void onExtractOemPackages(NdefMessage message, ResultReceiver packageConsumer)
                throws RemoteException {
            mCallbackMap.forEach((cb, ex) ->
                    handleVoid2ArgCallback(message,
                            new ReceiverWrapper<>(packageConsumer),
                            cb::onExtractOemPackages, ex));
        }

        private <T> void handleVoidCallback(
        private <T> void handleVoidCallback(
                T input, Consumer<T> callbackMethod, Executor executor) {
                T input, Consumer<T> callbackMethod, Executor executor) {
            synchronized (mLock) {
            synchronized (mLock) {
@@ -1034,8 +1097,14 @@ public final class NfcOemExtension {
                Bundle bundle = new Bundle();
                Bundle bundle = new Bundle();
                bundle.putParcelable("intent", (Intent) result);
                bundle.putParcelable("intent", (Intent) result);
                mResultReceiver.send(0, bundle);
                mResultReceiver.send(0, bundle);
            } else if (result instanceof List<?> list) {
                if (list.stream().allMatch(String.class::isInstance)) {
                    Bundle bundle = new Bundle();
                    bundle.putStringArray("packageNames",
                            list.stream().map(pkg -> (String) pkg).toArray(String[]::new));
                    mResultReceiver.send(0, bundle);
                }
            }
            }

        }
        }


        @Override
        @Override