Flagging requirement for notifyDataActivityChanged
based on Slot.

Flagging requirement ref topic:
https://googleplex-android-review.git.corp.google.com/q/topic:%22clear_dataactivity_onsimremoval%22

Bug: 309896936
Test: atest FrameworksTelephonyTests & CtsTelephonyTestCases
Change-Id: I3cffdeb6ebca61a827cefa256161ccbc163614a3
diff --git a/flags/data.aconfig b/flags/data.aconfig
index befb38d..52cd486 100644
--- a/flags/data.aconfig
+++ b/flags/data.aconfig
@@ -49,3 +49,10 @@
   bug:"286171724"
 }
 
+flag {
+ name: "notify_data_activity_changed_with_slot"
+  namespace: "telephony"
+  description: "notify data activity changed for slot id"
+  bug: "309896936"
+}
+
diff --git a/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java b/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java
index c9db985..c035329 100644
--- a/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java
+++ b/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java
@@ -41,6 +41,7 @@
 import android.telephony.ims.ImsReasonInfo;
 import android.telephony.ims.MediaQualityStatus;
 
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.telephony.Rlog;
 
 import java.util.List;
@@ -55,10 +56,15 @@
 
     private TelephonyRegistryManager mTelephonyRegistryMgr;
 
+    /** Feature flags */
+    @NonNull
+    private final FeatureFlags mFeatureFlags;
 
