Revert "Change Ethernet API to use OutcomeReceiver"

Revert "Change network management listener to outcome receiver"

Revert submission 2028203-ethernet-outcomereceiver

Reason for revert: BuildMonitor investigating b/225169800
Reverted Changes:
I4c204a848:Change Ethernet API to use OutcomeReceiver
I7c46545a4:Change Ethernet API to use OutcomeReceiver
Id8fadfed9:Change network management listener to outcome rece...

Change-Id: I45af594f7233ed89113f4cf7f977092271980672
diff --git a/framework-t/Sources.bp b/framework-t/Sources.bp
index bc27852..217a1f6 100644
--- a/framework-t/Sources.bp
+++ b/framework-t/Sources.bp
@@ -131,8 +131,8 @@
         "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 4f61dbf..793f28d 100644
--- a/framework-t/src/android/net/EthernetManager.java
+++ b/framework-t/src/android/net/EthernetManager.java
@@ -30,7 +30,6 @@
 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.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 @@
         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<String, EthernetNetworkManagementException> mCallback;
+        private final BiConsumer<Network, EthernetNetworkManagementException> mListener;
 
-        NetworkInterfaceOutcomeReceiver(
+        InternalNetworkManagementListener(
                 @NonNull final Executor executor,
-                @NonNull final OutcomeReceiver<String, EthernetNetworkManagementException>
-                        callback) {
+                @NonNull final BiConsumer<Network, EthernetNetworkManagementException> 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<String, EthernetNetworkManagementException> callback) {
-        if (null != callback) {
-            Objects.requireNonNull(executor, "Pass a non-null executor, or a null callback");
+            @Nullable final BiConsumer<Network, EthernetNetworkManagementException> 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 @@
      * 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 @@
             @NonNull String iface,
             @NonNull EthernetNetworkUpdateRequest request,
             @Nullable @CallbackExecutor Executor executor,
-            @Nullable OutcomeReceiver<String, EthernetNetworkManagementException> callback) {
+            @Nullable BiConsumer<Network, EthernetNetworkManagementException> 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 @@
     /**
      * 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 void connectNetwork(
             @NonNull String iface,
             @Nullable @CallbackExecutor Executor executor,
-            @Nullable OutcomeReceiver<String, EthernetNetworkManagementException> callback) {
+            @Nullable BiConsumer<Network, EthernetNetworkManagementException> 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 @@
     /**
      * 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 void disconnectNetwork(
             @NonNull String iface,
             @Nullable @CallbackExecutor Executor executor,
-            @Nullable OutcomeReceiver<String, EthernetNetworkManagementException> callback) {
+            @Nullable BiConsumer<Network, EthernetNetworkManagementException> 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 95ae907..544d02b 100644
--- a/framework-t/src/android/net/IEthernetManager.aidl
+++ b/framework-t/src/android/net/IEthernetManager.aidl
@@ -18,9 +18,8 @@
 
 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 @@
     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 85795ea..93edccf 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