From be91b5831e3c638021f84119e4308d2a17bbfb8e Mon Sep 17 00:00:00 2001 From: James Mattis Date: Tue, 14 Dec 2021 18:23:30 -0800 Subject: [PATCH] eth manager updates for network management APIs Private methods added to EthernetManager for network management to be made public when ready. Bug: 210485380 Test: make, flash and boot Change-Id: I7f484d373e05225c98bf0e6111afdc12be31764f --- .../src/android/net/EthernetManager.java | 82 +++++++++++++++++++ .../src/android/net/IEthernetManager.aidl | 6 ++ 2 files changed, 88 insertions(+) diff --git a/framework-t/src/android/net/EthernetManager.java b/framework-t/src/android/net/EthernetManager.java index 7cd63ef9cc..ece54df966 100644 --- a/framework-t/src/android/net/EthernetManager.java +++ b/framework-t/src/android/net/EthernetManager.java @@ -16,7 +16,9 @@ package android.net; +import android.annotation.CallbackExecutor; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; @@ -32,6 +34,7 @@ import com.android.internal.os.BackgroundThread; import java.util.ArrayList; import java.util.Objects; import java.util.concurrent.Executor; +import java.util.function.BiConsumer; /** * A class representing the IP configuration of the Ethernet network. @@ -315,4 +318,83 @@ public class EthernetManager { } return new TetheredInterfaceRequest(mService, cbInternal); } + + private static final class InternalNetworkManagementListener + extends IInternalNetworkManagementListener.Stub { + @NonNull + private final Executor mExecutor; + @NonNull + private final BiConsumer mListener; + + InternalNetworkManagementListener( + @NonNull final Executor executor, + @NonNull final BiConsumer listener) { + Objects.requireNonNull(executor, "Pass a non-null executor"); + Objects.requireNonNull(listener, "Pass a non-null listener"); + mExecutor = executor; + mListener = listener; + } + + @Override + public void onComplete( + @Nullable final Network network, + @Nullable final InternalNetworkManagementException e) { + mExecutor.execute(() -> mListener.accept(network, e)); + } + } + + private InternalNetworkManagementListener getInternalNetworkManagementListener( + @Nullable final Executor executor, + @Nullable final BiConsumer listener) { + if (null != listener) { + Objects.requireNonNull(executor, "Pass a non-null executor, or a null listener"); + } + final InternalNetworkManagementListener proxy; + if (null == listener) { + proxy = null; + } else { + proxy = new InternalNetworkManagementListener(executor, listener); + } + return proxy; + } + + private void updateConfiguration( + @NonNull String iface, + @NonNull InternalNetworkUpdateRequest request, + @Nullable @CallbackExecutor Executor executor, + @Nullable BiConsumer listener) { + final InternalNetworkManagementListener proxy = getInternalNetworkManagementListener( + executor, listener); + try { + mService.updateConfiguration(iface, request, proxy); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + private void connectNetwork( + @NonNull String iface, + @Nullable @CallbackExecutor Executor executor, + @Nullable BiConsumer listener) { + final InternalNetworkManagementListener proxy = getInternalNetworkManagementListener( + executor, listener); + try { + mService.connectNetwork(iface, proxy); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + private void disconnectNetwork( + @NonNull String iface, + @Nullable @CallbackExecutor Executor executor, + @Nullable BiConsumer listener) { + final InternalNetworkManagementListener proxy = getInternalNetworkManagementListener( + executor, listener); + try { + mService.disconnectNetwork(iface, proxy); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } } diff --git a/framework-t/src/android/net/IEthernetManager.aidl b/framework-t/src/android/net/IEthernetManager.aidl index e058e5a70c..e688bea1cf 100644 --- a/framework-t/src/android/net/IEthernetManager.aidl +++ b/framework-t/src/android/net/IEthernetManager.aidl @@ -18,6 +18,8 @@ package android.net; import android.net.IpConfiguration; import android.net.IEthernetServiceListener; +import android.net.IInternalNetworkManagementListener; +import android.net.InternalNetworkUpdateRequest; import android.net.ITetheredInterfaceCallback; /** @@ -36,4 +38,8 @@ interface IEthernetManager void setIncludeTestInterfaces(boolean include); void requestTetheredInterface(in ITetheredInterfaceCallback callback); void releaseTetheredInterface(in ITetheredInterfaceCallback callback); + void updateConfiguration(String iface, in InternalNetworkUpdateRequest request, + in IInternalNetworkManagementListener listener); + void connectNetwork(String iface, in IInternalNetworkManagementListener listener); + void disconnectNetwork(String iface, in IInternalNetworkManagementListener listener); }