diff --git a/framework-t/Sources.bp b/framework-t/Sources.bp index bc27852857..217a1f67c3 100644 --- a/framework-t/Sources.bp +++ b/framework-t/Sources.bp @@ -131,8 +131,8 @@ filegroup { "src/android/net/EthernetNetworkUpdateRequest.java", "src/android/net/EthernetNetworkUpdateRequest.aidl", "src/android/net/IEthernetManager.aidl", + "src/android/net/IEthernetNetworkManagementListener.aidl", "src/android/net/IEthernetServiceListener.aidl", - "src/android/net/INetworkInterfaceOutcomeReceiver.aidl", "src/android/net/ITetheredInterfaceCallback.aidl", ], path: "src", diff --git a/framework-t/src/android/net/EthernetManager.java b/framework-t/src/android/net/EthernetManager.java index 4f61dbf38b..793f28d5aa 100644 --- a/framework-t/src/android/net/EthernetManager.java +++ b/framework-t/src/android/net/EthernetManager.java @@ -30,7 +30,6 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; -import android.os.OutcomeReceiver; import android.os.RemoteException; import com.android.internal.annotations.GuardedBy; @@ -41,6 +40,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Objects; import java.util.concurrent.Executor; +import java.util.function.BiConsumer; /** * A class that manages and configures Ethernet interfaces. @@ -443,45 +443,41 @@ public class EthernetManager { return new TetheredInterfaceRequest(mService, cbInternal); } - private static final class NetworkInterfaceOutcomeReceiver - extends INetworkInterfaceOutcomeReceiver.Stub { + private static final class InternalNetworkManagementListener + extends IEthernetNetworkManagementListener.Stub { @NonNull private final Executor mExecutor; @NonNull - private final OutcomeReceiver mCallback; + private final BiConsumer mListener; - NetworkInterfaceOutcomeReceiver( + InternalNetworkManagementListener( @NonNull final Executor executor, - @NonNull final OutcomeReceiver - callback) { + @NonNull final BiConsumer listener) { Objects.requireNonNull(executor, "Pass a non-null executor"); - Objects.requireNonNull(callback, "Pass a non-null callback"); + Objects.requireNonNull(listener, "Pass a non-null listener"); mExecutor = executor; - mCallback = callback; + mListener = listener; } @Override - public void onResult(@NonNull String iface) { - mExecutor.execute(() -> mCallback.onResult(iface)); - } - - @Override - public void onError(@NonNull EthernetNetworkManagementException e) { - mExecutor.execute(() -> mCallback.onError(e)); + public void onComplete( + @Nullable final Network network, + @Nullable final EthernetNetworkManagementException e) { + mExecutor.execute(() -> mListener.accept(network, e)); } } - private NetworkInterfaceOutcomeReceiver makeNetworkInterfaceOutcomeReceiver( + private InternalNetworkManagementListener getInternalNetworkManagementListener( @Nullable final Executor executor, - @Nullable final OutcomeReceiver callback) { - if (null != callback) { - Objects.requireNonNull(executor, "Pass a non-null executor, or a null callback"); + @Nullable final BiConsumer listener) { + if (null != listener) { + Objects.requireNonNull(executor, "Pass a non-null executor, or a null listener"); } - final NetworkInterfaceOutcomeReceiver proxy; - if (null == callback) { + final InternalNetworkManagementListener proxy; + if (null == listener) { proxy = null; } else { - proxy = new NetworkInterfaceOutcomeReceiver(executor, callback); + proxy = new InternalNetworkManagementListener(executor, listener); } return proxy; } @@ -496,17 +492,14 @@ public class EthernetManager { * Similarly, use {@link NetworkCapabilities.Builder} to build a {@code NetworkCapabilities} * object for this network to put inside the {@code request}. * - * This function accepts an {@link OutcomeReceiver} that is called once the operation has - * finished execution. + * If non-null, the listener will be called exactly once after this is called, unless + * a synchronous exception was thrown. * * @param iface the name of the interface to act upon. * @param request the {@link EthernetNetworkUpdateRequest} used to set an ethernet network's * {@link StaticIpConfiguration} and {@link NetworkCapabilities} values. - * @param executor an {@link Executor} to execute the callback on. Optional if callback is null. - * @param callback an optional {@link OutcomeReceiver} to listen for completion of the - * operation. On success, {@link OutcomeReceiver#onResult} is called with the - * interface name. On error, {@link OutcomeReceiver#onError} is called with more - * information about the error. + * @param executor an {@link Executor} to execute the listener on. Optional if listener is null. + * @param listener an optional {@link BiConsumer} to listen for completion of the operation. * @throws SecurityException if the process doesn't hold * {@link android.Manifest.permission.MANAGE_ETHERNET_NETWORKS}. * @throws UnsupportedOperationException if called on a non-automotive device or on an @@ -522,11 +515,11 @@ public class EthernetManager { @NonNull String iface, @NonNull EthernetNetworkUpdateRequest request, @Nullable @CallbackExecutor Executor executor, - @Nullable OutcomeReceiver callback) { + @Nullable BiConsumer listener) { Objects.requireNonNull(iface, "iface must be non-null"); Objects.requireNonNull(request, "request must be non-null"); - final NetworkInterfaceOutcomeReceiver proxy = makeNetworkInterfaceOutcomeReceiver( - executor, callback); + final InternalNetworkManagementListener proxy = getInternalNetworkManagementListener( + executor, listener); try { mService.updateConfiguration(iface, request, proxy); } catch (RemoteException e) { @@ -537,17 +530,15 @@ public class EthernetManager { /** * Set an ethernet network's link state up. * - * When the link is successfully turned up, the callback will be called with the network - * interface was torn down, if any. If any error or unexpected condition happens while the - * system tries to turn the interface down, the callback will be called with an appropriate - * exception. The callback is guaranteed to be called exactly once for each call to this method. + * When the link is successfully turned up, the listener will be called with the resulting + * network. If any error or unexpected condition happens while the system tries to turn the + * interface up, the listener will be called with an appropriate exception. + * The listener is guaranteed to be called exactly once for each call to this method, but this + * may take an unbounded amount of time depending on the actual network conditions. * * @param iface the name of the interface to act upon. - * @param executor an {@link Executor} to execute the callback on. Optional if callback is null. - * @param callback an optional {@link OutcomeReceiver} to listen for completion of the - * operation. On success, {@link OutcomeReceiver#onResult} is called with the - * interface name. On error, {@link OutcomeReceiver#onError} is called with more - * information about the error. + * @param executor an {@link Executor} to execute the listener on. Optional if listener is null. + * @param listener an optional {@link BiConsumer} to listen for completion of the operation. * @throws SecurityException if the process doesn't hold * {@link android.Manifest.permission.MANAGE_ETHERNET_NETWORKS}. * @throws UnsupportedOperationException if called on a non-automotive device. @@ -562,10 +553,10 @@ public class EthernetManager { public void connectNetwork( @NonNull String iface, @Nullable @CallbackExecutor Executor executor, - @Nullable OutcomeReceiver callback) { + @Nullable BiConsumer listener) { Objects.requireNonNull(iface, "iface must be non-null"); - final NetworkInterfaceOutcomeReceiver proxy = makeNetworkInterfaceOutcomeReceiver( - executor, callback); + final InternalNetworkManagementListener proxy = getInternalNetworkManagementListener( + executor, listener); try { mService.connectNetwork(iface, proxy); } catch (RemoteException e) { @@ -576,17 +567,14 @@ public class EthernetManager { /** * Set an ethernet network's link state down. * - * When the link is successfully turned down, the callback will be called with the network - * interface was torn down, if any. If any error or unexpected condition happens while the - * system tries to turn the interface down, the callback will be called with an appropriate - * exception. The callback is guaranteed to be called exactly once for each call to this method. + * When the link is successfully turned down, the listener will be called with the network that + * was torn down, if any. If any error or unexpected condition happens while the system tries to + * turn the interface down, the listener will be called with an appropriate exception. + * The listener is guaranteed to be called exactly once for each call to this method. * * @param iface the name of the interface to act upon. - * @param executor an {@link Executor} to execute the callback on. Optional if callback is null. - * @param callback an optional {@link OutcomeReceiver} to listen for completion of the - * operation. On success, {@link OutcomeReceiver#onResult} is called with the - * interface name. On error, {@link OutcomeReceiver#onError} is called with more - * information about the error. + * @param executor an {@link Executor} to execute the listener on. Optional if listener is null. + * @param listener an optional {@link BiConsumer} to listen for completion of the operation. * @throws SecurityException if the process doesn't hold * {@link android.Manifest.permission.MANAGE_ETHERNET_NETWORKS}. * @throws UnsupportedOperationException if called on a non-automotive device. @@ -601,10 +589,10 @@ public class EthernetManager { public void disconnectNetwork( @NonNull String iface, @Nullable @CallbackExecutor Executor executor, - @Nullable OutcomeReceiver callback) { + @Nullable BiConsumer listener) { Objects.requireNonNull(iface, "iface must be non-null"); - final NetworkInterfaceOutcomeReceiver proxy = makeNetworkInterfaceOutcomeReceiver( - executor, callback); + final InternalNetworkManagementListener proxy = getInternalNetworkManagementListener( + executor, listener); try { mService.disconnectNetwork(iface, proxy); } catch (RemoteException e) { diff --git a/framework-t/src/android/net/IEthernetManager.aidl b/framework-t/src/android/net/IEthernetManager.aidl index 95ae907a3d..544d02ba76 100644 --- a/framework-t/src/android/net/IEthernetManager.aidl +++ b/framework-t/src/android/net/IEthernetManager.aidl @@ -18,9 +18,8 @@ package android.net; import android.net.IpConfiguration; import android.net.IEthernetServiceListener; -import android.net.EthernetNetworkManagementException; +import android.net.IEthernetNetworkManagementListener; import android.net.EthernetNetworkUpdateRequest; -import android.net.INetworkInterfaceOutcomeReceiver; import android.net.ITetheredInterfaceCallback; /** @@ -40,7 +39,7 @@ interface IEthernetManager void requestTetheredInterface(in ITetheredInterfaceCallback callback); void releaseTetheredInterface(in ITetheredInterfaceCallback callback); void updateConfiguration(String iface, in EthernetNetworkUpdateRequest request, - in INetworkInterfaceOutcomeReceiver listener); - void connectNetwork(String iface, in INetworkInterfaceOutcomeReceiver listener); - void disconnectNetwork(String iface, in INetworkInterfaceOutcomeReceiver listener); + in IEthernetNetworkManagementListener listener); + void connectNetwork(String iface, in IEthernetNetworkManagementListener listener); + void disconnectNetwork(String iface, in IEthernetNetworkManagementListener listener); } diff --git a/framework-t/src/android/net/INetworkInterfaceOutcomeReceiver.aidl b/framework-t/src/android/net/IEthernetNetworkManagementListener.aidl similarity index 80% rename from framework-t/src/android/net/INetworkInterfaceOutcomeReceiver.aidl rename to framework-t/src/android/net/IEthernetNetworkManagementListener.aidl index 85795ead7a..93edccfdaf 100644 --- a/framework-t/src/android/net/INetworkInterfaceOutcomeReceiver.aidl +++ b/framework-t/src/android/net/IEthernetNetworkManagementListener.aidl @@ -17,9 +17,9 @@ package android.net; import android.net.EthernetNetworkManagementException; +import android.net.Network; /** @hide */ -oneway interface INetworkInterfaceOutcomeReceiver { - void onResult(in String iface); - void onError(in EthernetNetworkManagementException e); +oneway interface IEthernetNetworkManagementListener { + void onComplete(in Network network, in EthernetNetworkManagementException exception); } \ No newline at end of file