Loading src/java/com/android/internal/telephony/NetworkTypeController.java +27 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ public class NetworkTypeController extends StateMachine { private boolean mIsPhysicalChannelConfigOn; private boolean mIsPrimaryTimerActive; private boolean mIsSecondaryTimerActive; private boolean mIsTimerResetEnabledForLegacyStateRRCIdle; private String mPrimaryTimerState; private String mSecondaryTimerState; private String mPreviousState; Loading Loading @@ -211,6 +212,9 @@ public class NetworkTypeController extends StateMachine { CarrierConfigManager.KEY_5G_ICON_DISPLAY_SECONDARY_GRACE_PERIOD_STRING); mLteEnhancedPattern = CarrierConfigManager.getDefaultConfig().getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); mIsTimerResetEnabledForLegacyStateRRCIdle = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_NR_TIMERS_RESET_IF_NON_ENDC_AND_RRC_IDLE_BOOL); CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading @@ -236,6 +240,8 @@ public class NetworkTypeController extends StateMachine { mLteEnhancedPattern = b.getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); } mIsTimerResetEnabledForLegacyStateRRCIdle = b.getBoolean( CarrierConfigManager.KEY_NR_TIMERS_RESET_IF_NON_ENDC_AND_RRC_IDLE_BOOL); } } createTimerRules(nrIconConfiguration, overrideTimerRule, overrideSecondaryTimerRule); Loading Loading @@ -538,6 +544,10 @@ public class NetworkTypeController extends StateMachine { transitionWithTimerTo(isPhysicalLinkActive() ? mLteConnectedState : mIdleState); } else { if (!isLte(rat)) { // Rat is 3G or 2G, and it doesn't need NR timer. resetAllTimers(); } updateOverrideNetworkType(); } mIsNrRestricted = isNrRestricted(); Loading @@ -556,6 +566,14 @@ public class NetworkTypeController extends StateMachine { case EVENT_NR_FREQUENCY_CHANGED: // ignored break; case EVENT_PHYSICAL_LINK_STATE_CHANGED: AsyncResult ar = (AsyncResult) msg.obj; mPhysicalLinkState = (int) ar.result; if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) { resetAllTimers(); updateOverrideNetworkType(); } break; default: return NOT_HANDLED; } Loading Loading @@ -870,9 +888,18 @@ public class NetworkTypeController extends StateMachine { if (currentState.equals(STATE_CONNECTED_MMWAVE)) { resetAllTimers(); } int rat = mPhone.getServiceState().getDataNetworkType(); if (!isLte(rat) && rat != TelephonyManager.NETWORK_TYPE_NR) { // Rat is 3G or 2G, and it doesn't need NR timer. resetAllTimers(); } } private void resetAllTimers() { if (DBG) { log("Remove all timers"); } removeMessages(EVENT_PRIMARY_TIMER_EXPIRED); removeMessages(EVENT_SECONDARY_TIMER_EXPIRED); mIsPrimaryTimerActive = false; Loading tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerExpire() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -378,6 +379,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerReset() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -412,6 +414,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerExpireMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -443,6 +446,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerResetMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -478,6 +482,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerExpire() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -518,6 +523,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerReset() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -563,6 +569,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerExpireMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -604,6 +611,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerResetMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -647,4 +655,39 @@ public class NetworkTypeControllerTest extends TelephonyTest { assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE, mNetworkTypeController.getOverrideNetworkType()); } @Test public void testNrTimerResetIn3g() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_SECONDARY_GRACE_PERIOD_STRING, "connected_mmwave,any,30"); broadcastCarrierConfigs(); assertEquals("connected_mmwave", getCurrentState().getName()); assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE, mNetworkTypeController.getOverrideNetworkType()); // should trigger 10 second primary timer doReturn(ServiceState.FREQUENCY_RANGE_LOW).when(mServiceState).getNrFrequencyRange(); mNetworkTypeController.sendMessage(EVENT_NR_FREQUENCY_CHANGED); processAllMessages(); assertEquals("connected", getCurrentState().getName()); assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE, mNetworkTypeController.getOverrideNetworkType()); // rat is UMTS, should stop timer doReturn(TelephonyManager.NETWORK_TYPE_UMTS).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(mServiceState).getNrState(); mNetworkTypeController.sendMessage(EVENT_DATA_RAT_CHANGED); processAllMessages(); assertEquals("legacy", getCurrentState().getName()); assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE, mNetworkTypeController.getOverrideNetworkType()); } } Loading
src/java/com/android/internal/telephony/NetworkTypeController.java +27 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ public class NetworkTypeController extends StateMachine { private boolean mIsPhysicalChannelConfigOn; private boolean mIsPrimaryTimerActive; private boolean mIsSecondaryTimerActive; private boolean mIsTimerResetEnabledForLegacyStateRRCIdle; private String mPrimaryTimerState; private String mSecondaryTimerState; private String mPreviousState; Loading Loading @@ -211,6 +212,9 @@ public class NetworkTypeController extends StateMachine { CarrierConfigManager.KEY_5G_ICON_DISPLAY_SECONDARY_GRACE_PERIOD_STRING); mLteEnhancedPattern = CarrierConfigManager.getDefaultConfig().getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); mIsTimerResetEnabledForLegacyStateRRCIdle = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_NR_TIMERS_RESET_IF_NON_ENDC_AND_RRC_IDLE_BOOL); CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading @@ -236,6 +240,8 @@ public class NetworkTypeController extends StateMachine { mLteEnhancedPattern = b.getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); } mIsTimerResetEnabledForLegacyStateRRCIdle = b.getBoolean( CarrierConfigManager.KEY_NR_TIMERS_RESET_IF_NON_ENDC_AND_RRC_IDLE_BOOL); } } createTimerRules(nrIconConfiguration, overrideTimerRule, overrideSecondaryTimerRule); Loading Loading @@ -538,6 +544,10 @@ public class NetworkTypeController extends StateMachine { transitionWithTimerTo(isPhysicalLinkActive() ? mLteConnectedState : mIdleState); } else { if (!isLte(rat)) { // Rat is 3G or 2G, and it doesn't need NR timer. resetAllTimers(); } updateOverrideNetworkType(); } mIsNrRestricted = isNrRestricted(); Loading @@ -556,6 +566,14 @@ public class NetworkTypeController extends StateMachine { case EVENT_NR_FREQUENCY_CHANGED: // ignored break; case EVENT_PHYSICAL_LINK_STATE_CHANGED: AsyncResult ar = (AsyncResult) msg.obj; mPhysicalLinkState = (int) ar.result; if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) { resetAllTimers(); updateOverrideNetworkType(); } break; default: return NOT_HANDLED; } Loading Loading @@ -870,9 +888,18 @@ public class NetworkTypeController extends StateMachine { if (currentState.equals(STATE_CONNECTED_MMWAVE)) { resetAllTimers(); } int rat = mPhone.getServiceState().getDataNetworkType(); if (!isLte(rat) && rat != TelephonyManager.NETWORK_TYPE_NR) { // Rat is 3G or 2G, and it doesn't need NR timer. resetAllTimers(); } } private void resetAllTimers() { if (DBG) { log("Remove all timers"); } removeMessages(EVENT_PRIMARY_TIMER_EXPIRED); removeMessages(EVENT_SECONDARY_TIMER_EXPIRED); mIsPrimaryTimerActive = false; Loading
tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerExpire() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -378,6 +379,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerReset() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -412,6 +414,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerExpireMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -443,6 +446,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testPrimaryTimerResetMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -478,6 +482,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerExpire() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -518,6 +523,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerReset() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); Loading Loading @@ -563,6 +569,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerExpireMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -604,6 +611,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { @Test public void testSecondaryTimerResetMmwave() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, Loading Loading @@ -647,4 +655,39 @@ public class NetworkTypeControllerTest extends TelephonyTest { assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE, mNetworkTypeController.getOverrideNetworkType()); } @Test public void testNrTimerResetIn3g() throws Exception { doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING, "connected_mmwave,any,10;connected,any,10;not_restricted_rrc_con,any,10"); mBundle.putString(CarrierConfigManager.KEY_5G_ICON_DISPLAY_SECONDARY_GRACE_PERIOD_STRING, "connected_mmwave,any,30"); broadcastCarrierConfigs(); assertEquals("connected_mmwave", getCurrentState().getName()); assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE, mNetworkTypeController.getOverrideNetworkType()); // should trigger 10 second primary timer doReturn(ServiceState.FREQUENCY_RANGE_LOW).when(mServiceState).getNrFrequencyRange(); mNetworkTypeController.sendMessage(EVENT_NR_FREQUENCY_CHANGED); processAllMessages(); assertEquals("connected", getCurrentState().getName()); assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE, mNetworkTypeController.getOverrideNetworkType()); // rat is UMTS, should stop timer doReturn(TelephonyManager.NETWORK_TYPE_UMTS).when(mServiceState).getDataNetworkType(); doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(mServiceState).getNrState(); mNetworkTypeController.sendMessage(EVENT_DATA_RAT_CHANGED); processAllMessages(); assertEquals("legacy", getCurrentState().getName()); assertEquals(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE, mNetworkTypeController.getOverrideNetworkType()); } }