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

Commit 58582a36 authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN Committed by Gerrit Code Review
Browse files

Merge "Add getAvoidBadWifi system API"

parents bfd44b60 97f69c2f
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -3033,6 +3033,7 @@ package android.net {
  }
  }


  public class ConnectivityManager {
  public class ConnectivityManager {
    method public boolean getAvoidBadWifi();
    method @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS) public String getCaptivePortalServerUrl();
    method @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS) public String getCaptivePortalServerUrl();
    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported();
    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported();
    method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void setAirplaneMode(boolean);
    method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void setAirplaneMode(boolean);
+13 −0
Original line number Original line Diff line number Diff line
@@ -3698,6 +3698,19 @@ public class ConnectivityManager {
        }
        }
    }
    }


    /**
     * Determine whether the device is configured to avoid bad wifi.
     * @hide
     */
    @SystemApi
    public boolean getAvoidBadWifi() {
        try {
            return mService.getAvoidBadWifi();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
    /**
     * It is acceptable to briefly use multipath data to provide seamless connectivity for
     * It is acceptable to briefly use multipath data to provide seamless connectivity for
     * time-sensitive user-facing operations when the system default network is temporarily
     * time-sensitive user-facing operations when the system default network is temporarily
+1 −0
Original line number Original line Diff line number Diff line
@@ -165,6 +165,7 @@ interface IConnectivityManager
    void setAvoidUnvalidated(in Network network);
    void setAvoidUnvalidated(in Network network);
    void startCaptivePortalApp(in Network network);
    void startCaptivePortalApp(in Network network);


    boolean getAvoidBadWifi();
    int getMultipathPreference(in Network Network);
    int getMultipathPreference(in Network Network);


    NetworkRequest getDefaultRequest();
    NetworkRequest getDefaultRequest();
+9 −0
Original line number Original line Diff line number Diff line
@@ -3183,6 +3183,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
        return mMultinetworkPolicyTracker.getAvoidBadWifi();
        return mMultinetworkPolicyTracker.getAvoidBadWifi();
    }
    }


    @Override
    public boolean getAvoidBadWifi() {
        if (!checkNetworkStackPermission()) {
            throw new SecurityException("avoidBadWifi requires NETWORK_STACK permission");
        }
        return avoidBadWifi();
    }


    private void rematchForAvoidBadWifiUpdate() {
    private void rematchForAvoidBadWifiUpdate() {
        rematchAllNetworksAndRequests(null, 0);
        rematchAllNetworksAndRequests(null, 0);
        for (NetworkAgentInfo nai: mNetworkAgentInfos.values()) {
        for (NetworkAgentInfo nai: mNetworkAgentInfos.values()) {
+7 −17
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package android.net.ip;
import static android.net.shared.LinkPropertiesParcelableUtil.fromStableParcelable;
import static android.net.shared.LinkPropertiesParcelableUtil.fromStableParcelable;


import android.content.Context;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.DhcpResults;
import android.net.DhcpResults;
import android.net.INetd;
import android.net.INetd;
import android.net.IpPrefix;
import android.net.IpPrefix;
@@ -37,7 +38,6 @@ import android.net.metrics.IpConnectivityLog;
import android.net.metrics.IpManagerEvent;
import android.net.metrics.IpManagerEvent;
import android.net.shared.InitialConfiguration;
import android.net.shared.InitialConfiguration;
import android.net.util.InterfaceParams;
import android.net.util.InterfaceParams;
import android.net.util.MultinetworkPolicyTracker;
import android.net.util.NetdService;
import android.net.util.NetdService;
import android.net.util.SharedLog;
import android.net.util.SharedLog;
import android.os.ConditionVariable;
import android.os.ConditionVariable;
@@ -391,6 +391,7 @@ public class IpClient extends StateMachine {
    protected final IpClientCallbacks mCallback;
    protected final IpClientCallbacks mCallback;
    private final Dependencies mDependencies;
    private final Dependencies mDependencies;
    private final CountDownLatch mShutdownLatch;
    private final CountDownLatch mShutdownLatch;
    private final ConnectivityManager mCm;
    private final INetworkManagementService mNwService;
    private final INetworkManagementService mNwService;
    private final NetlinkTracker mNetlinkTracker;
    private final NetlinkTracker mNetlinkTracker;
    private final WakeupMessage mProvisioningTimeoutAlarm;
    private final WakeupMessage mProvisioningTimeoutAlarm;
@@ -408,7 +409,6 @@ public class IpClient extends StateMachine {
     */
     */
    private LinkProperties mLinkProperties;
    private LinkProperties mLinkProperties;
    private android.net.shared.ProvisioningConfiguration mConfiguration;
    private android.net.shared.ProvisioningConfiguration mConfiguration;
    private MultinetworkPolicyTracker mMultinetworkPolicyTracker;
    private IpReachabilityMonitor mIpReachabilityMonitor;
    private IpReachabilityMonitor mIpReachabilityMonitor;
    private DhcpClient mDhcpClient;
    private DhcpClient mDhcpClient;
    private DhcpResults mDhcpResults;
    private DhcpResults mDhcpResults;
@@ -476,6 +476,7 @@ public class IpClient extends StateMachine {
        mCallback = new LoggingCallbackWrapper(callback);
        mCallback = new LoggingCallbackWrapper(callback);
        mDependencies = deps;
        mDependencies = deps;
        mShutdownLatch = new CountDownLatch(1);
        mShutdownLatch = new CountDownLatch(1);
        mCm = mContext.getSystemService(ConnectivityManager.class);
        mNwService = deps.getNMS();
        mNwService = deps.getNMS();


        sSmLogs.putIfAbsent(mInterfaceName, new SharedLog(MAX_LOG_RECORDS, mTag));
        sSmLogs.putIfAbsent(mInterfaceName, new SharedLog(MAX_LOG_RECORDS, mTag));
@@ -961,8 +962,9 @@ public class IpClient extends StateMachine {
        // Note that we can still be disconnected by IpReachabilityMonitor
        // Note that we can still be disconnected by IpReachabilityMonitor
        // if the IPv6 default gateway (but not the IPv6 DNS servers; see
        // if the IPv6 default gateway (but not the IPv6 DNS servers; see
        // accompanying code in IpReachabilityMonitor) is unreachable.
        // accompanying code in IpReachabilityMonitor) is unreachable.
        final boolean ignoreIPv6ProvisioningLoss = (mMultinetworkPolicyTracker != null)
        final boolean ignoreIPv6ProvisioningLoss =
                && !mMultinetworkPolicyTracker.getAvoidBadWifi();
                mConfiguration != null && mConfiguration.mUsingMultinetworkPolicyTracker
                && mCm.getAvoidBadWifi();


        // Additionally:
        // Additionally:
        //
        //
@@ -1253,7 +1255,7 @@ public class IpClient extends StateMachine {
                            mCallback.onReachabilityLost(logMsg);
                            mCallback.onReachabilityLost(logMsg);
                        }
                        }
                    },
                    },
                    mMultinetworkPolicyTracker);
                    mConfiguration.mUsingMultinetworkPolicyTracker);
        } catch (IllegalArgumentException iae) {
        } catch (IllegalArgumentException iae) {
            // Failed to start IpReachabilityMonitor. Log it and call
            // Failed to start IpReachabilityMonitor. Log it and call
            // onProvisioningFailure() immediately.
            // onProvisioningFailure() immediately.
@@ -1486,13 +1488,6 @@ public class IpClient extends StateMachine {
                return;
                return;
            }
            }


            if (mConfiguration.mUsingMultinetworkPolicyTracker) {
                mMultinetworkPolicyTracker = new MultinetworkPolicyTracker(
                        mContext, getHandler(),
                        () -> mLog.log("OBSERVED AvoidBadWifi changed"));
                mMultinetworkPolicyTracker.start();
            }

            if (mConfiguration.mUsingIpReachabilityMonitor && !startIpReachabilityMonitor()) {
            if (mConfiguration.mUsingIpReachabilityMonitor && !startIpReachabilityMonitor()) {
                doImmediateProvisioningFailure(
                doImmediateProvisioningFailure(
                        IpManagerEvent.ERROR_STARTING_IPREACHABILITYMONITOR);
                        IpManagerEvent.ERROR_STARTING_IPREACHABILITYMONITOR);
@@ -1510,11 +1505,6 @@ public class IpClient extends StateMachine {
                mIpReachabilityMonitor = null;
                mIpReachabilityMonitor = null;
            }
            }


            if (mMultinetworkPolicyTracker != null) {
                mMultinetworkPolicyTracker.shutdown();
                mMultinetworkPolicyTracker = null;
            }

            if (mDhcpClient != null) {
            if (mDhcpClient != null) {
                mDhcpClient.sendMessage(DhcpClient.CMD_STOP_DHCP);
                mDhcpClient.sendMessage(DhcpClient.CMD_STOP_DHCP);
                mDhcpClient.doQuit();
                mDhcpClient.doQuit();
Loading