Revert "Listen for individual subscription mobile data toggles"

This reverts commit 66896667a6faf53d2175fd7b9b6e66d2f0e7d387.

Reason for revert: <Suspect cause the build break report by b/214340258>

Change-Id: If8ddbfe8a0a8d445c4971572cf3301ebbb816347
diff --git a/services/core/java/com/android/server/vcn/Vcn.java b/services/core/java/com/android/server/vcn/Vcn.java
index f29c40f..e0cc8e1 100644
--- a/services/core/java/com/android/server/vcn/Vcn.java
+++ b/services/core/java/com/android/server/vcn/Vcn.java
@@ -39,13 +39,10 @@
 import android.net.vcn.VcnGatewayConnectionConfig;
 import android.net.vcn.VcnManager.VcnErrorCode;
 import android.os.Handler;
-import android.os.HandlerExecutor;
 import android.os.Message;
 import android.os.ParcelUuid;
 import android.provider.Settings;
-import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
-import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Slog;
 
@@ -60,7 +57,6 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -152,10 +148,6 @@
     @NonNull private final VcnContentResolver mContentResolver;
     @NonNull private final ContentObserver mMobileDataSettingsObserver;
 
-    @NonNull
-    private final Map<Integer, VcnUserMobileDataStateListener> mMobileDataStateListeners =
-            new ArrayMap<>();
-
     /**
      * Map containing all VcnGatewayConnections and their VcnGatewayConnectionConfigs.
      *
@@ -229,9 +221,6 @@
         // Update mIsMobileDataEnabled before starting handling of NetworkRequests.
         mIsMobileDataEnabled = getMobileDataStatus();
 
-        // Register mobile data state listeners.
-        updateMobileDataStateListeners();
-
         // Register to receive cached and future NetworkRequests
         mVcnContext.getVcnNetworkProvider().registerListener(mRequestListener);
     }
@@ -359,12 +348,6 @@
             gatewayConnection.teardownAsynchronously();
         }
 
-        // Unregister MobileDataStateListeners
-        for (VcnUserMobileDataStateListener listener : mMobileDataStateListeners.values()) {
-            getTelephonyManager().unregisterTelephonyCallback(listener);
-        }
-        mMobileDataStateListeners.clear();
-
         mCurrentStatus = VCN_STATUS_CODE_INACTIVE;
     }
 
@@ -471,40 +454,11 @@
             gatewayConnection.updateSubscriptionSnapshot(mLastSnapshot);
         }
 
-        updateMobileDataStateListeners();
-
         // 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 updateMobileDataStateListeners() {
-        final Set<Integer> subIdsInGroup = mLastSnapshot.getAllSubIdsInGroup(mSubscriptionGroup);
-        final HandlerExecutor executor = new HandlerExecutor(this);
-
-        // Register new callbacks
-        for (int subId : subIdsInGroup) {
-            if (!mMobileDataStateListeners.containsKey(subId)) {
-                final VcnUserMobileDataStateListener listener =
-                        new VcnUserMobileDataStateListener();
-
-                getTelephonyManagerForSubid(subId).registerTelephonyCallback(executor, listener);
-                mMobileDataStateListeners.put(subId, listener);
-            }
-        }
-
-        // Unregister old callbacks
-        Iterator<Entry<Integer, VcnUserMobileDataStateListener>> iterator =
-                mMobileDataStateListeners.entrySet().iterator();
-        while (iterator.hasNext()) {
-            final Entry<Integer, VcnUserMobileDataStateListener> entry = iterator.next();
-            if (!subIdsInGroup.contains(entry.getKey())) {
-                getTelephonyManager().unregisterTelephonyCallback(entry.getValue());
-                iterator.remove();
-            }
-        }
-    }
-
     private void handleMobileDataToggled() {
         final boolean oldMobileDataEnabledStatus = mIsMobileDataEnabled;
         mIsMobileDataEnabled = getMobileDataStatus();
@@ -539,8 +493,11 @@
     }
 
     private boolean getMobileDataStatus() {
+        final TelephonyManager genericTelMan =
+                mVcnContext.getContext().getSystemService(TelephonyManager.class);
+
         for (int subId : mLastSnapshot.getAllSubIdsInGroup(mSubscriptionGroup)) {
-            if (getTelephonyManagerForSubid(subId).isDataEnabled()) {
+            if (genericTelMan.createForSubscriptionId(subId).isDataEnabled()) {
                 return true;
             }
         }
@@ -560,14 +517,6 @@
         return request.canBeSatisfiedBy(builder.build());
     }
 
-    private TelephonyManager getTelephonyManager() {
-        return mVcnContext.getContext().getSystemService(TelephonyManager.class);
-    }
-
-    private TelephonyManager getTelephonyManagerForSubid(int subid) {
-        return getTelephonyManager().createForSubscriptionId(subid);
-    }
-
     private String getLogPrefix() {
         return "["
                 + LogUtils.getHashedSubscriptionGroup(mSubscriptionGroup)
@@ -721,16 +670,6 @@
         }
     }
 
-    @VisibleForTesting(visibility = Visibility.PRIVATE)
-    class VcnUserMobileDataStateListener extends TelephonyCallback
-            implements TelephonyCallback.UserMobileDataStateListener {
-
-        @Override
-        public void onUserMobileDataStateChanged(boolean enabled) {
-            sendMessage(obtainMessage(MSG_EVENT_MOBILE_DATA_TOGGLED));
-        }
-    }
-
     /** External dependencies used by Vcn, for injection in tests */
     @VisibleForTesting(visibility = Visibility.PRIVATE)
     public static class Dependencies {
diff --git a/tests/vcn/java/com/android/server/vcn/VcnTest.java b/tests/vcn/java/com/android/server/vcn/VcnTest.java
index 6d26968..5d2f9d7 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnTest.java
@@ -58,7 +58,6 @@
 import com.android.server.VcnManagementService.VcnCallback;
 import com.android.server.vcn.TelephonySubscriptionTracker.TelephonySubscriptionSnapshot;
 import com.android.server.vcn.Vcn.VcnGatewayStatusCallback;
-import com.android.server.vcn.Vcn.VcnUserMobileDataStateListener;
 import com.android.server.vcn.VcnNetworkProvider.NetworkRequestListener;
 
 import org.junit.Before;
@@ -209,13 +208,6 @@
     }
 
     @Test
