Loading src/java/com/android/internal/telephony/NetworkTypeController.java +27 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,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 @@ -213,6 +214,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 @@ -238,6 +242,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 @@ -540,6 +546,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 @@ -558,6 +568,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 @@ -872,9 +890,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 @@ -348,6 +348,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 @@ -377,6 +378,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 @@ -411,6 +413,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 @@ -442,6 +445,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 @@ -477,6 +481,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 @@ -517,6 +522,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 @@ -562,6 +568,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 @@ -603,6 +610,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 @@ -646,4 +654,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 @@ -135,6 +135,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 @@ -213,6 +214,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 @@ -238,6 +242,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 @@ -540,6 +546,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 @@ -558,6 +568,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 @@ -872,9 +890,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 @@ -348,6 +348,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 @@ -377,6 +378,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 @@ -411,6 +413,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 @@ -442,6 +445,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 @@ -477,6 +481,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 @@ -517,6 +522,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 @@ -562,6 +568,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 @@ -603,6 +610,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 @@ -646,4 +654,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()); } }