diff options
author | Cody Kesting <ckesting@google.com> | 2021-05-05 22:31:12 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-05-05 22:31:12 +0000 |
commit | dc3608af59109c34dfe64ae495800e204e06ca06 (patch) | |
tree | 8f9acae8189b50337d27c32ed55193e0b099bdfd | |
parent | a295723c1388a195bc9721527700c4eeaceda114 (diff) | |
parent | 88d6f01bae43499fc773877a539ffe75f32692a5 (diff) |
Merge changes I01ffdde2,Iecab1226 am: a5786a15e1 am: cbf91b3e8c am: 88d6f01bae
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1696089
Change-Id: I7888e363733ac767c43a5b6c716b45da81544830
-rw-r--r-- | services/core/java/com/android/server/VcnManagementService.java | 22 | ||||
-rw-r--r-- | tests/vcn/java/com/android/server/VcnManagementServiceTest.java | 25 |
2 files changed, 47 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/VcnManagementService.java b/services/core/java/com/android/server/VcnManagementService.java index 57254c1b9225..df4c2cfc7fd4 100644 --- a/services/core/java/com/android/server/VcnManagementService.java +++ b/services/core/java/com/android/server/VcnManagementService.java @@ -87,6 +87,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; +import java.util.Set; import java.util.concurrent.TimeUnit; /** @@ -429,6 +430,7 @@ public class VcnManagementService extends IVcnManagementService.Stub { public void onNewSnapshot(@NonNull TelephonySubscriptionSnapshot snapshot) { // Startup VCN instances synchronized (mLock) { + final TelephonySubscriptionSnapshot oldSnapshot = mLastSnapshot; mLastSnapshot = snapshot; // Start any VCN instances as necessary @@ -476,11 +478,29 @@ public class VcnManagementService extends IVcnManagementService.Stub { entry.getValue().updateSubscriptionSnapshot(mLastSnapshot); } } + + final Map<ParcelUuid, Set<Integer>> oldSubGrpMappings = + getSubGroupToSubIdMappings(oldSnapshot); + final Map<ParcelUuid, Set<Integer>> currSubGrpMappings = + getSubGroupToSubIdMappings(mLastSnapshot); + if (!currSubGrpMappings.equals(oldSubGrpMappings)) { + notifyAllPolicyListenersLocked(); + } } } } @GuardedBy("mLock") + private Map<ParcelUuid, Set<Integer>> getSubGroupToSubIdMappings( + @NonNull TelephonySubscriptionSnapshot snapshot) { + final Map<ParcelUuid, Set<Integer>> subGrpMappings = new ArrayMap<>(); + for (ParcelUuid subGrp : mVcns.keySet()) { + subGrpMappings.put(subGrp, snapshot.getAllSubIdsInGroup(subGrp)); + } + return subGrpMappings; + } + + @GuardedBy("mLock") private void stopVcnLocked(@NonNull ParcelUuid uuidToTeardown) { final Vcn vcnToTeardown = mVcns.remove(uuidToTeardown); if (vcnToTeardown == null) { @@ -813,6 +833,8 @@ public class VcnManagementService extends IVcnManagementService.Stub { if (isVcnManagedNetwork) { ncBuilder.removeCapability( NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED); + } else { + ncBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED); } if (isRestrictedCarrierWifi) { diff --git a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java index aa4b5f8e208f..9ecd82ff6bcb 100644 --- a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java +++ b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java @@ -77,6 +77,7 @@ import android.os.test.TestLooper; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; +import android.util.ArraySet; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; @@ -98,6 +99,7 @@ import java.io.FileNotFoundException; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.UUID; @@ -326,6 +328,17 @@ public class VcnManagementServiceTest { return subIdToGroupMap.get(invocation.getArgument(0)); }).when(snapshot).getGroupForSubId(anyInt()); + doAnswer(invocation -> { + final ParcelUuid subGrp = invocation.getArgument(0); + final Set<Integer> subIds = new ArraySet<>(); + for (Entry<Integer, ParcelUuid> entry : subIdToGroupMap.entrySet()) { + if (entry.getValue().equals(subGrp)) { + subIds.add(entry.getKey()); + } + } + return subIds; + }).when(snapshot).getAllSubIdsInGroup(any()); + final TelephonySubscriptionTrackerCallback cb = getTelephonySubscriptionTrackerCallback(); cb.onNewSnapshot(snapshot); @@ -914,6 +927,18 @@ public class VcnManagementServiceTest { verify(mMockPolicyListener).onPolicyChanged(); } + @Test + public void testVcnSubIdChangeUpdatesPolicyListener() throws Exception { + startAndGetVcnInstance(TEST_UUID_2); + mVcnMgmtSvc.addVcnUnderlyingNetworkPolicyListener(mMockPolicyListener); + + triggerSubscriptionTrackerCbAndGetSnapshot( + Collections.singleton(TEST_UUID_2), + Collections.singletonMap(TEST_SUBSCRIPTION_ID, TEST_UUID_2)); + + verify(mMockPolicyListener).onPolicyChanged(); + } + private void triggerVcnSafeMode( @NonNull ParcelUuid subGroup, @NonNull TelephonySubscriptionSnapshot snapshot, |