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

Commit 4461cfb0 authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN Committed by android-build-merger
Browse files

Merge "Support putting one Ethernet interface in server mode."

am: e7e38501

Change-Id: Ib1c26821880daa118b1911d4f98ebbd970c3c1b4
parents 7a343584 e7e38501
Loading
Loading
Loading
Loading
+77 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.net;

import android.annotation.NonNull;
import android.annotation.SystemService;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
@@ -24,6 +25,7 @@ import android.os.Message;
import android.os.RemoteException;

import java.util.ArrayList;
import java.util.Objects;

/**
 * A class representing the IP configuration of the Ethernet network.
@@ -37,7 +39,7 @@ public class EthernetManager {

    private final Context mContext;
    private final IEthernetManager mService;
    private final Handler mHandler = new Handler() {
    private final Handler mHandler = new Handler(ConnectivityThread.getInstanceLooper()) {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == MSG_AVAILABILITY_CHANGED) {
@@ -180,4 +182,78 @@ public class EthernetManager {
            }
        }
    }

    /**
     * A request for a tethered interface.
     */
    public static class TetheredInterfaceRequest {
        private final IEthernetManager mService;
        private final ITetheredInterfaceCallback mCb;

        private TetheredInterfaceRequest(@NonNull IEthernetManager service,
                @NonNull ITetheredInterfaceCallback cb) {
            this.mService = service;
            this.mCb = cb;
        }

        /**
         * Release the request, causing the interface to revert back from tethering mode if there
         * is no other requestor.
         */
        public void release() {
            try {
                mService.releaseTetheredInterface(mCb);
            } catch (RemoteException e) {
                e.rethrowFromSystemServer();
            }
        }
    }

    /**
     * Callback for {@link #requestTetheredInterface(TetheredInterfaceCallback)}.
     */
    public interface TetheredInterfaceCallback {
        /**
         * Called when the tethered interface is available.
         * @param iface The name of the interface.
         */
        void onAvailable(@NonNull String iface);

        /**
         * Called when the tethered interface is now unavailable.
         */
        void onUnavailable();
    }

    /**
     * Request a tethered interface in tethering mode.
     *
     * <p>When this method is called and there is at least one ethernet interface available, the
     * system will designate one to act as a tethered interface. If there is already a tethered
     * interface, the existing interface will be used.
     * @param callback A callback to be called once the request has been fulfilled.
     */
    @NonNull
    public TetheredInterfaceRequest requestTetheredInterface(
            @NonNull TetheredInterfaceCallback callback) {
        Objects.requireNonNull(callback, "Callback must be non-null");
        final ITetheredInterfaceCallback cbInternal = new ITetheredInterfaceCallback.Stub() {
            @Override
            public void onAvailable(String iface) {
                callback.onAvailable(iface);
            }

            @Override
            public void onUnavailable() {
                callback.onUnavailable();
            }
        };

        try {
            mService.requestTetheredInterface(cbInternal);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
        return new TetheredInterfaceRequest(mService, cbInternal);
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.net;

import android.net.IpConfiguration;
import android.net.IEthernetServiceListener;
import android.net.ITetheredInterfaceCallback;

/**
 * Interface that answers queries about, and allows changing
@@ -32,4 +33,6 @@ interface IEthernetManager
    boolean isAvailable(String iface);
    void addListener(in IEthernetServiceListener listener);
    void removeListener(in IEthernetServiceListener listener);
    void requestTetheredInterface(in ITetheredInterfaceCallback callback);
    void releaseTetheredInterface(in ITetheredInterfaceCallback callback);
}
+23 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

/** @hide */
interface ITetheredInterfaceCallback {
    void onAvailable(in String iface);
    void onUnavailable();
}
 No newline at end of file