[NS04.5] Have NetworkOffer embark a provider ID am: 30689b8fd7
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1722736 Change-Id: Iba7591f32e9a90ced10d6c9f200e84fc28f9246a
This commit is contained in:
@@ -3364,11 +3364,11 @@ public class ConnectivityManager {
|
|||||||
@RequiresPermission(anyOf = {
|
@RequiresPermission(anyOf = {
|
||||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
||||||
android.Manifest.permission.NETWORK_FACTORY})
|
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 NetworkScore score, @NonNull final NetworkCapabilities caps,
|
||||||
@NonNull final INetworkOfferCallback callback) {
|
@NonNull final INetworkOfferCallback callback) {
|
||||||
try {
|
try {
|
||||||
mService.offerNetwork(Objects.requireNonNull(provider.getMessenger(), "null messenger"),
|
mService.offerNetwork(providerId,
|
||||||
Objects.requireNonNull(score, "null score"),
|
Objects.requireNonNull(score, "null score"),
|
||||||
Objects.requireNonNull(caps, "null caps"),
|
Objects.requireNonNull(caps, "null caps"),
|
||||||
Objects.requireNonNull(callback, "null callback"));
|
Objects.requireNonNull(callback, "null callback"));
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ interface IConnectivityManager
|
|||||||
|
|
||||||
int getRestrictBackgroundStatusByCaller();
|
int getRestrictBackgroundStatusByCaller();
|
||||||
|
|
||||||
void offerNetwork(in Messenger messenger, in NetworkScore score,
|
void offerNetwork(int providerId, in NetworkScore score,
|
||||||
in NetworkCapabilities caps, in INetworkOfferCallback callback);
|
in NetworkCapabilities caps, in INetworkOfferCallback callback);
|
||||||
void unofferNetwork(in INetworkOfferCallback callback);
|
void unofferNetwork(in INetworkOfferCallback callback);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -272,6 +272,9 @@ public class NetworkProvider {
|
|||||||
public void offerNetwork(@NonNull final NetworkScore score,
|
public void offerNetwork(@NonNull final NetworkScore score,
|
||||||
@NonNull final NetworkCapabilities caps, @NonNull final Executor executor,
|
@NonNull final NetworkCapabilities caps, @NonNull final Executor executor,
|
||||||
@NonNull final NetworkOfferCallback callback) {
|
@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;
|
NetworkOfferCallbackProxy proxy = null;
|
||||||
synchronized (mProxies) {
|
synchronized (mProxies) {
|
||||||
for (final NetworkOfferCallbackProxy existingProxy : mProxies) {
|
for (final NetworkOfferCallbackProxy existingProxy : mProxies) {
|
||||||
@@ -285,7 +288,8 @@ public class NetworkProvider {
|
|||||||
mProxies.add(proxy);
|
mProxies.add(proxy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mContext.getSystemService(ConnectivityManager.class).offerNetwork(this, score, caps, proxy);
|
mContext.getSystemService(ConnectivityManager.class)
|
||||||
|
.offerNetwork(providerId, score, caps, proxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6233,11 +6233,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void offerNetwork(@NonNull final Messenger providerMessenger,
|
public void offerNetwork(final int providerId,
|
||||||
@NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps,
|
@NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps,
|
||||||
@NonNull final INetworkOfferCallback callback) {
|
@NonNull final INetworkOfferCallback callback) {
|
||||||
final NetworkOffer offer = new NetworkOffer(
|
final NetworkOffer offer = new NetworkOffer(
|
||||||
FullScore.makeProspectiveScore(score, caps), caps, callback, providerMessenger);
|
FullScore.makeProspectiveScore(score, caps), caps, callback, providerId);
|
||||||
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_OFFER, offer));
|
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_OFFER, offer));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6255,7 +6255,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
// Unregister all the offers from this provider
|
// Unregister all the offers from this provider
|
||||||
final ArrayList<NetworkOfferInfo> toRemove = new ArrayList<>();
|
final ArrayList<NetworkOfferInfo> toRemove = new ArrayList<>();
|
||||||
for (final NetworkOfferInfo noi : mNetworkOffers) {
|
for (final NetworkOfferInfo noi : mNetworkOffers) {
|
||||||
if (noi.offer.provider == messenger) {
|
if (noi.offer.providerId == npi.providerId) {
|
||||||
// Can't call handleUnregisterNetworkOffer here because iteration is in progress
|
// Can't call handleUnregisterNetworkOffer here because iteration is in progress
|
||||||
toRemove.add(noi);
|
toRemove.add(noi);
|
||||||
}
|
}
|
||||||
@@ -6647,13 +6647,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
*/
|
*/
|
||||||
private void handleRegisterNetworkOffer(@NonNull final NetworkOffer newOffer) {
|
private void handleRegisterNetworkOffer(@NonNull final NetworkOffer newOffer) {
|
||||||
ensureRunningOnConnectivityServiceThread();
|
ensureRunningOnConnectivityServiceThread();
|
||||||
if (null == mNetworkProviderInfos.get(newOffer.provider)) {
|
|
||||||
// This may actually happen if a provider updates its score or registers and then
|
|
||||||
// immediately unregisters. The offer would still be in the handler queue, but the
|
|
||||||
// provider would have been removed.
|
|
||||||
if (DBG) log("Received offer from an unregistered provider");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final NetworkOfferInfo existingOffer = findNetworkOfferInfoByCallback(newOffer.callback);
|
final NetworkOfferInfo existingOffer = findNetworkOfferInfoByCallback(newOffer.callback);
|
||||||
if (null != existingOffer) {
|
if (null != existingOffer) {
|
||||||
@@ -6662,7 +6655,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
final NetworkOfferInfo noi = new NetworkOfferInfo(newOffer);
|
final NetworkOfferInfo noi = new NetworkOfferInfo(newOffer);
|
||||||
try {
|
try {
|
||||||
noi.offer.provider.getBinder().linkToDeath(noi, 0 /* flags */);
|
noi.offer.callback.asBinder().linkToDeath(noi, 0 /* flags */);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
noi.binderDied();
|
noi.binderDied();
|
||||||
return;
|
return;
|
||||||
@@ -6674,7 +6667,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
private void handleUnregisterNetworkOffer(@NonNull final NetworkOfferInfo noi) {
|
private void handleUnregisterNetworkOffer(@NonNull final NetworkOfferInfo noi) {
|
||||||
ensureRunningOnConnectivityServiceThread();
|
ensureRunningOnConnectivityServiceThread();
|
||||||
mNetworkOffers.remove(noi);
|
mNetworkOffers.remove(noi);
|
||||||
noi.offer.provider.getBinder().unlinkToDeath(noi, 0 /* flags */);
|
noi.offer.callback.asBinder().unlinkToDeath(noi, 0 /* flags */);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable private NetworkOfferInfo findNetworkOfferInfoByCallback(
|
@Nullable private NetworkOfferInfo findNetworkOfferInfoByCallback(
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import android.annotation.Nullable;
|
|||||||
import android.net.INetworkOfferCallback;
|
import android.net.INetworkOfferCallback;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
import android.os.Messenger;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -44,7 +43,7 @@ public class NetworkOffer {
|
|||||||
@NonNull public final FullScore score;
|
@NonNull public final FullScore score;
|
||||||
@NonNull public final NetworkCapabilities caps;
|
@NonNull public final NetworkCapabilities caps;
|
||||||
@NonNull public final INetworkOfferCallback callback;
|
@NonNull public final INetworkOfferCallback callback;
|
||||||
@NonNull public final Messenger provider;
|
@NonNull public final int providerId;
|
||||||
|
|
||||||
private static NetworkCapabilities emptyCaps() {
|
private static NetworkCapabilities emptyCaps() {
|
||||||
final NetworkCapabilities nc = new NetworkCapabilities();
|
final NetworkCapabilities nc = new NetworkCapabilities();
|
||||||
@@ -56,11 +55,11 @@ public class NetworkOffer {
|
|||||||
public NetworkOffer(@NonNull final FullScore score,
|
public NetworkOffer(@NonNull final FullScore score,
|
||||||
@Nullable final NetworkCapabilities caps,
|
@Nullable final NetworkCapabilities caps,
|
||||||
@NonNull final INetworkOfferCallback callback,
|
@NonNull final INetworkOfferCallback callback,
|
||||||
@NonNull final Messenger provider) {
|
@NonNull final int providerId) {
|
||||||
this.score = Objects.requireNonNull(score);
|
this.score = Objects.requireNonNull(score);
|
||||||
this.caps = null != caps ? caps : emptyCaps();
|
this.caps = null != caps ? caps : emptyCaps();
|
||||||
this.callback = Objects.requireNonNull(callback);
|
this.callback = Objects.requireNonNull(callback);
|
||||||
this.provider = Objects.requireNonNull(provider);
|
this.providerId = providerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user