Revert "ConnectivityManager: allow usage of TYPE_NONE"
This CL is breaking some internal builds.
This reverts commit 0bc85784a82d415c4a359ab959cddcbb3d361070.
Change-Id: Ie79214808d84c73f54a525f515b4c90a3fb23542
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 55127a8..02f0f18 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -579,8 +579,6 @@
/** {@hide} */
public static final int MAX_NETWORK_TYPE = TYPE_VPN;
- private static final int MIN_NETWORK_TYPE = TYPE_MOBILE;
-
/**
* If you want to set the default network preference,you can directly
* change the networkAttributes array in framework's config.xml.
@@ -638,7 +636,7 @@
* validate a network type.
*/
public static boolean isNetworkTypeValid(int networkType) {
- return MIN_NETWORK_TYPE <= networkType && networkType <= MAX_NETWORK_TYPE;
+ return networkType >= 0 && networkType <= MAX_NETWORK_TYPE;
}
/**
@@ -651,8 +649,6 @@
*/
public static String getNetworkTypeName(int type) {
switch (type) {
- case TYPE_NONE:
- return "NONE";
case TYPE_MOBILE:
return "MOBILE";
case TYPE_WIFI:
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 76646b8..2dd7f75 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -21,7 +21,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.BitUtils;
-import com.android.internal.util.Preconditions;
import java.util.Objects;
@@ -430,11 +429,6 @@
/** @hide */
public static final int MAX_TRANSPORT = TRANSPORT_LOWPAN;
- /** @hide */
- public static boolean isValidTransport(int transportType) {
- return (MIN_TRANSPORT <= transportType) && (transportType <= MAX_TRANSPORT);
- }
-
private static final String[] TRANSPORT_NAMES = {
"CELLULAR",
"WIFI",
@@ -459,7 +453,9 @@
* @hide
*/
public NetworkCapabilities addTransportType(int transportType) {
- checkValidTransportType(transportType);
+ if (transportType < MIN_TRANSPORT || transportType > MAX_TRANSPORT) {
+ throw new IllegalArgumentException("TransportType out of range");
+ }
mTransportTypes |= 1 << transportType;
setNetworkSpecifier(mNetworkSpecifier); // used for exception checking
return this;
@@ -473,7 +469,9 @@
* @hide
*/
public NetworkCapabilities removeTransportType(int transportType) {
- checkValidTransportType(transportType);
+ if (transportType < MIN_TRANSPORT || transportType > MAX_TRANSPORT) {
+ throw new IllegalArgumentException("TransportType out of range");
+ }
mTransportTypes &= ~(1 << transportType);
setNetworkSpecifier(mNetworkSpecifier); // used for exception checking
return this;
@@ -497,7 +495,10 @@
* @return {@code true} if set on this instance.
*/
public boolean hasTransport(int transportType) {
- return isValidTransport(transportType) && ((mTransportTypes & (1 << transportType)) != 0);
+ if (transportType < MIN_TRANSPORT || transportType > MAX_TRANSPORT) {
+ return false;
+ }
+ return ((mTransportTypes & (1 << transportType)) != 0);
}
private void combineTransportTypes(NetworkCapabilities nc) {
@@ -905,14 +906,9 @@
* @hide
*/
public static String transportNameOf(int transport) {
- if (!isValidTransport(transport)) {
+ if (transport < 0 || TRANSPORT_NAMES.length <= transport) {
return "UNKNOWN";
}
return TRANSPORT_NAMES[transport];
}
-
- private static void checkValidTransportType(int transport) {
- Preconditions.checkArgument(
- isValidTransport(transport), "Invalid TransportType " + transport);
- }
}
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index 84c32be..42f5feb 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -127,8 +127,7 @@
* @hide
*/
public NetworkInfo(int type, int subtype, String typeName, String subtypeName) {
- if (!ConnectivityManager.isNetworkTypeValid(type)
- && type != ConnectivityManager.TYPE_NONE) {
+ if (!ConnectivityManager.isNetworkTypeValid(type)) {
throw new IllegalArgumentException("Invalid network type: " + type);
}
mNetworkType = type;
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index eafa88f..5221b5f 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -3908,9 +3908,6 @@
public void setProvisioningNotificationVisible(boolean visible, int networkType,
String action) {
enforceConnectivityInternalPermission();
- if (!ConnectivityManager.isNetworkTypeValid(networkType)) {
- return;
- }
final long ident = Binder.clearCallingIdentity();
try {
// Concatenate the range of types onto the range of NetIDs.
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index aeb75e1..c7b7966 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -19,7 +19,6 @@
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_MOBILE;
-import static android.net.ConnectivityManager.TYPE_NONE;
import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.ConnectivityManager.getNetworkTypeName;
import static android.net.NetworkCapabilities.*;
@@ -114,7 +113,6 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.BooleanSupplier;
-import java.util.function.Predicate;
/**
* Tests for {@link ConnectivityService}.
@@ -318,9 +316,6 @@
case TRANSPORT_CELLULAR:
mScore = 50;
break;
- case TRANSPORT_LOWPAN:
- mScore = 20;
- break;
default:
throw new UnsupportedOperationException("unimplemented network type");
}
@@ -402,15 +397,6 @@
* @param validated Indicate if network should pretend to be validated.
*/
public void connect(boolean validated) {
- connect(validated, true);
- }
-
- /**
- * Transition this NetworkAgent to CONNECTED state.
- * @param validated Indicate if network should pretend to be validated.
- * @param hasInternet Indicate if network should pretend to have NET_CAPABILITY_INTERNET.
- */
- public void connect(boolean validated, boolean hasInternet) {
assertEquals("MockNetworkAgents can only be connected once",
mNetworkInfo.getDetailedState(), DetailedState.IDLE);
assertFalse(mNetworkCapabilities.hasCapability(NET_CAPABILITY_INTERNET));
@@ -433,9 +419,7 @@
};
mCm.registerNetworkCallback(request, callback);
}
- if (hasInternet) {
- addCapability(NET_CAPABILITY_INTERNET);
- }
+ addCapability(NET_CAPABILITY_INTERNET);
connectWithoutInternet();
@@ -789,10 +773,7 @@
* Fails if TIMEOUT_MS goes by before {@code conditionVariable} opens.
*/
static private void waitFor(ConditionVariable conditionVariable) {
- if (conditionVariable.block(TIMEOUT_MS)) {
- return;
- }
- fail("ConditionVariable was blocked for more than " + TIMEOUT_MS + "ms");
+ assertTrue(conditionVariable.block(TIMEOUT_MS));
}
@Override
@@ -847,7 +828,7 @@
case TRANSPORT_CELLULAR:
return TYPE_MOBILE;
default:
- return TYPE_NONE;
+ throw new IllegalStateException("Unknown transport " + transport);
}
}
@@ -858,9 +839,6 @@
// Test getActiveNetwork()
assertNotNull(mCm.getActiveNetwork());
assertEquals(mCm.getActiveNetwork(), mCm.getActiveNetworkForUid(Process.myUid()));
- if (!NetworkCapabilities.isValidTransport(transport)) {
- throw new IllegalStateException("Unknown transport " + transport);
- }
switch (transport) {
case TRANSPORT_WIFI:
assertEquals(mCm.getActiveNetwork(), mWiFiNetworkAgent.getNetwork());
@@ -869,7 +847,7 @@
assertEquals(mCm.getActiveNetwork(), mCellNetworkAgent.getNetwork());
break;
default:
- break;
+ throw new IllegalStateException("Unknown transport" + transport);
}
// Test getNetworkInfo(Network)
assertNotNull(mCm.getNetworkInfo(mCm.getActiveNetwork()));
@@ -1289,26 +1267,7 @@
return expectCallback(state, agent, TIMEOUT_MS);
}
- CallbackInfo expectCallbackLike(Predicate<CallbackInfo> fn) {
- return expectCallbackLike(fn, TIMEOUT_MS);
- }
-
- CallbackInfo expectCallbackLike(Predicate<CallbackInfo> fn, int timeoutMs) {
- int timeLeft = timeoutMs;
- while (timeLeft > 0) {
- long start = SystemClock.elapsedRealtime();
- CallbackInfo info = nextCallback(timeLeft);
- if (fn.test(info)) {
- return info;
- }
- timeLeft -= (SystemClock.elapsedRealtime() - start);
- }
- fail("Did not receive expected callback after " + timeoutMs + "ms");
- return null;
- }
-
- void expectAvailableCallbacks(
- MockNetworkAgent agent, boolean expectSuspended, int timeoutMs) {
+ void expectAvailableCallbacks(MockNetworkAgent agent, boolean expectSuspended, int timeoutMs) {
expectCallback(CallbackState.AVAILABLE, agent, timeoutMs);
if (expectSuspended) {
expectCallback(CallbackState.SUSPENDED, agent, timeoutMs);
@@ -1865,18 +1824,26 @@
@SmallTest
public void testNoMutableNetworkRequests() throws Exception {
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent("a"), 0);
- NetworkRequest request1 = new NetworkRequest.Builder()
- .addCapability(NET_CAPABILITY_VALIDATED)
- .build();
- NetworkRequest request2 = new NetworkRequest.Builder()
- .addCapability(NET_CAPABILITY_CAPTIVE_PORTAL)
- .build();
-
- Class<IllegalArgumentException> expected = IllegalArgumentException.class;
- assertException(() -> { mCm.requestNetwork(request1, new NetworkCallback()); }, expected);
- assertException(() -> { mCm.requestNetwork(request1, pendingIntent); }, expected);
- assertException(() -> { mCm.requestNetwork(request2, new NetworkCallback()); }, expected);
- assertException(() -> { mCm.requestNetwork(request2, pendingIntent); }, expected);
+ NetworkRequest.Builder builder = new NetworkRequest.Builder();
+ builder.addCapability(NET_CAPABILITY_VALIDATED);
+ try {
+ mCm.requestNetwork(builder.build(), new NetworkCallback());
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ try {
+ mCm.requestNetwork(builder.build(), pendingIntent);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ builder = new NetworkRequest.Builder();
+ builder.addCapability(NET_CAPABILITY_CAPTIVE_PORTAL);
+ try {
+ mCm.requestNetwork(builder.build(), new NetworkCallback());
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ try {
+ mCm.requestNetwork(builder.build(), pendingIntent);
+ fail();
+ } catch (IllegalArgumentException expected) {}
}
@SmallTest
@@ -3278,79 +3245,6 @@
}
}
- @SmallTest
- public void testNetworkInfoOfTypeNone() {
- ConditionVariable broadcastCV = waitForConnectivityBroadcasts(1);
-
- verifyNoNetwork();
- MockNetworkAgent lowpanNetwork = new MockNetworkAgent(TRANSPORT_LOWPAN);
- assertNull(mCm.getActiveNetworkInfo());
-
- Network[] allNetworks = mCm.getAllNetworks();
- assertEquals(1, allNetworks.length);
- Network network = allNetworks[0];
- NetworkCapabilities capabilities = mCm.getNetworkCapabilities(network);
- assertTrue(capabilities.hasTransport(TRANSPORT_LOWPAN));
-
- final NetworkRequest request =
- new NetworkRequest.Builder().addTransportType(TRANSPORT_LOWPAN).build();
- final TestNetworkCallback callback = new TestNetworkCallback();
- mCm.registerNetworkCallback(request, callback);
-
- // Bring up lowpan.
- lowpanNetwork.connect(false, false);
- callback.expectAvailableCallbacks(lowpanNetwork);
-
- assertNull(mCm.getActiveNetworkInfo());
- assertNull(mCm.getActiveNetwork());
- // TODO: getAllNetworkInfo is dirty and returns a non-empty array rght from the start
- // of this test. Fix it and uncomment the assert below.
- //assertEquals(0, mCm.getAllNetworkInfo().length);
-
- // Disconnect lowpan.
- lowpanNetwork.disconnect();
- callback.expectCallback(CallbackState.LOST, lowpanNetwork);
- mCm.unregisterNetworkCallback(callback);
-
- verifyNoNetwork();
- if (broadcastCV.block(10)) {
- fail("expected no broadcast, but got CONNECTIVITY_ACTION broadcast");
- }
- }
-
- @SmallTest
- public void testDeprecatedAndUnsupportedOperations() throws Exception {
- final int TYPE_NONE = ConnectivityManager.TYPE_NONE;
- assertNull(mCm.getNetworkInfo(TYPE_NONE));
- assertNull(mCm.getNetworkForType(TYPE_NONE));
- assertNull(mCm.getLinkProperties(TYPE_NONE));
- assertFalse(mCm.isNetworkSupported(TYPE_NONE));
-
- assertException(() -> { mCm.networkCapabilitiesForType(TYPE_NONE); },
- IllegalArgumentException.class);
-
- Class<UnsupportedOperationException> unsupported = UnsupportedOperationException.class;
- assertException(() -> { mCm.startUsingNetworkFeature(TYPE_WIFI, ""); }, unsupported);
- assertException(() -> { mCm.stopUsingNetworkFeature(TYPE_WIFI, ""); }, unsupported);
- // TODO: let test context have configuration application target sdk version
- // and test that pre-M requesting for TYPE_NONE sends back APN_REQUEST_FAILED
- assertException(() -> { mCm.startUsingNetworkFeature(TYPE_NONE, ""); }, unsupported);
- assertException(() -> { mCm.stopUsingNetworkFeature(TYPE_NONE, ""); }, unsupported);
- assertException(() -> { mCm.requestRouteToHostAddress(TYPE_NONE, null); }, unsupported);
- }
-
- private static <T> void assertException(Runnable block, Class<T> expected) {
- try {
- block.run();
- fail("Expected exception of type " + expected);
- } catch (Exception got) {
- if (!got.getClass().equals(expected)) {
- fail("Expected exception of type " + expected + " but got " + got);
- }
- return;
- }
- }
-
/* test utilities */
// TODO: eliminate all usages of sleepFor and replace by proper timeouts/waitForIdle.
static private void sleepFor(int ms) {