| package com.android.systemui.statusbar.policy; |
| |
| import static org.mockito.Mockito.mock; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.mockito.Mockito; |
| |
| import android.content.Intent; |
| import android.net.ConnectivityManager; |
| import android.telephony.ServiceState; |
| import android.telephony.SignalStrength; |
| import android.telephony.SubscriptionInfo; |
| import android.telephony.TelephonyManager; |
| |
| import com.android.internal.telephony.TelephonyIntents; |
| import com.android.systemui.R; |
| import com.android.systemui.statusbar.policy.NetworkControllerImpl.MobileSignalController; |
| |
| public class NetworkControllerSignalTest extends NetworkControllerBaseTest { |
| |
| public void testNoIconWithoutMobile() { |
| // Turn off mobile network support. |
| Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false); |
| // Create a new NetworkController as this is currently handled in constructor. |
| mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm, |
| mConfig, mock(AccessPointControllerImpl.class), |
| mock(MobileDataControllerImpl.class)); |
| setupNetworkController(); |
| |
| verifyLastMobileDataIndicators(false, 0, 0); |
| } |
| |
| public void testNoSimsIconPresent() { |
| // No Subscriptions. |
| mNetworkController.mMobileSignalControllers.clear(); |
| mNetworkController.updateNoSims(); |
| |
| verifyHasNoSims(true); |
| } |
| |
| public void testNoSimlessIconWithoutMobile() { |
| // Turn off mobile network support. |
| Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false); |
| // Create a new NetworkController as this is currently handled in constructor. |
| mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm, |
| mConfig, mock(AccessPointControllerImpl.class), |
| mock(MobileDataControllerImpl.class)); |
| setupNetworkController(); |
| |
| // No Subscriptions. |
| mNetworkController.mMobileSignalControllers.clear(); |
| mNetworkController.updateNoSims(); |
| |
| verifyHasNoSims(false); |
| } |
| |
| public void testSignalStrength() { |
| for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; |
| testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) { |
| setupDefaultSignal(); |
| setLevel(testStrength); |
| |
| verifyLastMobileDataIndicators(true, |
| TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][testStrength], |
| DEFAULT_ICON); |
| |
| // Verify low inet number indexing. |
| setConnectivity(0, ConnectivityManager.TYPE_MOBILE, true); |
| verifyLastMobileDataIndicators(true, |
| TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[0][testStrength], 0); |
| } |
| } |
| |
| public void testCdmaSignalStrength() { |
| for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; |
| testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) { |
| setupDefaultSignal(); |
| setCdma(); |
| setLevel(testStrength); |
| |
| verifyLastMobileDataIndicators(true, |
| TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][testStrength], |
| TelephonyIcons.DATA_1X[1][0 /* No direction */]); |
| } |
| } |
| |
| public void testSignalRoaming() { |
| for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; |
| testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) { |
| setupDefaultSignal(); |
| setGsmRoaming(true); |
| setLevel(testStrength); |
| |
| verifyLastMobileDataIndicators(true, |
| TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][testStrength], |
| TelephonyIcons.ROAMING_ICON); |
| } |
| } |
| |
| public void testCdmaSignalRoaming() { |
| for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; |
| testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) { |
| setupDefaultSignal(); |
| setCdma(); |
| setCdmaRoaming(true); |
| setLevel(testStrength); |
| |
| verifyLastMobileDataIndicators(true, |
| TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][testStrength], |
| TelephonyIcons.ROAMING_ICON); |
| } |
| } |
| |
| public void testQsSignalStrength() { |
| for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; |
| testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) { |
| setupDefaultSignal(); |
| setLevel(testStrength); |
| |
| verifyLastQsMobileDataIndicators(true, |
| TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][testStrength], |
| DEFAULT_QS_ICON, false, false); |
| } |
| } |
| |
| public void testCdmaQsSignalStrength() { |
| for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; |
| testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) { |
| setupDefaultSignal(); |
| setCdma(); |
| setLevel(testStrength); |
| |
| verifyLastQsMobileDataIndicators(true, |
| TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][testStrength], |
| TelephonyIcons.QS_ICON_1X, false, false); |
| } |
| } |
| |
| public void testNoRoamingWithoutSignal() { |
| setupDefaultSignal(); |
| setCdma(); |
| setCdmaRoaming(true); |
| setVoiceRegState(ServiceState.STATE_OUT_OF_SERVICE); |
| setDataRegState(ServiceState.STATE_OUT_OF_SERVICE); |
| |
| // This exposes the bug in b/18034542, and should be switched to the commented out |
| // verification below (and pass), once the bug is fixed. |
| verifyLastMobileDataIndicators(true, R.drawable.stat_sys_signal_null, |
| TelephonyIcons.ROAMING_ICON); |
| //verifyLastMobileDataIndicators(true, R.drawable.stat_sys_signal_null, 0 /* No Icon */); |
| } |
| |
| // Some tests of actual NetworkController code, just internals not display stuff |
| // TODO: Put this somewhere else, maybe in its own file. |
| public void testHasCorrectMobileControllers() { |
| int[] testSubscriptions = new int[] { 1, 5, 3 }; |
| int notTestSubscription = 0; |
| MobileSignalController mobileSignalController = Mockito.mock(MobileSignalController.class); |
| |
| mNetworkController.mMobileSignalControllers.clear(); |
| List<SubscriptionInfo> subscriptions = new ArrayList<>(); |
| for (int i = 0; i < testSubscriptions.length; i++) { |
| // Force the test controllers into NetworkController. |
| mNetworkController.mMobileSignalControllers.put(testSubscriptions[i], |
| mobileSignalController); |
| |
| // Generate a list of subscriptions we will tell the NetworkController to use. |
| SubscriptionInfo mockSubInfo = Mockito.mock(SubscriptionInfo.class); |
| Mockito.when(mockSubInfo.getSubscriptionId()).thenReturn(testSubscriptions[i]); |
| subscriptions.add(mockSubInfo); |
| } |
| assertTrue(mNetworkController.hasCorrectMobileControllers(subscriptions)); |
| |
| // Add a subscription that the NetworkController doesn't know about. |
| SubscriptionInfo mockSubInfo = Mockito.mock(SubscriptionInfo.class); |
| Mockito.when(mockSubInfo.getSubscriptionId()).thenReturn(notTestSubscription); |
| subscriptions.add(mockSubInfo); |
| assertFalse(mNetworkController.hasCorrectMobileControllers(subscriptions)); |
| } |
| |
| public void testSetCurrentSubscriptions() { |
| // We will not add one controller to make sure it gets created. |
| int indexToSkipController = 0; |
| // We will not add one subscription to make sure it's controller gets removed. |
| int indexToSkipSubscription = 1; |
| |
| int[] testSubscriptions = new int[] { 1, 5, 3 }; |
| MobileSignalController[] mobileSignalControllers = new MobileSignalController[] { |
| Mockito.mock(MobileSignalController.class), |
| Mockito.mock(MobileSignalController.class), |
| Mockito.mock(MobileSignalController.class), |
| }; |
| mNetworkController.mMobileSignalControllers.clear(); |
| List<SubscriptionInfo> subscriptions = new ArrayList<>(); |
| for (int i = 0; i < testSubscriptions.length; i++) { |
| if (i != indexToSkipController) { |
| // Force the test controllers into NetworkController. |
| mNetworkController.mMobileSignalControllers.put(testSubscriptions[i], |
| mobileSignalControllers[i]); |
| } |
| |
| if (i != indexToSkipSubscription) { |
| // Generate a list of subscriptions we will tell the NetworkController to use. |
| SubscriptionInfo mockSubInfo = Mockito.mock(SubscriptionInfo.class); |
| Mockito.when(mockSubInfo.getSubscriptionId()).thenReturn(testSubscriptions[i]); |
| Mockito.when(mockSubInfo.getSimSlotIndex()).thenReturn(testSubscriptions[i]); |
| subscriptions.add(mockSubInfo); |
| } |
| } |
| |
| // We can only test whether unregister gets called if it thinks its in a listening |
| // state. |
| mNetworkController.mListening = true; |
| mNetworkController.setCurrentSubscriptions(subscriptions); |
| |
| for (int i = 0; i < testSubscriptions.length; i++) { |
| if (i == indexToSkipController) { |
| // Make sure a controller was created despite us not adding one. |
| assertTrue(mNetworkController.mMobileSignalControllers.containsKey( |
| testSubscriptions[i])); |
| } else if (i == indexToSkipSubscription) { |
| // Make sure the controller that did exist was removed |
| assertFalse(mNetworkController.mMobileSignalControllers.containsKey( |
| testSubscriptions[i])); |
| } else { |
| // If a MobileSignalController is around it needs to not be unregistered. |
| Mockito.verify(mobileSignalControllers[i], Mockito.never()) |
| .unregisterListener(); |
| } |
| } |
| } |
| |
| private void setCdma() { |
| setIsGsm(false); |
| updateDataConnectionState(TelephonyManager.DATA_CONNECTED, |
| TelephonyManager.NETWORK_TYPE_CDMA); |
| setCdmaRoaming(false); |
| } |
| } |