diff options
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 22 | ||||
| -rw-r--r-- | services/net/java/android/net/ip/IpManager.java | 14 | ||||
| -rw-r--r-- | services/net/java/android/net/ip/IpReachabilityMonitor.java | 10 | ||||
| -rw-r--r-- | services/net/java/android/net/util/MultinetworkPolicyTracker.java (renamed from services/net/java/android/net/util/AvoidBadWifiTracker.java) | 36 | ||||
| -rw-r--r-- | tests/net/java/com/android/server/ConnectivityServiceTest.java | 20 | 
5 files changed, 52 insertions, 50 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 803c2db83d13..dfca02ecc9d9 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -78,7 +78,7 @@ import android.net.Uri;  import android.net.metrics.DefaultNetworkEvent;  import android.net.metrics.IpConnectivityLog;  import android.net.metrics.NetworkEvent; -import android.net.util.AvoidBadWifiTracker; +import android.net.util.MultinetworkPolicyTracker;  import android.os.Binder;  import android.os.Build;  import android.os.Bundle; @@ -499,7 +499,7 @@ public class ConnectivityService extends IConnectivityManager.Stub      private final IpConnectivityLog mMetricsLog;      @VisibleForTesting -    final AvoidBadWifiTracker mAvoidBadWifiTracker; +    final MultinetworkPolicyTracker mMultinetworkPolicyTracker;      /**       * Implements support for the legacy "one network per network type" model. @@ -849,9 +849,9 @@ public class ConnectivityService extends IConnectivityManager.Stub                  LingerMonitor.DEFAULT_NOTIFICATION_RATE_LIMIT_MILLIS);          mLingerMonitor = new LingerMonitor(mContext, mNotifier, dailyLimit, rateLimit); -        mAvoidBadWifiTracker = createAvoidBadWifiTracker( +        mMultinetworkPolicyTracker = createMultinetworkPolicyTracker(                  mContext, mHandler, () -> rematchForAvoidBadWifiUpdate()); -        mAvoidBadWifiTracker.start(); +        mMultinetworkPolicyTracker.start();      }      private NetworkRequest createInternetRequestForTransport( @@ -2793,7 +2793,7 @@ public class ConnectivityService extends IConnectivityManager.Stub      }      public boolean avoidBadWifi() { -        return mAvoidBadWifiTracker.currentValue(); +        return mMultinetworkPolicyTracker.getAvoidBadWifi();      }      private void rematchForAvoidBadWifiUpdate() { @@ -2806,9 +2806,9 @@ public class ConnectivityService extends IConnectivityManager.Stub      }      // TODO: Evaluate whether this is of interest to other consumers of -    // AvoidBadWifiTracker and worth moving out of here. +    // MultinetworkPolicyTracker and worth moving out of here.      private void dumpAvoidBadWifiSettings(IndentingPrintWriter pw) { -        final boolean configRestrict = mAvoidBadWifiTracker.configRestrictsAvoidBadWifi(); +        final boolean configRestrict = mMultinetworkPolicyTracker.configRestrictsAvoidBadWifi();          if (!configRestrict) {              pw.println("Bad Wi-Fi avoidance: unrestricted");              return; @@ -2818,7 +2818,7 @@ public class ConnectivityService extends IConnectivityManager.Stub          pw.increaseIndent();          pw.println("Config restrict:   " + configRestrict); -        final String value = mAvoidBadWifiTracker.getSettingsValue(); +        final String value = mMultinetworkPolicyTracker.getAvoidBadWifiSetting();          String description;          // Can't use a switch statement because strings are legal case labels, but null is not.          if ("0".equals(value)) { @@ -2886,7 +2886,7 @@ public class ConnectivityService extends IConnectivityManager.Stub          if (DBG) log("handleNetworkUnvalidated " + nai.name() + " cap=" + nc);          if (nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && -            mAvoidBadWifiTracker.shouldNotifyWifiUnvalidated()) { +            mMultinetworkPolicyTracker.shouldNotifyWifiUnvalidated()) {              showValidationNotification(nai, NotificationType.LOST_INTERNET);          }      } @@ -5534,8 +5534,8 @@ public class ConnectivityService extends IConnectivityManager.Stub      }      @VisibleForTesting -    AvoidBadWifiTracker createAvoidBadWifiTracker(Context c, Handler h, Runnable r) { -        return new AvoidBadWifiTracker(c, h, r); +    MultinetworkPolicyTracker createMultinetworkPolicyTracker(Context c, Handler h, Runnable r) { +        return new MultinetworkPolicyTracker(c, h, r);      }      @VisibleForTesting diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java index abdf6831b06c..76b1c90642ec 100644 --- a/services/net/java/android/net/ip/IpManager.java +++ b/services/net/java/android/net/ip/IpManager.java @@ -33,7 +33,7 @@ import android.net.StaticIpConfiguration;  import android.net.dhcp.DhcpClient;  import android.net.metrics.IpConnectivityLog;  import android.net.metrics.IpManagerEvent; -import android.net.util.AvoidBadWifiTracker; +import android.net.util.MultinetworkPolicyTracker;  import android.os.INetworkManagementService;  import android.os.Message;  import android.os.RemoteException; @@ -398,7 +398,7 @@ public class IpManager extends StateMachine {      private final NetlinkTracker mNetlinkTracker;      private final WakeupMessage mProvisioningTimeoutAlarm;      private final WakeupMessage mDhcpActionTimeoutAlarm; -    private final AvoidBadWifiTracker mAvoidBadWifiTracker; +    private final MultinetworkPolicyTracker mMultinetworkPolicyTracker;      private final LocalLog mLocalLog;      private final LocalLog mConnectivityPacketLog;      private final MessageHandlingLogger mMsgStateLogger; @@ -492,7 +492,7 @@ public class IpManager extends StateMachine {          mLinkProperties = new LinkProperties();          mLinkProperties.setInterfaceName(mInterfaceName); -        mAvoidBadWifiTracker = new AvoidBadWifiTracker(mContext, getHandler(), +        mMultinetworkPolicyTracker = new MultinetworkPolicyTracker(mContext, getHandler(),                  () -> { mLocalLog.log("OBSERVED AvoidBadWifi changed"); });          mProvisioningTimeoutAlarm = new WakeupMessage(mContext, getHandler(), @@ -527,7 +527,7 @@ public class IpManager extends StateMachine {              Log.e(mTag, "Couldn't register NetlinkTracker: " + e.toString());          } -        mAvoidBadWifiTracker.start(); +        mMultinetworkPolicyTracker.start();      }      @Override @@ -538,7 +538,7 @@ public class IpManager extends StateMachine {      // Shut down this IpManager instance altogether.      public void shutdown() {          stop(); -        mAvoidBadWifiTracker.shutdown(); +        mMultinetworkPolicyTracker.shutdown();          quit();      } @@ -767,7 +767,7 @@ public class IpManager extends StateMachine {          // Note that we can still be disconnected by IpReachabilityMonitor          // if the IPv6 default gateway (but not the IPv6 DNS servers; see          // accompanying code in IpReachabilityMonitor) is unreachable. -        final boolean ignoreIPv6ProvisioningLoss = !mAvoidBadWifiTracker.currentValue(); +        final boolean ignoreIPv6ProvisioningLoss = !mMultinetworkPolicyTracker.getAvoidBadWifi();          // Additionally:          // @@ -1045,7 +1045,7 @@ public class IpManager extends StateMachine {                              mCallback.onReachabilityLost(logMsg);                          }                      }, -                    mAvoidBadWifiTracker); +                    mMultinetworkPolicyTracker);          } catch (IllegalArgumentException iae) {              // Failed to start IpReachabilityMonitor. Log it and call              // onProvisioningFailure() immediately. diff --git a/services/net/java/android/net/ip/IpReachabilityMonitor.java b/services/net/java/android/net/ip/IpReachabilityMonitor.java index a883e28e96c6..20eac622d37f 100644 --- a/services/net/java/android/net/ip/IpReachabilityMonitor.java +++ b/services/net/java/android/net/ip/IpReachabilityMonitor.java @@ -34,7 +34,7 @@ import android.net.netlink.RtNetlinkNeighborMessage;  import android.net.netlink.StructNdaCacheInfo;  import android.net.netlink.StructNdMsg;  import android.net.netlink.StructNlMsgHdr; -import android.net.util.AvoidBadWifiTracker; +import android.net.util.MultinetworkPolicyTracker;  import android.os.PowerManager;  import android.os.SystemClock;  import android.system.ErrnoException; @@ -151,7 +151,7 @@ public class IpReachabilityMonitor {      private final String mInterfaceName;      private final int mInterfaceIndex;      private final Callback mCallback; -    private final AvoidBadWifiTracker mAvoidBadWifiTracker; +    private final MultinetworkPolicyTracker mMultinetworkPolicyTracker;      private final NetlinkSocketObserver mNetlinkSocketObserver;      private final Thread mObserverThread;      private final IpConnectivityLog mMetricsLog = new IpConnectivityLog(); @@ -226,7 +226,7 @@ public class IpReachabilityMonitor {      }      public IpReachabilityMonitor(Context context, String ifName, Callback callback, -            AvoidBadWifiTracker tracker) throws IllegalArgumentException { +            MultinetworkPolicyTracker tracker) throws IllegalArgumentException {          mInterfaceName = ifName;          int ifIndex = -1;          try { @@ -238,7 +238,7 @@ public class IpReachabilityMonitor {          mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE)).newWakeLock(                  PowerManager.PARTIAL_WAKE_LOCK, TAG + "." + mInterfaceName);          mCallback = callback; -        mAvoidBadWifiTracker = tracker; +        mMultinetworkPolicyTracker = tracker;          mNetlinkSocketObserver = new NetlinkSocketObserver();          mObserverThread = new Thread(mNetlinkSocketObserver);          mObserverThread.start(); @@ -379,7 +379,7 @@ public class IpReachabilityMonitor {      }      private boolean avoidingBadLinks() { -        return (mAvoidBadWifiTracker != null) ? mAvoidBadWifiTracker.currentValue() : true; +        return (mMultinetworkPolicyTracker == null) || mMultinetworkPolicyTracker.getAvoidBadWifi();      }      public void probeAll() { diff --git a/services/net/java/android/net/util/AvoidBadWifiTracker.java b/services/net/java/android/net/util/MultinetworkPolicyTracker.java index 2abaeb1ae35b..ebd131bebb2b 100644 --- a/services/net/java/android/net/util/AvoidBadWifiTracker.java +++ b/services/net/java/android/net/util/MultinetworkPolicyTracker.java @@ -42,8 +42,8 @@ import static android.provider.Settings.Global.NETWORK_AVOID_BAD_WIFI;   * This enables the device to switch to another form of connectivity, like   * mobile, if it's available and working.   * - * The Runnable |cb|, if given, is called on the supplied Handler's thread - * whether the computed "avoid bad wifi" value changes. + * The Runnable |avoidBadWifiCallback|, if given, is posted to the supplied + * Handler' whenever the computed "avoid bad wifi" value changes.   *   * Disabling this reverts the device to a level of networking sophistication   * circa 2012-13 by disabling disparate code paths each of which contribute to @@ -51,28 +51,30 @@ import static android.provider.Settings.Global.NETWORK_AVOID_BAD_WIFI;   *   * @hide   */ -public class AvoidBadWifiTracker { -    private static String TAG = AvoidBadWifiTracker.class.getSimpleName(); +public class MultinetworkPolicyTracker { +    private static String TAG = MultinetworkPolicyTracker.class.getSimpleName();      private final Context mContext;      private final Handler mHandler;      private final Runnable mReevaluateRunnable; -    private final Uri mUri; +    private final Uri mAvoidBadWifiUri;      private final ContentResolver mResolver;      private final SettingObserver mSettingObserver;      private final BroadcastReceiver mBroadcastReceiver;      private volatile boolean mAvoidBadWifi = true; -    public AvoidBadWifiTracker(Context ctx, Handler handler) { +    public MultinetworkPolicyTracker(Context ctx, Handler handler) {          this(ctx, handler, null);      } -    public AvoidBadWifiTracker(Context ctx, Handler handler, Runnable cb) { +    public MultinetworkPolicyTracker(Context ctx, Handler handler, Runnable avoidBadWifiCallback) {          mContext = ctx;          mHandler = handler; -        mReevaluateRunnable = () -> { if (update() && cb != null) cb.run(); }; -        mUri = Settings.Global.getUriFor(NETWORK_AVOID_BAD_WIFI); +        mReevaluateRunnable = () -> { +            if (updateAvoidBadWifi() && avoidBadWifiCallback != null) avoidBadWifiCallback.run(); +        }; +        mAvoidBadWifiUri = Settings.Global.getUriFor(NETWORK_AVOID_BAD_WIFI);          mResolver = mContext.getContentResolver();          mSettingObserver = new SettingObserver();          mBroadcastReceiver = new BroadcastReceiver() { @@ -82,11 +84,11 @@ public class AvoidBadWifiTracker {              }          }; -        update(); +        updateAvoidBadWifi();      }      public void start() { -        mResolver.registerContentObserver(mUri, false, mSettingObserver); +        mResolver.registerContentObserver(mAvoidBadWifiUri, false, mSettingObserver);          final IntentFilter intentFilter = new IntentFilter();          intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); @@ -102,7 +104,7 @@ public class AvoidBadWifiTracker {          mContext.unregisterReceiver(mBroadcastReceiver);      } -    public boolean currentValue() { +    public boolean getAvoidBadWifi() {          return mAvoidBadWifi;      } @@ -117,10 +119,10 @@ public class AvoidBadWifiTracker {       * Whether we should display a notification when wifi becomes unvalidated.       */      public boolean shouldNotifyWifiUnvalidated() { -        return configRestrictsAvoidBadWifi() && getSettingsValue() == null; +        return configRestrictsAvoidBadWifi() && getAvoidBadWifiSetting() == null;      } -    public String getSettingsValue() { +    public String getAvoidBadWifiSetting() {          return Settings.Global.getString(mResolver, NETWORK_AVOID_BAD_WIFI);      } @@ -129,8 +131,8 @@ public class AvoidBadWifiTracker {          mHandler.post(mReevaluateRunnable);      } -    public boolean update() { -        final boolean settingAvoidBadWifi = "1".equals(getSettingsValue()); +    public boolean updateAvoidBadWifi() { +        final boolean settingAvoidBadWifi = "1".equals(getAvoidBadWifiSetting());          final boolean prev = mAvoidBadWifi;          mAvoidBadWifi = settingAvoidBadWifi || !configRestrictsAvoidBadWifi();          return mAvoidBadWifi != prev; @@ -148,7 +150,7 @@ public class AvoidBadWifiTracker {          @Override          public void onChange(boolean selfChange, Uri uri) { -            if (!mUri.equals(uri)) return; +            if (!mAvoidBadWifiUri.equals(uri)) return;              reevaluate();          }      } diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index db7552d0702b..6546bbe91324 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -53,7 +53,7 @@ import android.net.NetworkMisc;  import android.net.NetworkRequest;  import android.net.RouteInfo;  import android.net.metrics.IpConnectivityLog; -import android.net.util.AvoidBadWifiTracker; +import android.net.util.MultinetworkPolicyTracker;  import android.os.ConditionVariable;  import android.os.Handler;  import android.os.HandlerThread; @@ -593,10 +593,10 @@ public class ConnectivityServiceTest extends AndroidTestCase {          }      } -    private class WrappedAvoidBadWifiTracker extends AvoidBadWifiTracker { +    private class WrappedMultinetworkPolicyTracker extends MultinetworkPolicyTracker {          public volatile boolean configRestrictsAvoidBadWifi; -        public WrappedAvoidBadWifiTracker(Context c, Handler h, Runnable r) { +        public WrappedMultinetworkPolicyTracker(Context c, Handler h, Runnable r) {              super(c, h, r);          } @@ -607,7 +607,7 @@ public class ConnectivityServiceTest extends AndroidTestCase {      }      private class WrappedConnectivityService extends ConnectivityService { -        public WrappedAvoidBadWifiTracker wrappedAvoidBadWifiTracker; +        public WrappedMultinetworkPolicyTracker wrappedMultinetworkPolicyTracker;          private WrappedNetworkMonitor mLastCreatedNetworkMonitor;          public WrappedConnectivityService(Context context, INetworkManagementService netManager, @@ -654,14 +654,14 @@ public class ConnectivityServiceTest extends AndroidTestCase {          }          @Override -        public AvoidBadWifiTracker createAvoidBadWifiTracker( +        public MultinetworkPolicyTracker createMultinetworkPolicyTracker(                  Context c, Handler h, Runnable r) { -            final WrappedAvoidBadWifiTracker tracker = new WrappedAvoidBadWifiTracker(c, h, r); +            final WrappedMultinetworkPolicyTracker tracker = new WrappedMultinetworkPolicyTracker(c, h, r);              return tracker;          } -        public WrappedAvoidBadWifiTracker getAvoidBadWifiTracker() { -            return (WrappedAvoidBadWifiTracker) mAvoidBadWifiTracker; +        public WrappedMultinetworkPolicyTracker getMultinetworkPolicyTracker() { +            return (WrappedMultinetworkPolicyTracker) mMultinetworkPolicyTracker;          }          @Override @@ -2140,7 +2140,7 @@ public class ConnectivityServiceTest extends AndroidTestCase {      @SmallTest      public void testAvoidBadWifiSetting() throws Exception {          final ContentResolver cr = mServiceContext.getContentResolver(); -        final WrappedAvoidBadWifiTracker tracker = mService.getAvoidBadWifiTracker(); +        final WrappedMultinetworkPolicyTracker tracker = mService.getMultinetworkPolicyTracker();          final String settingName = Settings.Global.NETWORK_AVOID_BAD_WIFI;          tracker.configRestrictsAvoidBadWifi = false; @@ -2178,7 +2178,7 @@ public class ConnectivityServiceTest extends AndroidTestCase {      @SmallTest      public void testAvoidBadWifi() throws Exception {          final ContentResolver cr = mServiceContext.getContentResolver(); -        final WrappedAvoidBadWifiTracker tracker = mService.getAvoidBadWifiTracker(); +        final WrappedMultinetworkPolicyTracker tracker = mService.getMultinetworkPolicyTracker();          // Pretend we're on a carrier that restricts switching away from bad wifi.          tracker.configRestrictsAvoidBadWifi = true;  |