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);