-    public DefaultPhoneNotifier(Context context) {
+
+    public DefaultPhoneNotifier(Context context, @NonNull FeatureFlags featureFlags) {
         mTelephonyRegistryMgr = (TelephonyRegistryManager) context.getSystemService(
             Context.TELEPHONY_REGISTRY_SERVICE);
+        mFeatureFlags = featureFlags;
     }
 
     @Override
@@ -125,10 +131,16 @@
 
     @Override
     public void notifyDataActivity(Phone sender) {
-        int phoneId = sender.getPhoneId();
+
         int subId = sender.getSubId();
-        mTelephonyRegistryMgr.notifyDataActivityChanged(phoneId, subId,
-                sender.getDataActivityState());
+
+        if (mFeatureFlags.notifyDataActivityChangedWithSlot()) {
+            int phoneId = sender.getPhoneId();
+            mTelephonyRegistryMgr.notifyDataActivityChanged(phoneId, subId,
+                    sender.getDataActivityState());
+        } else {
+            mTelephonyRegistryMgr.notifyDataActivityChanged(subId, sender.getDataActivityState());
+        }
     }
 
     @Override
diff --git a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
index 06ab584..78d1387 100644
--- a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
+++ b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
@@ -19,6 +19,7 @@
 import static android.telephony.TelephonyManager.ACTION_MULTI_SIM_CONFIG_CHANGED;
 import static android.telephony.TelephonyManager.EXTRA_ACTIVE_SIM_SUPPORTED_COUNT;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.Intent;
 import android.os.AsyncResult;
@@ -37,6 +38,7 @@
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.subscription.SubscriptionManagerService;
 import com.android.telephony.Rlog;
 
@@ -75,6 +77,10 @@
     private final Map<Integer, Boolean> mPhoneStatusMap;
     private MockableInterface mMi = new MockableInterface();
     private TelephonyManager mTelephonyManager;
+
+    /** Feature flags */
+    @NonNull
+    private final FeatureFlags mFeatureFlags;
     /**
      * True if 'Virtual DSDA' i.e., in-call IMS connectivity on both subs with only single logical
      * modem, is enabled.
@@ -88,10 +94,11 @@
      * Init method to instantiate the object
      * Should only be called once.
      */
-    public static PhoneConfigurationManager init(Context context) {
+    public static PhoneConfigurationManager init(Context context,
+            @NonNull FeatureFlags featureFlags) {
         synchronized (PhoneConfigurationManager.class) {
             if (sInstance == null) {
-                sInstance = new PhoneConfigurationManager(context);
+                sInstance = new PhoneConfigurationManager(context, featureFlags);
             } else {
                 Log.wtf(LOG_TAG, "init() called multiple times!  sInstance = " + sInstance);
             }
@@ -103,8 +110,9 @@
      * Constructor.
      * @param context context needed to send broadcast.
      */
-    private PhoneConfigurationManager(Context context) {
+    private PhoneConfigurationManager(Context context, @NonNull FeatureFlags featureFlags) {
         mContext = context;
+        mFeatureFlags = featureFlags;
         // TODO: send commands to modem once interface is ready.
         mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
         //initialize with default, it'll get updated when RADIO is ON/AVAILABLE
@@ -360,7 +368,7 @@
     }
 
     private void notifyCapabilityChanged() {
-        PhoneNotifier notifier = new DefaultPhoneNotifier(mContext);
+        PhoneNotifier notifier = new DefaultPhoneNotifier(mContext, mFeatureFlags);
 
         notifier.notifyPhoneCapabilityChanged(mStaticCapability);
     }
diff --git a/src/java/com/android/internal/telephony/PhoneFactory.java b/src/java/com/android/internal/telephony/PhoneFactory.java
index 625a937..3560048 100644
--- a/src/java/com/android/internal/telephony/PhoneFactory.java
+++ b/src/java/com/android/internal/telephony/PhoneFactory.java
@@ -163,7 +163,7 @@
                 // register statsd pullers.
                 sMetricsCollector = new MetricsCollector(context);
 
-                sPhoneNotifier = new DefaultPhoneNotifier(context);
+                sPhoneNotifier = new DefaultPhoneNotifier(context, featureFlags);
 
                 int cdmaSubscription = CdmaSubscriptionSourceManager.getDefault(context);
                 Rlog.i(LOG_TAG, "Cdma Subscription set to " + cdmaSubscription);
@@ -256,7 +256,7 @@
                     Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver.");
                 }
 
-                sPhoneConfigurationManager = PhoneConfigurationManager.init(sContext);
+                sPhoneConfigurationManager = PhoneConfigurationManager.init(sContext, featureFlags);
 
                 sCellularNetworkValidator = CellularNetworkValidator.make(sContext);
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java b/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java
index 827511d..f7f67a5 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java
@@ -23,6 +23,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.telephony.CellIdentityGsm;
 import android.telephony.CellInfo;
@@ -34,12 +35,14 @@
 import android.telephony.ims.ImsCallProfile;
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.imsphone.ImsPhoneCall;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -51,6 +54,8 @@
 
     private DefaultPhoneNotifier mDefaultPhoneNotifierUT;
 
+    private FeatureFlags mFeatureFlags;
+
     // Mocked classes
     SignalStrength mSignalStrength;
     CellInfo mCellInfo;
@@ -66,13 +71,14 @@
         super.setUp(getClass().getSimpleName());
         mSignalStrength = mock(SignalStrength.class);
         mCellInfo = mock(CellInfo.class);
+        mFeatureFlags = Mockito.mock(FeatureFlags.class);
         mForeGroundCall = mock(GsmCdmaCall.class);
         mBackGroundCall = mock(GsmCdmaCall.class);
         mRingingCall = mock(GsmCdmaCall.class);
         mImsForeGroundCall = mock(ImsPhoneCall.class);
         mImsBackGroundCall = mock(ImsPhoneCall.class);
         mImsRingingCall = mock(ImsPhoneCall.class);
-        mDefaultPhoneNotifierUT = new DefaultPhoneNotifier(mContext);
+        mDefaultPhoneNotifierUT = new DefaultPhoneNotifier(mContext, mFeatureFlags);
     }
 
     @After
@@ -94,6 +100,22 @@
 
     @Test @SmallTest
     public void testNotifyDataActivity() throws Exception {
+        when(mFeatureFlags.notifyDataActivityChangedWithSlot()).thenReturn(false);
+        //mock data activity state
+        doReturn(TelephonyManager.DATA_ACTIVITY_NONE).when(mPhone).getDataActivityState();
+        mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
+        verify(mTelephonyRegistryManager).notifyDataActivityChanged(eq(0),
+                eq(TelephonyManager.DATA_ACTIVITY_NONE));
+
+        doReturn(1).when(mPhone).getSubId();
+        doReturn(TelephonyManager.DATA_ACTIVITY_IN).when(mPhone).getDataActivityState();
+        mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
+        verify(mTelephonyRegistryManager).notifyDataActivityChanged(eq(1),
+                eq(TelephonyManager.DATA_ACTIVITY_IN));
+    }
+    @Test @SmallTest
+    public void testNotifyDataActivityWithSlot() throws Exception {
+        when(mFeatureFlags.notifyDataActivityChangedWithSlot()).thenReturn(true);
         //mock data activity state
         doReturn(TelephonyManager.DATA_ACTIVITY_NONE).when(mPhone).getDataActivityState();
         doReturn(PHONE_ID).when(mPhone).getPhoneId();
diff --git a/tests/telephonytests/src/com/android/internal/telephony/PhoneConfigurationManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/PhoneConfigurationManagerTest.java
index 700a246..4f2d8db 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/PhoneConfigurationManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/PhoneConfigurationManagerTest.java
@@ -43,6 +43,8 @@
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import com.android.internal.telephony.flags.FeatureFlags;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -62,6 +64,7 @@
 
     private static final int EVENT_MULTI_SIM_CONFIG_CHANGED = 1;
     PhoneConfigurationManager mPcm;
+    private FeatureFlags mFeatureFlags;
 
     @Before
     public void setUp() throws Exception {
@@ -69,6 +72,7 @@
         mHandler = mock(Handler.class);
         mMockCi0 = mock(CommandsInterface.class);
         mMockCi1 = mock(CommandsInterface.class);
+        mFeatureFlags = Mockito.mock(FeatureFlags.class);
         mPhone1 = mock(Phone.class);
         mMi = mock(PhoneConfigurationManager.MockableInterface.class);
         mPhone.mCi = mMockCi0;
@@ -89,7 +93,7 @@
     private void init(int numOfSim) throws Exception {
         doReturn(numOfSim).when(mTelephonyManager).getActiveModemCount();
         replaceInstance(PhoneConfigurationManager.class, "sInstance", null, null);
-        mPcm = PhoneConfigurationManager.init(mContext);
+        mPcm = PhoneConfigurationManager.init(mContext, mFeatureFlags);
         replaceInstance(PhoneConfigurationManager.class, "mMi", mPcm, mMi);
         processAllMessages();
     }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
index 95361b3..5a5e11f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
@@ -1499,7 +1499,7 @@
     }
 
     @Test
-    public void testNotifyDataActivityForSubscriber() {
+    public void testNotifyDataActivityForSubscriberWithSlot() {
         final int subId = 1;
         int[] events = {TelephonyCallback.EVENT_DATA_ACTIVITY_CHANGED};
         doReturn(mMockSubInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt());
@@ -1509,14 +1509,14 @@
         mTelephonyRegistry.listenWithEventList(false, false, subId, mContext.getOpPackageName(),
                 mContext.getAttributionTag(), mTelephonyCallback.callback, events, true);
 
-        mTelephonyRegistry.notifyDataActivityForSubscriber(0/*phoneId*/, subId,
+        mTelephonyRegistry.notifyDataActivityForSubscriberWithSlot(0/*phoneId*/, subId,
                 TelephonyManager.DATA_ACTIVITY_INOUT);
         processAllMessages();
         assertEquals(TelephonyManager.DATA_ACTIVITY_INOUT, mDataActivity);
     }
 
     @Test
-    public void testNotifyDataActivityForSubscriberForInvalidSubId() {
+    public void testNotifyDataActivityForSubscriberWithSlotForInvalidSubId() {
         final int subId = INVALID_SUBSCRIPTION_ID;
         int[] events = {TelephonyCallback.EVENT_DATA_ACTIVITY_CHANGED};
         doReturn(mMockSubInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt());
@@ -1526,7 +1526,7 @@
         mTelephonyRegistry.listenWithEventList(false, false, subId, mContext.getOpPackageName(),
                 mContext.getAttributionTag(), mTelephonyCallback.callback, events, true);
 
-        mTelephonyRegistry.notifyDataActivityForSubscriber(0/*phoneId*/, subId,
+        mTelephonyRegistry.notifyDataActivityForSubscriberWithSlot(0/*phoneId*/, subId,
                 TelephonyManager.DATA_ACTIVITY_OUT);
         processAllMessages();
         assertEquals(TelephonyManager.DATA_ACTIVITY_OUT, mDataActivity);