From 1dba7e09df1ddf4abad59e2508ce07d29d33f1d6 Mon Sep 17 00:00:00 2001 From: Cody Kesting Date: Fri, 18 Jun 2021 02:18:22 +0000 Subject: [PATCH] Update Mobile Data State on subscription changes. This CL ensures that Vcn instances refresh their mobile data state when they receive a new TelephonySubscriptionSnapshot. A new snapshot may contain different subId -> subGroup mappings, which can affect whether a Vcn instance's subGroup has mobile data enabled or not. This in turn can change which VcnGatewayConnections are brought up by the Vcn. Bug: 191394092 Test: atest FrameworksVcnTests CtsVcnTestCases Original-Change: https://android-review.googlesource.com/1740514 Merged-In: Ib59b4ed7900a177b17ed4a6e197e271b10937f65 Change-Id: Ib59b4ed7900a177b17ed4a6e197e271b10937f65 --- .../core/java/com/android/server/vcn/Vcn.java | 4 ++++ .../java/com/android/server/vcn/VcnTest.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/services/core/java/com/android/server/vcn/Vcn.java b/services/core/java/com/android/server/vcn/Vcn.java index f7d61367c81e4..95a06fcff7341 100644 --- a/services/core/java/com/android/server/vcn/Vcn.java +++ b/services/core/java/com/android/server/vcn/Vcn.java @@ -453,6 +453,10 @@ public class Vcn extends Handler { for (VcnGatewayConnection gatewayConnection : mVcnGatewayConnections.values()) { gatewayConnection.updateSubscriptionSnapshot(mLastSnapshot); } + + // Update the mobile data state after updating the subscription snapshot as a change in + // subIds for a subGroup may affect the mobile data state. + handleMobileDataToggled(); } private void handleMobileDataToggled() { diff --git a/tests/vcn/java/com/android/server/vcn/VcnTest.java b/tests/vcn/java/com/android/server/vcn/VcnTest.java index f681ee19ab126..5d2f9d7485814 100644 --- a/tests/vcn/java/com/android/server/vcn/VcnTest.java +++ b/tests/vcn/java/com/android/server/vcn/VcnTest.java @@ -242,6 +242,27 @@ public class VcnTest { verifyUpdateSubscriptionSnapshotNotifiesGatewayConnections(VCN_STATUS_CODE_SAFE_MODE); } + @Test + public void testSubscriptionSnapshotUpdatesMobileDataState() { + final NetworkRequestListener requestListener = verifyAndGetRequestListener(); + startVcnGatewayWithCapabilities(requestListener, TEST_CAPS[0]); + + // Expect mobile data enabled from setUp() + assertTrue(mVcn.isMobileDataEnabled()); + + final TelephonySubscriptionSnapshot updatedSnapshot = + mock(TelephonySubscriptionSnapshot.class); + doReturn(TEST_SUB_IDS_IN_GROUP) + .when(updatedSnapshot) + .getAllSubIdsInGroup(eq(TEST_SUB_GROUP)); + doReturn(false).when(mTelephonyManager).isDataEnabled(); + + mVcn.updateSubscriptionSnapshot(updatedSnapshot); + mTestLooper.dispatchAll(); + + assertFalse(mVcn.isMobileDataEnabled()); + } + private void triggerVcnRequestListeners(NetworkRequestListener requestListener) { for (final int[] caps : TEST_CAPS) { startVcnGatewayWithCapabilities(requestListener, caps);