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

Commit 375c0a55 authored by Jerry Zhang's avatar Jerry Zhang Committed by android-build-merger
Browse files

Merge "Revamp USB tethering startup flow."

am: 90fddefd

Change-Id: Ica932756d19c7ac874ae822c9785e856dcf81db3
parents 9ae00d9d 90fddefd
Loading
Loading
Loading
Loading
+10 −64
Original line number Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.server.connectivity;
import static android.hardware.usb.UsbManager.USB_CONFIGURED;
import static android.hardware.usb.UsbManager.USB_CONFIGURED;
import static android.hardware.usb.UsbManager.USB_CONNECTED;
import static android.hardware.usb.UsbManager.USB_CONNECTED;
import static android.hardware.usb.UsbManager.USB_FUNCTION_RNDIS;
import static android.hardware.usb.UsbManager.USB_FUNCTION_RNDIS;
import static android.net.ConnectivityManager.getNetworkTypeName;
import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME;
import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME;
import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_MODE;
import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_MODE;
import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE;
import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE;
@@ -43,7 +42,6 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.content.res.Resources;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
@@ -53,9 +51,7 @@ import android.net.IpPrefix;
import android.net.LinkAddress;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.LinkProperties;
import android.net.Network;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.net.NetworkState;
import android.net.NetworkState;
import android.net.NetworkUtils;
import android.net.NetworkUtils;
import android.net.RouteInfo;
import android.net.RouteInfo;
@@ -76,7 +72,6 @@ import android.os.ResultReceiver;
import android.os.UserHandle;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Log;
@@ -85,8 +80,6 @@ import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.MessageUtils;
import com.android.internal.util.MessageUtils;
@@ -110,12 +103,8 @@ import java.net.InetAddress;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;




/**
/**
@@ -193,8 +182,6 @@ public class Tethering extends BaseNetworkObserver {
    private int mLastNotificationId;
    private int mLastNotificationId;


    private boolean mRndisEnabled;       // track the RNDIS function enabled state
    private boolean mRndisEnabled;       // track the RNDIS function enabled state
    private boolean mUsbTetherRequested; // true if USB tethering should be started
                                         // when RNDIS is enabled
    // True iff. WiFi tethering should be started when soft AP is ready.
    // True iff. WiFi tethering should be started when soft AP is ready.
    private boolean mWifiTetherRequested;
    private boolean mWifiTetherRequested;


@@ -867,33 +854,18 @@ public class Tethering extends BaseNetworkObserver {
            //
            //
            // For more explanation, see b/62552150 .
            // For more explanation, see b/62552150 .
            synchronized (Tethering.this.mPublicSync) {
            synchronized (Tethering.this.mPublicSync) {
                // Always record the state of RNDIS.
                if (!usbConnected && mRndisEnabled) {
                // TODO: consider:
                    // Turn off tethering if it was enabled and there is a disconnect.
                //     final boolean disconnected = !usbConnected;
                    tetherMatchingInterfaces(
                //     if (disconnected) {
                            IControlsTethering.STATE_AVAILABLE,
                //         mRndisEnabled = false;
                            ConnectivityManager.TETHERING_USB);
                //         mUsbTetherRequested = false;
                } else if (usbConfigured && rndisEnabled) {
                //         return;
                    // Tether if rndis is enabled and usb is configured.
                //     }
                //     final boolean configured = usbConnected && usbConfigured;
                //     mRndisEnabled = configured ? rndisEnabled : false;
                //     if (!configured) return;
                mRndisEnabled = rndisEnabled;

                if (usbConnected && !usbConfigured) {
                    // Nothing to do here (only CONNECTED, not yet CONFIGURED).
                    return;
                }

                // start tethering if we have a request pending
                if (usbConfigured && mRndisEnabled && mUsbTetherRequested) {
                    tetherMatchingInterfaces(
                    tetherMatchingInterfaces(
                            IControlsTethering.STATE_TETHERED,
                            IControlsTethering.STATE_TETHERED,
                            ConnectivityManager.TETHERING_USB);
                            ConnectivityManager.TETHERING_USB);
                }
                }

                mRndisEnabled = usbConfigured && rndisEnabled;
                // TODO: Figure out how to remove the need for this variable.
                mUsbTetherRequested = false;
            }
            }
        }
        }


@@ -1065,34 +1037,8 @@ public class Tethering extends BaseNetworkObserver {
    public int setUsbTethering(boolean enable) {
    public int setUsbTethering(boolean enable) {
        if (VDBG) Log.d(TAG, "setUsbTethering(" + enable + ")");
        if (VDBG) Log.d(TAG, "setUsbTethering(" + enable + ")");
        UsbManager usbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
        UsbManager usbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);

        synchronized (mPublicSync) {
        synchronized (mPublicSync) {
            if (enable) {
            usbManager.setCurrentFunction(enable ? UsbManager.USB_FUNCTION_RNDIS : null, false);
                if (mRndisEnabled) {
                    final long ident = Binder.clearCallingIdentity();
                    try {
                        tetherMatchingInterfaces(IControlsTethering.STATE_TETHERED,
                                ConnectivityManager.TETHERING_USB);
                    } finally {
                        Binder.restoreCallingIdentity(ident);
                    }
                } else {
                    mUsbTetherRequested = true;
                    usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS, false);
                }
            } else {
                final long ident = Binder.clearCallingIdentity();
                try {
                    tetherMatchingInterfaces(IControlsTethering.STATE_AVAILABLE,
                            ConnectivityManager.TETHERING_USB);
                } finally {
                    Binder.restoreCallingIdentity(ident);
                }
                if (mRndisEnabled) {
                    usbManager.setCurrentFunction(null, false);
                }
                mUsbTetherRequested = false;
            }
        }
        }
        return ConnectivityManager.TETHER_ERROR_NO_ERROR;
        return ConnectivityManager.TETHER_ERROR_NO_ERROR;
    }
    }
@@ -1149,7 +1095,7 @@ public class Tethering extends BaseNetworkObserver {
        if (!mForwardedDownstreams.isEmpty()) return true;
        if (!mForwardedDownstreams.isEmpty()) return true;


        synchronized (mPublicSync) {
        synchronized (mPublicSync) {
            return mUsbTetherRequested || mWifiTetherRequested;
            return mWifiTetherRequested;
        }
        }
    }
    }