@UiThreadTest @MediumTest @Feature({"Android-AppBase"}) public void testConnectivityManagerDelegateDoesNotCrash() { ConnectivityManagerDelegate delegate = new ConnectivityManagerDelegate(getInstrumentation().getTargetContext()); delegate.getNetworkState(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // getNetworkState(Network) doesn't crash upon invalid Network argument. Network invalidNetwork = netIdToNetwork(NetId.INVALID); NetworkState invalidNetworkState = delegate.getNetworkState(invalidNetwork); assertFalse(invalidNetworkState.isConnected()); assertEquals(-1, invalidNetworkState.getNetworkType()); assertEquals(-1, invalidNetworkState.getNetworkSubType()); Network[] networks = delegate.getAllNetworksUnfiltered(); if (networks.length >= 1) { delegate.getNetworkState(networks[0]); } delegate.getDefaultNetId(); NetworkCallback networkCallback = new NetworkCallback(); NetworkRequest networkRequest = new NetworkRequest.Builder().build(); delegate.registerNetworkCallback(networkRequest, networkCallback); delegate.unregisterNetworkCallback(networkCallback); } }
@TargetApi(LOLLIPOP) NetworkCallback networkCallback(final String networkSSID, final NetworkStateChangeListener listener) { return new NetworkCallback() { @Override public void onAvailable(Network network) { NetworkInfo networkInfo = manager.getNetworkInfo(network); logger.i("Network is Available. Network Info: " + networkInfo); if (WifiHelper.areEqual(networkInfo.getExtraInfo(), networkSSID)) { manager.unregisterNetworkCallback(this); networkCallback = null; bindToRequiredNetwork(network); logger.i(format("Bound application to use %s network", networkSSID)); listener.onNetworkBound(); } } }; }
/** Only callable on Lollipop and newer releases. */ @SuppressLint("NewApi") public void registerNetworkCallback(NetworkCallback networkCallback) { connectivityManager.registerNetworkCallback( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(), networkCallback); }
/** Only callable on Lollipop and newer releases. */ @SuppressLint("NewApi") public void requestMobileNetwork(NetworkCallback networkCallback) { NetworkRequest.Builder builder = new NetworkRequest.Builder(); builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); connectivityManager.requestNetwork(builder.build(), networkCallback); }
@SuppressLint("NewApi") public void releaseCallback(NetworkCallback networkCallback) { if (supportNetworkCallback()) { Logging.d(TAG, "Unregister network callback"); connectivityManager.unregisterNetworkCallback(networkCallback); } }
/** * Constructs a NetworkMonitorAutoDetect. Should only be called on UI thread. */ @SuppressLint("NewApi") public NetworkMonitorAutoDetect(Observer observer, Context context) { this.observer = observer; this.context = context; connectivityManagerDelegate = new ConnectivityManagerDelegate(context); wifiManagerDelegate = new WifiManagerDelegate(context); final NetworkState networkState = connectivityManagerDelegate.getNetworkState(); connectionType = getConnectionType(networkState); wifiSSID = getWifiSSID(networkState); intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); if (PeerConnectionFactory.fieldTrialsFindFullName("IncludeWifiDirect").equals("Enabled")) { wifiDirectManagerDelegate = new WifiDirectManagerDelegate(observer, context); } registerReceiver(); if (connectivityManagerDelegate.supportNetworkCallback()) { // On Android 6.0.0, the WRITE_SETTINGS permission is necessary for // requestNetwork, so it will fail. This was fixed in Android 6.0.1. NetworkCallback tempNetworkCallback = new NetworkCallback(); try { connectivityManagerDelegate.requestMobileNetwork(tempNetworkCallback); } catch (java.lang.SecurityException e) { Logging.w(TAG, "Unable to obtain permission to request a cellular network."); tempNetworkCallback = null; } mobileNetworkCallback = tempNetworkCallback; allNetworkCallback = new SimpleNetworkCallback(); connectivityManagerDelegate.registerNetworkCallback(allNetworkCallback); } else { mobileNetworkCallback = null; allNetworkCallback = null; } }
/** * Constructs a NetworkMonitorAutoDetect. Should only be called on UI thread. */ @SuppressLint("NewApi") public NetworkMonitorAutoDetect(Observer observer, Context context) { this.observer = observer; this.context = context; connectivityManagerDelegate = new ConnectivityManagerDelegate(context); wifiManagerDelegate = new WifiManagerDelegate(context); final NetworkState networkState = connectivityManagerDelegate.getNetworkState(); connectionType = getConnectionType(networkState); wifiSSID = getWifiSSID(networkState); intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(); if (connectivityManagerDelegate.supportNetworkCallback()) { // On Android 6.0.0, the WRITE_SETTINGS permission is necessary for // requestNetwork, so it will fail. This was fixed in Android 6.0.1. NetworkCallback tempNetworkCallback = new NetworkCallback(); try { connectivityManagerDelegate.requestMobileNetwork(tempNetworkCallback); } catch (java.lang.SecurityException e) { Logging.w(TAG, "Unable to obtain permission to request a cellular network."); tempNetworkCallback = null; } mobileNetworkCallback = tempNetworkCallback; allNetworkCallback = new SimpleNetworkCallback(); connectivityManagerDelegate.registerNetworkCallback(allNetworkCallback); } else { mobileNetworkCallback = null; allNetworkCallback = null; } }
@Implementation(minSdk = LOLLIPOP) @RequiresApi(LOLLIPOP) public void registerNetworkCallback(NetworkRequest request, NetworkCallback networkCallback) { networkCallbacks.add(networkCallback); // simulate available connection networkCallback.onAvailable(getActiveNetwork()); }
@RequiresApi(LOLLIPOP) @Implementation(minSdk = LOLLIPOP) public void unregisterNetworkCallback(NetworkCallback networkCallback) { if (networkCallback == null) { throw new IllegalArgumentException("Invalid NetworkCallback"); } if (networkCallbacks.contains(networkCallback)) { networkCallbacks.remove(networkCallback); // simulate lost connection networkCallback.onLost(getActiveNetwork()); } }
@Test() public void shouldRegisterWithDefaultNetworkRequest() { NetworkRequest defaultRequest = new NetworkRequest.Builder().build(); ConnectivityManager manager = setUpManagerWithNetworkRequest(null); sut.observe().subscribeWith(testObserver).assertSubscribed(); verify(manager).registerNetworkCallback(eq(defaultRequest), any(NetworkCallback.class)); }
@Test() public void shouldRegisterWithCustomNetworkRequest() { NetworkRequest customRequest = new NetworkRequest.Builder().addTransportType(TRANSPORT_WIFI).build(); ConnectivityManager manager = setUpManagerWithNetworkRequest(customRequest); sut.observe().subscribeWith(testObserver).assertSubscribed(); verify(manager).registerNetworkCallback(eq(customRequest), any(NetworkCallback.class)); }
@Test public void shouldDisposeWithException_whenObserverDisposed() { ConnectivityManager connectivityManager = mock(ConnectivityManager.class); doReturn(connectivityManager).when(context).getSystemService(CONNECTIVITY_SERVICE); doThrow(Exception.class).when(connectivityManager) .unregisterNetworkCallback(any(NetworkCallback.class)); sut = spy(new LollipopNetworkObservingStrategy(context)); sut.observe().subscribeWith(testObserver).assertSubscribed(); testObserver.dispose(); verify(sut).dispose(); verify(sut).onError(anyString(), any(Exception.class)); testObserver.isDisposed(); }
private void setupNetworkCallbackUnregisterException() { ConnectivityManager connectivityManager = mock(ConnectivityManager.class); doReturn(connectivityManager).when(context).getSystemService(Context.CONNECTIVITY_SERVICE); doThrow(Exception.class).when(connectivityManager) .unregisterNetworkCallback(any(NetworkCallback.class)); sut = spy(new MarshmallowNetworkObservingStrategy(context)); }
private void registerNetworkCallback(Context context) { final ConnectivityManager manager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); manager.registerNetworkCallback( new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .build(), new NetworkCallback() { @Override public void onAvailable(Network network) { mSambaClient.reset(); } }); }
public final void a() { if (!this.h) {} do { return; this.c.unregisterReceiver(this); this.h = false; } while (this.f == null); rja localrja = this.e; ConnectivityManager.NetworkCallback localNetworkCallback = this.f; localrja.a.unregisterNetworkCallback(localNetworkCallback); }
protected final void a() { NetworkChangeNotifierAutoDetect localNetworkChangeNotifierAutoDetect = this.a; if (!localNetworkChangeNotifierAutoDetect.h) { rjh localrjh = rja.a(localNetworkChangeNotifierAutoDetect.e.a.getActiveNetworkInfo()); localNetworkChangeNotifierAutoDetect.c(localrjh); localNetworkChangeNotifierAutoDetect.d(localrjh); localNetworkChangeNotifierAutoDetect.c.registerReceiver(localNetworkChangeNotifierAutoDetect, localNetworkChangeNotifierAutoDetect.a); localNetworkChangeNotifierAutoDetect.h = true; if (localNetworkChangeNotifierAutoDetect.f != null) { rja localrja = localNetworkChangeNotifierAutoDetect.e; NetworkRequest localNetworkRequest = localNetworkChangeNotifierAutoDetect.g; ConnectivityManager.NetworkCallback localNetworkCallback = localNetworkChangeNotifierAutoDetect.f; localrja.a.registerNetworkCallback(localNetworkRequest, localNetworkCallback); Network[] arrayOfNetwork = localNetworkChangeNotifierAutoDetect.e.a.getAllNetworks(); int[] arrayOfInt = new int[arrayOfNetwork.length]; for (int i = 0; i < arrayOfNetwork.length; i++) { arrayOfInt[i] = Integer.parseInt(arrayOfNetwork[i].toString()); } localNetworkChangeNotifierAutoDetect.b.a(arrayOfInt); } } }
/** * Registers networkCallback to receive notifications about networks * that satisfy networkRequest. * Only callable on Lollipop and newer releases. */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) void registerNetworkCallback( NetworkRequest networkRequest, NetworkCallback networkCallback) { mConnectivityManager.registerNetworkCallback(networkRequest, networkCallback); }
/** * Unregisters networkCallback from receiving notifications. * Only callable on Lollipop and newer releases. */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) void unregisterNetworkCallback(NetworkCallback networkCallback) { mConnectivityManager.unregisterNetworkCallback(networkCallback); }
@Override public void unregisterNetworkCallback(NetworkCallback networkCallback) {}
@Override public void registerNetworkCallback( NetworkRequest networkRequest, NetworkCallback networkCallback) { mLastRegisteredNetworkCallback = networkCallback; }
public NetworkCallback getLastRegisteredNetworkCallback() { return mLastRegisteredNetworkCallback; }
public Set<NetworkCallback> getNetworkCallbacks() { return networkCallbacks; }