Merge "Update Policy Listener API naming." am: a93e2f9545

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1629359

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I83623e00d40a388b4c4534139a11990937514141
This commit is contained in:
Cody Kesting
2021-03-12 22:08:29 +00:00
committed by Automerger Merge Worker
4 changed files with 53 additions and 32 deletions

View File

@@ -6409,12 +6409,12 @@ package android.net.util {
package android.net.vcn { package android.net.vcn {
public class VcnManager { public class VcnManager {
method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void addVcnNetworkPolicyListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.vcn.VcnManager.VcnNetworkPolicyListener); method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void addVcnNetworkPolicyChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.vcn.VcnManager.VcnNetworkPolicyChangeListener);
method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.vcn.VcnNetworkPolicyResult applyVcnNetworkPolicy(@NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties); method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.vcn.VcnNetworkPolicyResult applyVcnNetworkPolicy(@NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties);
method public void removeVcnNetworkPolicyListener(@NonNull android.net.vcn.VcnManager.VcnNetworkPolicyListener); method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void removeVcnNetworkPolicyChangeListener(@NonNull android.net.vcn.VcnManager.VcnNetworkPolicyChangeListener);
} }
public static interface VcnManager.VcnNetworkPolicyListener { public static interface VcnManager.VcnNetworkPolicyChangeListener {
method public void onPolicyChanged(); method public void onPolicyChanged();
} }

View File

@@ -73,7 +73,8 @@ import java.util.concurrent.Executor;
public class VcnManager { public class VcnManager {
@NonNull private static final String TAG = VcnManager.class.getSimpleName(); @NonNull private static final String TAG = VcnManager.class.getSimpleName();
private static final Map<VcnNetworkPolicyListener, VcnUnderlyingNetworkPolicyListenerBinder> private static final Map<
VcnNetworkPolicyChangeListener, VcnUnderlyingNetworkPolicyListenerBinder>
REGISTERED_POLICY_LISTENERS = new ConcurrentHashMap<>(); REGISTERED_POLICY_LISTENERS = new ConcurrentHashMap<>();
@NonNull private final Context mContext; @NonNull private final Context mContext;
@@ -93,13 +94,13 @@ public class VcnManager {
} }
/** /**
* Get all currently registered VcnNetworkPolicyListeners for testing purposes. * Get all currently registered VcnNetworkPolicyChangeListeners for testing purposes.
* *
* @hide * @hide
*/ */
@VisibleForTesting(visibility = Visibility.PRIVATE) @VisibleForTesting(visibility = Visibility.PRIVATE)
@NonNull @NonNull
public static Map<VcnNetworkPolicyListener, VcnUnderlyingNetworkPolicyListenerBinder> public static Map<VcnNetworkPolicyChangeListener, VcnUnderlyingNetworkPolicyListenerBinder>
getAllPolicyListeners() { getAllPolicyListeners() {
return Collections.unmodifiableMap(REGISTERED_POLICY_LISTENERS); return Collections.unmodifiableMap(REGISTERED_POLICY_LISTENERS);
} }
@@ -162,14 +163,14 @@ public class VcnManager {
} }
// TODO(b/180537630): remove all VcnUnderlyingNetworkPolicyListener refs once Telephony is using // TODO(b/180537630): remove all VcnUnderlyingNetworkPolicyListener refs once Telephony is using
// the new VcnNetworkPolicyListener API // the new VcnNetworkPolicyChangeListener API
/** /**
* VcnUnderlyingNetworkPolicyListener is the interface through which internal system components * VcnUnderlyingNetworkPolicyListener is the interface through which internal system components
* can register to receive updates for VCN-underlying Network policies from the System Server. * can register to receive updates for VCN-underlying Network policies from the System Server.
* *
* @hide * @hide
*/ */
public interface VcnUnderlyingNetworkPolicyListener extends VcnNetworkPolicyListener {} public interface VcnUnderlyingNetworkPolicyListener extends VcnNetworkPolicyChangeListener {}
/** /**
* Add a listener for VCN-underlying network policy updates. * Add a listener for VCN-underlying network policy updates.
@@ -185,7 +186,7 @@ public class VcnManager {
@RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
public void addVcnUnderlyingNetworkPolicyListener( public void addVcnUnderlyingNetworkPolicyListener(
@NonNull Executor executor, @NonNull VcnUnderlyingNetworkPolicyListener listener) { @NonNull Executor executor, @NonNull VcnUnderlyingNetworkPolicyListener listener) {
addVcnNetworkPolicyListener(executor, listener); addVcnNetworkPolicyChangeListener(executor, listener);
} }
/** /**
@@ -198,7 +199,7 @@ public class VcnManager {
*/ */
public void removeVcnUnderlyingNetworkPolicyListener( public void removeVcnUnderlyingNetworkPolicyListener(
@NonNull VcnUnderlyingNetworkPolicyListener listener) { @NonNull VcnUnderlyingNetworkPolicyListener listener) {
removeVcnNetworkPolicyListener(listener); removeVcnNetworkPolicyChangeListener(listener);
} }
/** /**
@@ -233,20 +234,20 @@ public class VcnManager {
} }
/** /**
* VcnNetworkPolicyListener is the interface through which internal system components (e.g. * VcnNetworkPolicyChangeListener is the interface through which internal system components
* Network Factories) can register to receive updates for VCN-underlying Network policies from * (e.g. Network Factories) can register to receive updates for VCN-underlying Network policies
* the System Server. * from the System Server.
* *
* <p>Any Network Factory that brings up Networks capable of being VCN-underlying Networks * <p>Any Network Factory that brings up Networks capable of being VCN-underlying Networks
* should register a VcnNetworkPolicyListener. VcnManager will then use this listener to notify * should register a VcnNetworkPolicyChangeListener. VcnManager will then use this listener to
* the registrant when VCN Network policies change. Upon receiving this signal, the listener * notify the registrant when VCN Network policies change. Upon receiving this signal, the
* must check {@link VcnManager} for the current Network policy result for each of its Networks * listener must check {@link VcnManager} for the current Network policy result for each of its
* via {@link #applyVcnNetworkPolicy(NetworkCapabilities, LinkProperties)}. * Networks via {@link #applyVcnNetworkPolicy(NetworkCapabilities, LinkProperties)}.
* *
* @hide * @hide
*/ */
@SystemApi @SystemApi
public interface VcnNetworkPolicyListener { public interface VcnNetworkPolicyChangeListener {
/** /**
* Notifies the implementation that the VCN's underlying Network policy has changed. * Notifies the implementation that the VCN's underlying Network policy has changed.
* *
@@ -260,20 +261,21 @@ public class VcnManager {
/** /**
* Add a listener for VCN-underlying Network policy updates. * Add a listener for VCN-underlying Network policy updates.
* *
* <p>A {@link VcnNetworkPolicyListener} is eligible to begin receiving callbacks once it is * <p>A {@link VcnNetworkPolicyChangeListener} is eligible to begin receiving callbacks once it
* registered. No callbacks are guaranteed upon registration. * is registered. No callbacks are guaranteed upon registration.
* *
* @param executor the Executor that will be used for invoking all calls to the specified * @param executor the Executor that will be used for invoking all calls to the specified
* Listener * Listener
* @param listener the VcnNetworkPolicyListener to be added * @param listener the VcnNetworkPolicyChangeListener to be added
* @throws SecurityException if the caller does not have permission NETWORK_FACTORY * @throws SecurityException if the caller does not have permission NETWORK_FACTORY
* @throws IllegalStateException if the specified VcnNetworkPolicyListener is already registered * @throws IllegalStateException if the specified VcnNetworkPolicyChangeListener is already
* registered
* @hide * @hide
*/ */
@SystemApi @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
public void addVcnNetworkPolicyListener( public void addVcnNetworkPolicyChangeListener(
@NonNull Executor executor, @NonNull VcnNetworkPolicyListener listener) { @NonNull Executor executor, @NonNull VcnNetworkPolicyChangeListener listener) {
requireNonNull(executor, "executor must not be null"); requireNonNull(executor, "executor must not be null");
requireNonNull(listener, "listener must not be null"); requireNonNull(listener, "listener must not be null");
@@ -292,15 +294,18 @@ public class VcnManager {
} }
/** /**
* Remove the specified VcnNetworkPolicyListener from VcnManager. * Remove the specified VcnNetworkPolicyChangeListener from VcnManager.
* *
* <p>If the specified listener is not currently registered, this is a no-op. * <p>If the specified listener is not currently registered, this is a no-op.
* *
* @param listener the VcnNetworkPolicyListener that will be removed * @param listener the VcnNetworkPolicyChangeListener that will be removed
* @throws SecurityException if the caller does not have permission NETWORK_FACTORY
* @hide * @hide
*/ */
@SystemApi @SystemApi
public void removeVcnNetworkPolicyListener(@NonNull VcnNetworkPolicyListener listener) { @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
public void removeVcnNetworkPolicyChangeListener(
@NonNull VcnNetworkPolicyChangeListener listener) {
requireNonNull(listener, "listener must not be null"); requireNonNull(listener, "listener must not be null");
VcnUnderlyingNetworkPolicyListenerBinder binder = VcnUnderlyingNetworkPolicyListenerBinder binder =
@@ -320,8 +325,9 @@ public class VcnManager {
* Applies the network policy for a {@link android.net.Network} with the given parameters. * Applies the network policy for a {@link android.net.Network} with the given parameters.
* *
* <p>Prior to a new NetworkAgent being registered, or upon notification that Carrier VCN policy * <p>Prior to a new NetworkAgent being registered, or upon notification that Carrier VCN policy
* may have changed via {@link VcnNetworkPolicyListener#onPolicyChanged()}, a Network Provider * may have changed via {@link VcnNetworkPolicyChangeListener#onPolicyChanged()}, a Network
* MUST poll for the updated Network policy based on that Network's capabilities and properties. * Provider MUST poll for the updated Network policy based on that Network's capabilities and
* properties.
* *
* @param networkCapabilities the NetworkCapabilities to be used in determining the Network * @param networkCapabilities the NetworkCapabilities to be used in determining the Network
* policy result for this Network. * policy result for this Network.
@@ -532,17 +538,18 @@ public class VcnManager {
} }
/** /**
* Binder wrapper for added VcnNetworkPolicyListeners to receive signals from System Server. * Binder wrapper for added VcnNetworkPolicyChangeListeners to receive signals from System
* Server.
* *
* @hide * @hide
*/ */
private static class VcnUnderlyingNetworkPolicyListenerBinder private static class VcnUnderlyingNetworkPolicyListenerBinder
extends IVcnUnderlyingNetworkPolicyListener.Stub { extends IVcnUnderlyingNetworkPolicyListener.Stub {
@NonNull private final Executor mExecutor; @NonNull private final Executor mExecutor;
@NonNull private final VcnNetworkPolicyListener mListener; @NonNull private final VcnNetworkPolicyChangeListener mListener;
private VcnUnderlyingNetworkPolicyListenerBinder( private VcnUnderlyingNetworkPolicyListenerBinder(
Executor executor, VcnNetworkPolicyListener listener) { Executor executor, VcnNetworkPolicyChangeListener listener) {
mExecutor = executor; mExecutor = executor;
mListener = listener; mListener = listener;
} }

View File

@@ -667,6 +667,10 @@ public class VcnManagementService extends IVcnManagementService.Stub {
@NonNull IVcnUnderlyingNetworkPolicyListener listener) { @NonNull IVcnUnderlyingNetworkPolicyListener listener) {
requireNonNull(listener, "listener was null"); requireNonNull(listener, "listener was null");
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.NETWORK_FACTORY,
"Must have permission NETWORK_FACTORY to unregister a policy listener");
Binder.withCleanCallingIdentity(() -> { Binder.withCleanCallingIdentity(() -> {
synchronized (mLock) { synchronized (mLock) {
PolicyListenerBinderDeath listenerBinderDeath = PolicyListenerBinderDeath listenerBinderDeath =

View File

@@ -593,6 +593,16 @@ public class VcnManagementServiceTest {
mVcnMgmtSvc.removeVcnUnderlyingNetworkPolicyListener(mMockPolicyListener); mVcnMgmtSvc.removeVcnUnderlyingNetworkPolicyListener(mMockPolicyListener);
} }
@Test(expected = SecurityException.class)
public void testRemoveVcnUnderlyingNetworkPolicyListenerInvalidPermission() {
doThrow(new SecurityException())
.when(mMockContext)
.enforceCallingOrSelfPermission(
eq(android.Manifest.permission.NETWORK_FACTORY), any());
mVcnMgmtSvc.removeVcnUnderlyingNetworkPolicyListener(mMockPolicyListener);
}
@Test @Test
public void testRemoveVcnUnderlyingNetworkPolicyListenerNeverRegistered() { public void testRemoveVcnUnderlyingNetworkPolicyListenerNeverRegistered() {
mVcnMgmtSvc.removeVcnUnderlyingNetworkPolicyListener(mMockPolicyListener); mVcnMgmtSvc.removeVcnUnderlyingNetworkPolicyListener(mMockPolicyListener);