| Index: net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
|
| diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
|
| index 839600ac2d62408ed63e09344ec6a55772776580..06ff933fee9190070cb56603683aa2026940fdd9 100644
|
| --- a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
|
| +++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
|
| @@ -25,8 +25,6 @@ import android.os.Build;
|
| import android.telephony.TelephonyManager;
|
| import android.util.Log;
|
|
|
| -import org.chromium.base.ApplicationState;
|
| -import org.chromium.base.ApplicationStatus;
|
| import org.chromium.base.ThreadUtils;
|
| import org.chromium.base.VisibleForTesting;
|
|
|
| @@ -35,9 +33,7 @@ import org.chromium.base.VisibleForTesting;
|
| * Note that use of this class requires that the app have the platform
|
| * ACCESS_NETWORK_STATE permission.
|
| */
|
| -public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| - implements ApplicationStatus.ApplicationStateListener {
|
| -
|
| +public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver {
|
| static class NetworkState {
|
| private final boolean mConnected;
|
| private final int mType;
|
| @@ -300,13 +296,48 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| }
|
| }
|
|
|
| + /**
|
| + * Abstract class for providing a policy regarding when the NetworkChangeNotifier
|
| + * should listen for network changes.
|
| + */
|
| + public abstract static class RegistrationPolicy {
|
| + private NetworkChangeNotifierAutoDetect mNotifier;
|
| +
|
| + /**
|
| + * Start listening for network changes.
|
| + */
|
| + protected final void register() {
|
| + assert mNotifier != null;
|
| + mNotifier.register();
|
| + }
|
| +
|
| + /**
|
| + * Stop listening for network changes.
|
| + */
|
| + protected final void unregister() {
|
| + assert mNotifier != null;
|
| + mNotifier.unregister();
|
| + }
|
| +
|
| + /**
|
| + * Initializes the policy with the notifier, overriding subclasses should always
|
| + * call this method.
|
| + */
|
| + protected void init(NetworkChangeNotifierAutoDetect notifier) {
|
| + mNotifier = notifier;
|
| + }
|
| +
|
| + protected abstract void destroy();
|
| + }
|
| +
|
| private static final String TAG = "NetworkChangeNotifierAutoDetect";
|
| private static final int UNKNOWN_LINK_SPEED = -1;
|
| - private final NetworkConnectivityIntentFilter mIntentFilter;
|
|
|
| + private final NetworkConnectivityIntentFilter mIntentFilter;
|
| private final Observer mObserver;
|
| -
|
| private final Context mContext;
|
| + private final RegistrationPolicy mRegistrationPolicy;
|
| +
|
| // mConnectivityManagerDelegates and mWifiManagerDelegate are only non-final for testing.
|
| private ConnectivityManagerDelegate mConnectivityManagerDelegate;
|
| private WifiManagerDelegate mWifiManagerDelegate;
|
| @@ -314,7 +345,6 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| private final NetworkCallback mNetworkCallback;
|
| private final NetworkRequest mNetworkRequest;
|
| private boolean mRegistered;
|
| - private final boolean mApplicationStateRegistered;
|
| private int mConnectionType;
|
| private String mWifiSSID;
|
| private double mMaxBandwidthMbps;
|
| @@ -369,7 +399,7 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| */
|
| @SuppressLint("NewApi")
|
| public NetworkChangeNotifierAutoDetect(
|
| - Observer observer, Context context, boolean alwaysWatchForChanges) {
|
| + Observer observer, Context context, RegistrationPolicy policy) {
|
| // Since BroadcastReceiver is always called back on UI thread, ensure
|
| // running on UI thread so notification logic can be single-threaded.
|
| ThreadUtils.assertOnUiThread();
|
| @@ -391,15 +421,8 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| mMaxBandwidthMbps = getCurrentMaxBandwidthInMbps(networkState);
|
| mIntentFilter =
|
| new NetworkConnectivityIntentFilter(mWifiManagerDelegate.getHasWifiPermission());
|
| -
|
| - if (alwaysWatchForChanges) {
|
| - registerReceiver();
|
| - mApplicationStateRegistered = false;
|
| - } else {
|
| - ApplicationStatus.registerApplicationStateListener(this);
|
| - onApplicationStateChange(getApplicationState());
|
| - mApplicationStateRegistered = true;
|
| - }
|
| + mRegistrationPolicy = policy;
|
| + mRegistrationPolicy.init(this);
|
| }
|
|
|
| /**
|
| @@ -416,13 +439,9 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| mWifiManagerDelegate = delegate;
|
| }
|
|
|
| - /**
|
| - * Returns the activity's status.
|
| - * @return an {@code int} that is one of {@code ApplicationState.HAS_*_ACTIVITIES}.
|
| - */
|
| @VisibleForTesting
|
| - int getApplicationState() {
|
| - return ApplicationStatus.getStateForApplication();
|
| + RegistrationPolicy getRegistrationPolicy() {
|
| + return mRegistrationPolicy;
|
| }
|
|
|
| /**
|
| @@ -434,46 +453,48 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| }
|
|
|
| public void destroy() {
|
| - if (mApplicationStateRegistered) ApplicationStatus.unregisterApplicationStateListener(this);
|
| - unregisterReceiver();
|
| + mRegistrationPolicy.destroy();
|
| + unregister();
|
| }
|
|
|
| /**
|
| * Registers a BroadcastReceiver in the given context.
|
| */
|
| - private void registerReceiver() {
|
| - if (!mRegistered) {
|
| - mRegistered = true;
|
| - mContext.registerReceiver(this, mIntentFilter);
|
| - if (mNetworkCallback != null) {
|
| - mConnectivityManagerDelegate.registerNetworkCallback(
|
| - mNetworkRequest, mNetworkCallback);
|
| - // registerNetworkCallback() will rematch our NetworkRequest
|
| - // against active networks, so a cached list of active networks
|
| - // will be repopulated immediatly after this. However we need to
|
| - // purge any cached networks as they may have been disconnected
|
| - // while mNetworkCallback was unregistered.
|
| - final Network[] networks = mConnectivityManagerDelegate.getAllNetworks();
|
| - // Convert Networks to NetIDs.
|
| - final int[] netIds = new int[networks.length];
|
| - for (int i = 0; i < networks.length; i++) {
|
| - netIds[i] = networkToNetId(networks[i]);
|
| - }
|
| - mObserver.updateActiveNetworkList(netIds);
|
| + public void register() {
|
| + if (mRegistered) return;
|
| +
|
| + final NetworkState networkState = getCurrentNetworkState();
|
| + connectionTypeChanged(networkState);
|
| + maxBandwidthChanged(networkState);
|
| + mContext.registerReceiver(this, mIntentFilter);
|
| + mRegistered = true;
|
| +
|
| + if (mNetworkCallback != null) {
|
| + mConnectivityManagerDelegate.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
|
| + // registerNetworkCallback() will rematch our NetworkRequest
|
| + // against active networks, so a cached list of active networks
|
| + // will be repopulated immediatly after this. However we need to
|
| + // purge any cached networks as they may have been disconnected
|
| + // while mNetworkCallback was unregistered.
|
| + final Network[] networks = mConnectivityManagerDelegate.getAllNetworks();
|
| + // Convert Networks to NetIDs.
|
| + final int[] netIds = new int[networks.length];
|
| + for (int i = 0; i < networks.length; i++) {
|
| + netIds[i] = networkToNetId(networks[i]);
|
| }
|
| + mObserver.updateActiveNetworkList(netIds);
|
| }
|
| }
|
|
|
| /**
|
| - * Unregisters the BroadcastReceiver in the given context.
|
| + * Unregisters a BroadcastReceiver in the given context.
|
| */
|
| - private void unregisterReceiver() {
|
| - if (mRegistered) {
|
| - mRegistered = false;
|
| - mContext.unregisterReceiver(this);
|
| - if (mNetworkCallback != null) {
|
| - mConnectivityManagerDelegate.unregisterNetworkCallback(mNetworkCallback);
|
| - }
|
| + public void unregister() {
|
| + if (!mRegistered) return;
|
| + mContext.unregisterReceiver(this);
|
| + mRegistered = false;
|
| + if (mNetworkCallback != null) {
|
| + mConnectivityManagerDelegate.unregisterNetworkCallback(mNetworkCallback);
|
| }
|
| }
|
|
|
| @@ -652,19 +673,6 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
|
| }
|
| }
|
|
|
| - // ApplicationStatus.ApplicationStateListener
|
| - @Override
|
| - public void onApplicationStateChange(int newState) {
|
| - final NetworkState networkState = getCurrentNetworkState();
|
| - if (newState == ApplicationState.HAS_RUNNING_ACTIVITIES) {
|
| - connectionTypeChanged(networkState);
|
| - maxBandwidthChanged(networkState);
|
| - registerReceiver();
|
| - } else if (newState == ApplicationState.HAS_PAUSED_ACTIVITIES) {
|
| - unregisterReceiver();
|
| - }
|
| - }
|
| -
|
| private void connectionTypeChanged(NetworkState networkState) {
|
| int newConnectionType = getCurrentConnectionType(networkState);
|
| String newWifiSSID = getCurrentWifiSSID(networkState);
|
|
|