diff --git a/framework/src/android/net/ConnectivityManager.java b/framework/src/android/net/ConnectivityManager.java index 691a5ef7db..d9df05c65c 100644 --- a/framework/src/android/net/ConnectivityManager.java +++ b/framework/src/android/net/ConnectivityManager.java @@ -3261,11 +3261,11 @@ public class ConnectivityManager { @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_FACTORY}) - public void offerNetwork(@NonNull final NetworkProvider provider, + public void offerNetwork(@NonNull final int providerId, @NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps, @NonNull final INetworkOfferCallback callback) { try { - mService.offerNetwork(Objects.requireNonNull(provider.getMessenger(), "null messenger"), + mService.offerNetwork(providerId, Objects.requireNonNull(score, "null score"), Objects.requireNonNull(caps, "null caps"), Objects.requireNonNull(callback, "null callback")); diff --git a/framework/src/android/net/IConnectivityManager.aidl b/framework/src/android/net/IConnectivityManager.aidl index b5e483a392..0db155827b 100644 --- a/framework/src/android/net/IConnectivityManager.aidl +++ b/framework/src/android/net/IConnectivityManager.aidl @@ -223,7 +223,7 @@ interface IConnectivityManager int getRestrictBackgroundStatusByCaller(); - void offerNetwork(in Messenger messenger, in NetworkScore score, + void offerNetwork(int providerId, in NetworkScore score, in NetworkCapabilities caps, in INetworkOfferCallback callback); void unofferNetwork(in INetworkOfferCallback callback); } diff --git a/framework/src/android/net/NetworkProvider.java b/framework/src/android/net/NetworkProvider.java index 8f93047cf8..d5b5c9b603 100644 --- a/framework/src/android/net/NetworkProvider.java +++ b/framework/src/android/net/NetworkProvider.java @@ -272,6 +272,9 @@ public class NetworkProvider { public void offerNetwork(@NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps, @NonNull final Executor executor, @NonNull final NetworkOfferCallback callback) { + // Can't offer a network with a provider that is not yet registered or already unregistered. + final int providerId = mProviderId; + if (providerId == ID_NONE) return; NetworkOfferCallbackProxy proxy = null; synchronized (mProxies) { for (final NetworkOfferCallbackProxy existingProxy : mProxies) { @@ -285,7 +288,8 @@ public class NetworkProvider { mProxies.add(proxy); } } - mContext.getSystemService(ConnectivityManager.class).offerNetwork(this, score, caps, proxy); + mContext.getSystemService(ConnectivityManager.class) + .offerNetwork(providerId, score, caps, proxy); } /**