Loading flags/data.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -63,3 +63,10 @@ flag { bug:"286171724" } flag { name: "notify_data_activity_changed_with_slot" namespace: "telephony" description: "notify data activity changed for slot id" bug: "309896936" } src/java/com/android/internal/telephony/DefaultPhoneNotifier.java +16 −4 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.telephony.ims.ImsCallSession; 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; Loading @@ -55,10 +56,15 @@ public class DefaultPhoneNotifier implements PhoneNotifier { 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 Loading Loading @@ -125,10 +131,16 @@ public class DefaultPhoneNotifier implements PhoneNotifier { @Override public void notifyDataActivity(Phone sender) { int phoneId = sender.getPhoneId(); int subId = sender.getSubId(); if (mFeatureFlags.notifyDataActivityChangedWithSlot()) { int phoneId = sender.getPhoneId(); mTelephonyRegistryMgr.notifyDataActivityChanged(phoneId, subId, sender.getDataActivityState()); } else { mTelephonyRegistryMgr.notifyDataActivityChanged(subId, sender.getDataActivityState()); } } @Override Loading src/java/com/android/internal/telephony/PhoneConfigurationManager.java +12 −4 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.telephony; 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; Loading @@ -37,6 +38,7 @@ import android.text.TextUtils; 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; Loading Loading @@ -75,6 +77,10 @@ public class PhoneConfigurationManager { 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. Loading @@ -88,10 +94,11 @@ public class PhoneConfigurationManager { * 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); } Loading @@ -103,8 +110,9 @@ public class PhoneConfigurationManager { * 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 Loading Loading @@ -360,7 +368,7 @@ public class PhoneConfigurationManager { } private void notifyCapabilityChanged() { PhoneNotifier notifier = new DefaultPhoneNotifier(mContext); PhoneNotifier notifier = new DefaultPhoneNotifier(mContext, mFeatureFlags); notifier.notifyPhoneCapabilityChanged(mStaticCapability); } Loading src/java/com/android/internal/telephony/PhoneFactory.java +2 −2 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ public class PhoneFactory { // 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); Loading Loading @@ -256,7 +256,7 @@ public class PhoneFactory { 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); Loading tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java +23 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static org.mockito.Mockito.doReturn; 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; Loading @@ -34,12 +35,14 @@ import android.telephony.TelephonyManager; 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; Loading @@ -51,6 +54,8 @@ public class DefaultPhoneNotifierTest extends TelephonyTest { private DefaultPhoneNotifier mDefaultPhoneNotifierUT; private FeatureFlags mFeatureFlags; // Mocked classes SignalStrength mSignalStrength; CellInfo mCellInfo; Loading @@ -66,13 +71,14 @@ public class DefaultPhoneNotifierTest extends TelephonyTest { 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 Loading @@ -94,6 +100,22 @@ public class DefaultPhoneNotifierTest extends TelephonyTest { @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(); Loading Loading
flags/data.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -63,3 +63,10 @@ flag { bug:"286171724" } flag { name: "notify_data_activity_changed_with_slot" namespace: "telephony" description: "notify data activity changed for slot id" bug: "309896936" }
src/java/com/android/internal/telephony/DefaultPhoneNotifier.java +16 −4 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.telephony.ims.ImsCallSession; 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; Loading @@ -55,10 +56,15 @@ public class DefaultPhoneNotifier implements PhoneNotifier { 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 Loading Loading @@ -125,10 +131,16 @@ public class DefaultPhoneNotifier implements PhoneNotifier { @Override public void notifyDataActivity(Phone sender) { int phoneId = sender.getPhoneId(); int subId = sender.getSubId(); if (mFeatureFlags.notifyDataActivityChangedWithSlot()) { int phoneId = sender.getPhoneId(); mTelephonyRegistryMgr.notifyDataActivityChanged(phoneId, subId, sender.getDataActivityState()); } else { mTelephonyRegistryMgr.notifyDataActivityChanged(subId, sender.getDataActivityState()); } } @Override Loading
src/java/com/android/internal/telephony/PhoneConfigurationManager.java +12 −4 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.telephony; 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; Loading @@ -37,6 +38,7 @@ import android.text.TextUtils; 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; Loading Loading @@ -75,6 +77,10 @@ public class PhoneConfigurationManager { 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. Loading @@ -88,10 +94,11 @@ public class PhoneConfigurationManager { * 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); } Loading @@ -103,8 +110,9 @@ public class PhoneConfigurationManager { * 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 Loading Loading @@ -360,7 +368,7 @@ public class PhoneConfigurationManager { } private void notifyCapabilityChanged() { PhoneNotifier notifier = new DefaultPhoneNotifier(mContext); PhoneNotifier notifier = new DefaultPhoneNotifier(mContext, mFeatureFlags); notifier.notifyPhoneCapabilityChanged(mStaticCapability); } Loading
src/java/com/android/internal/telephony/PhoneFactory.java +2 −2 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ public class PhoneFactory { // 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); Loading Loading @@ -256,7 +256,7 @@ public class PhoneFactory { 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); Loading
tests/telephonytests/src/com/android/internal/telephony/DefaultPhoneNotifierTest.java +23 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static org.mockito.Mockito.doReturn; 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; Loading @@ -34,12 +35,14 @@ import android.telephony.TelephonyManager; 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; Loading @@ -51,6 +54,8 @@ public class DefaultPhoneNotifierTest extends TelephonyTest { private DefaultPhoneNotifier mDefaultPhoneNotifierUT; private FeatureFlags mFeatureFlags; // Mocked classes SignalStrength mSignalStrength; CellInfo mCellInfo; Loading @@ -66,13 +71,14 @@ public class DefaultPhoneNotifierTest extends TelephonyTest { 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 Loading @@ -94,6 +100,22 @@ public class DefaultPhoneNotifierTest extends TelephonyTest { @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(); Loading