-    public void testMobileDataStateListenersRegistered() {
-        // Validate state from setUp()
-        verify(mTelephonyManager, times(3))
-                .registerTelephonyCallback(any(), any(VcnUserMobileDataStateListener.class));
-    }
-
-    @Test
     public void testMobileDataStateCheckedOnInitialization_enabled() {
         // Validate state from setUp()
         assertTrue(mVcn.isMobileDataEnabled());
@@ -271,24 +263,6 @@
         assertFalse(mVcn.isMobileDataEnabled());
     }
 
-    @Test
-    public void testSubscriptionSnapshotUpdatesMobileDataStateListeners() {
-        final TelephonySubscriptionSnapshot updatedSnapshot =
-                mock(TelephonySubscriptionSnapshot.class);
-
-        doReturn(new ArraySet<>(Arrays.asList(2, 4)))
-                .when(updatedSnapshot)
-                .getAllSubIdsInGroup(any());
-
-        mVcn.updateSubscriptionSnapshot(updatedSnapshot);
-        mTestLooper.dispatchAll();
-
-        verify(mTelephonyManager, times(4))
-                .registerTelephonyCallback(any(), any(VcnUserMobileDataStateListener.class));
-        verify(mTelephonyManager, times(2))
-                .unregisterTelephonyCallback(any(VcnUserMobileDataStateListener.class));
-    }
-
     private void triggerVcnRequestListeners(NetworkRequestListener requestListener) {
         for (final int[] caps : TEST_CAPS) {
             startVcnGatewayWithCapabilities(requestListener, caps);
@@ -428,17 +402,24 @@
         verify(mVcnNetworkProvider).resendAllRequests(requestListener);
     }
 
-    private void setupForMobileDataTest(boolean startingToggleState) {
+    private void verifyMobileDataToggled(boolean startingToggleState, boolean endingToggleState) {
+        final ArgumentCaptor<ContentObserver> captor =
+                ArgumentCaptor.forClass(ContentObserver.class);
+        verify(mContentResolver).registerContentObserver(any(), anyBoolean(), captor.capture());
+        final ContentObserver contentObserver = captor.getValue();
+
         // Start VcnGatewayConnections
         final NetworkRequestListener requestListener = verifyAndGetRequestListener();
         mVcn.setMobileDataEnabled(startingToggleState);
         triggerVcnRequestListeners(requestListener);
-    }
+        final Map<VcnGatewayConnectionConfig, VcnGatewayConnection> gateways =
+                mVcn.getVcnGatewayConnectionConfigMap();
 
-    private void verifyMobileDataToggledUpdatesGatewayConnections(
-            boolean startingToggleState,
-            boolean endingToggleState,
-            Map<VcnGatewayConnectionConfig, VcnGatewayConnection> gateways) {
+        // Trigger data toggle change.
+        doReturn(endingToggleState).when(mTelephonyManager).isDataEnabled();
+        contentObserver.onChange(false /* selfChange, ignored */);
+        mTestLooper.dispatchAll();
+
         // Verify that data toggle changes restart ONLY INTERNET or DUN networks, and only if the
         // toggle state changed.
         for (Entry<VcnGatewayConnectionConfig, VcnGatewayConnection> entry : gateways.entrySet()) {
@@ -452,98 +433,29 @@
             }
         }
 
-        final NetworkRequestListener requestListener = verifyAndGetRequestListener();
         if (startingToggleState != endingToggleState) {
             verify(mVcnNetworkProvider).resendAllRequests(requestListener);
         }
         assertEquals(endingToggleState, mVcn.isMobileDataEnabled());
     }
 
-    private void verifyGlobalMobileDataToggled(
-            boolean startingToggleState, boolean endingToggleState) {
-        setupForMobileDataTest(startingToggleState);
-        final Map<VcnGatewayConnectionConfig, VcnGatewayConnection> gateways =
-                mVcn.getVcnGatewayConnectionConfigMap();
-
-        // Trigger data toggle change
-        final ArgumentCaptor<ContentObserver> captor =
-                ArgumentCaptor.forClass(ContentObserver.class);
-        verify(mContentResolver).registerContentObserver(any(), anyBoolean(), captor.capture());
-        final ContentObserver contentObserver = captor.getValue();
-
-        doReturn(endingToggleState).when(mTelephonyManager).isDataEnabled();
-        contentObserver.onChange(false /* selfChange, ignored */);
-        mTestLooper.dispatchAll();
-
-        // Verify resultant behavior
-        verifyMobileDataToggledUpdatesGatewayConnections(
-                startingToggleState, endingToggleState, gateways);
+    @Test
+    public void testMobileDataEnabled() {
+        verifyMobileDataToggled(false /* startingToggleState */, true /* endingToggleState */);
     }
 
     @Test
-    public void testGlobalMobileDataEnabled() {
-        verifyGlobalMobileDataToggled(
-                false /* startingToggleState */, true /* endingToggleState */);
+    public void testMobileDataDisabled() {
+        verifyMobileDataToggled(true /* startingToggleState */, false /* endingToggleState */);
     }
 
     @Test
-    public void testGlobalMobileDataDisabled() {
-        verifyGlobalMobileDataToggled(
-                true /* startingToggleState */, false /* endingToggleState */);
+    public void testMobileDataObserverFiredWithoutChanges_dataEnabled() {
+        verifyMobileDataToggled(false /* startingToggleState */, false /* endingToggleState */);
     }
 
     @Test
-    public void testGlobalMobileDataObserverFiredWithoutChanges_dataEnabled() {
-        verifyGlobalMobileDataToggled(
-                false /* startingToggleState */, false /* endingToggleState */);
-    }
-
-    @Test
-    public void testGlobalMobileDataObserverFiredWithoutChanges_dataDisabled() {
-        verifyGlobalMobileDataToggled(true /* startingToggleState */, true /* endingToggleState */);
-    }
-
-    private void verifySubscriptionMobileDataToggled(
-            boolean startingToggleState, boolean endingToggleState) {
-        setupForMobileDataTest(startingToggleState);
-        final Map<VcnGatewayConnectionConfig, VcnGatewayConnection> gateways =
-                mVcn.getVcnGatewayConnectionConfigMap();
-
-        // Trigger data toggle change.
-        final ArgumentCaptor<VcnUserMobileDataStateListener> captor =
-                ArgumentCaptor.forClass(VcnUserMobileDataStateListener.class);
-        verify(mTelephonyManager, times(3)).registerTelephonyCallback(any(), captor.capture());
-        final VcnUserMobileDataStateListener listener = captor.getValue();
-
-        doReturn(endingToggleState).when(mTelephonyManager).isDataEnabled();
-        listener.onUserMobileDataStateChanged(false /* enabled, ignored */);
-        mTestLooper.dispatchAll();
-
-        // Verify resultant behavior
-        verifyMobileDataToggledUpdatesGatewayConnections(
-                startingToggleState, endingToggleState, gateways);
-    }
-
-    @Test
-    public void testSubscriptionMobileDataEnabled() {
-        verifyGlobalMobileDataToggled(
-                false /* startingToggleState */, true /* endingToggleState */);
-    }
-
-    @Test
-    public void testSubscriptionMobileDataDisabled() {
-        verifyGlobalMobileDataToggled(
-                true /* startingToggleState */, false /* endingToggleState */);
-    }
-
-    @Test
-    public void testSubscriptionMobileDataListenerFiredWithoutChanges_dataEnabled() {
-        verifyGlobalMobileDataToggled(
-                false /* startingToggleState */, false /* endingToggleState */);
-    }
-
-    @Test
-    public void testSubscriptionMobileDataListenerFiredWithoutChanges_dataDisabled() {
-        verifyGlobalMobileDataToggled(true /* startingToggleState */, true /* endingToggleState */);
+    public void testMobileDataObserverFiredWithoutChanges_dataDisabled() {
+        verifyMobileDataToggled(true /* startingToggleState */, true /* endingToggleState */);
     }
 }