Merge "Implement registerSystemDefaultNetworkCallback replacement in api30" am: 7c2f81d7e1 am: 2d02bdb70d
Original change: https://android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/1699885
Change-Id: Ia3a9fd19a7ca46fb750c4319db4ad1d6a1c7cbea
diff --git a/apishim/30/com/android/networkstack/apishim/api30/ConnectivityManagerShimImpl.java b/apishim/30/com/android/networkstack/apishim/api30/ConnectivityManagerShimImpl.java
index 1de6610..97f1f60 100644
--- a/apishim/30/com/android/networkstack/apishim/api30/ConnectivityManagerShimImpl.java
+++ b/apishim/30/com/android/networkstack/apishim/api30/ConnectivityManagerShimImpl.java
@@ -17,12 +17,15 @@
package com.android.networkstack.apishim.api30;
import android.content.Context;
+import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
+import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Build;
import android.os.Handler;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import com.android.networkstack.apishim.common.ConnectivityManagerShim;
import com.android.networkstack.apishim.common.ShimUtils;
@@ -33,8 +36,10 @@
*/
public class ConnectivityManagerShimImpl
extends com.android.networkstack.apishim.api29.ConnectivityManagerShimImpl {
+ protected final ConnectivityManager mCm;
protected ConnectivityManagerShimImpl(Context context) {
super(context);
+ mCm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
}
/**
@@ -65,9 +70,22 @@
* @throws UnsupportedApiLevelException if API is not available in this API level.
*/
@Override
+ @RequiresApi(Build.VERSION_CODES.R)
public void registerSystemDefaultNetworkCallback(@NonNull NetworkCallback networkCallback,
- @NonNull Handler handler) throws UnsupportedApiLevelException {
- // Not supported for API 30.
- throw new UnsupportedApiLevelException("Not supported in API 30.");
+ @NonNull Handler handler) {
+ // defaultNetworkRequest is not really a "request", just a way of tracking the system
+ // default network. It's guaranteed not to actually bring up any networks because it
+ // should be the same request as the ConnectivityService default request, and thus
+ // shares fate with it. In API <= R, registerSystemDefaultNetworkCallback is not
+ // available, and registerDefaultNetworkCallback will not track the system default when
+ // a VPN applies to the UID of this process.
+ final NetworkRequest defaultNetworkRequest = new NetworkRequest.Builder()
+ .clearCapabilities()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ .build();
+ mCm.requestNetwork(defaultNetworkRequest, networkCallback, handler);
}
}
diff --git a/apishim/31/com/android/networkstack/apishim/ConnectivityManagerShimImpl.java b/apishim/31/com/android/networkstack/apishim/ConnectivityManagerShimImpl.java
index 1ecdffe..0e01c98 100644
--- a/apishim/31/com/android/networkstack/apishim/ConnectivityManagerShimImpl.java
+++ b/apishim/31/com/android/networkstack/apishim/ConnectivityManagerShimImpl.java
@@ -19,7 +19,6 @@
import static com.android.modules.utils.build.SdkLevel.isAtLeastS;
import android.content.Context;
-import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.NetworkRequest;
import android.os.Build;
@@ -39,11 +38,9 @@
@RequiresApi(Build.VERSION_CODES.S)
public class ConnectivityManagerShimImpl
extends com.android.networkstack.apishim.api30.ConnectivityManagerShimImpl {
- private final ConnectivityManager mCm;
protected ConnectivityManagerShimImpl(Context context) {
super(context);
- mCm = context.getSystemService(ConnectivityManager.class);
}
/**