Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +7 −5 Original line number Diff line number Diff line Loading @@ -134,7 +134,8 @@ public class NetworkControllerImpl extends BroadcastReceiver private ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>(); private ArrayList<NetworkSignalChangedCallback> mSignalsChangedCallbacks = new ArrayList<NetworkSignalChangedCallback>(); private boolean mListening; @VisibleForTesting boolean mListening; // The current user ID. private int mCurrentUserId; Loading Loading @@ -474,7 +475,7 @@ public class NetworkControllerImpl extends BroadcastReceiver int subId = subscriptions.get(i).getSubscriptionId(); // If we have a copy of this controller already reuse it, otherwise make a new one. if (cachedControllers.containsKey(subId)) { mMobileSignalControllers.put(subId, cachedControllers.get(subId)); mMobileSignalControllers.put(subId, cachedControllers.remove(subId)); } else { MobileSignalController controller = new MobileSignalController(mContext, mConfig, mHasMobileDataFeature, mPhone, mSignalsChangedCallbacks, mSignalClusters, Loading Loading @@ -502,7 +503,8 @@ public class NetworkControllerImpl extends BroadcastReceiver updateAirplaneMode(true /* force */); } private boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) { @VisibleForTesting boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) { if (allSubscriptions.size() != mMobileSignalControllers.size()) { return false; } Loading Loading @@ -992,8 +994,8 @@ public class NetworkControllerImpl extends BroadcastReceiver } // TODO: Move to its own file. static class MobileSignalController extends SignalController<MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> { public static class MobileSignalController extends SignalController< MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> { private final TelephonyManager mPhone; private final String mNetworkNameDefault; private final String mNetworkNameSeparator; Loading packages/SystemUI/tests/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package="com.android.systemui.tests"> <uses-permission android:name="android.permission.INJECT_EVENTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application> <uses-library android:name="android.test.runner" /> Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java +89 −2 Original line number Diff line number Diff line Loading @@ -2,14 +2,21 @@ 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 org.mockito.Mockito; import com.android.systemui.statusbar.policy.NetworkControllerImpl.MobileSignalController; public class NetworkControllerSignalTest extends NetworkControllerBaseTest { Loading Loading @@ -145,6 +152,86 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { //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, Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +7 −5 Original line number Diff line number Diff line Loading @@ -134,7 +134,8 @@ public class NetworkControllerImpl extends BroadcastReceiver private ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>(); private ArrayList<NetworkSignalChangedCallback> mSignalsChangedCallbacks = new ArrayList<NetworkSignalChangedCallback>(); private boolean mListening; @VisibleForTesting boolean mListening; // The current user ID. private int mCurrentUserId; Loading Loading @@ -474,7 +475,7 @@ public class NetworkControllerImpl extends BroadcastReceiver int subId = subscriptions.get(i).getSubscriptionId(); // If we have a copy of this controller already reuse it, otherwise make a new one. if (cachedControllers.containsKey(subId)) { mMobileSignalControllers.put(subId, cachedControllers.get(subId)); mMobileSignalControllers.put(subId, cachedControllers.remove(subId)); } else { MobileSignalController controller = new MobileSignalController(mContext, mConfig, mHasMobileDataFeature, mPhone, mSignalsChangedCallbacks, mSignalClusters, Loading Loading @@ -502,7 +503,8 @@ public class NetworkControllerImpl extends BroadcastReceiver updateAirplaneMode(true /* force */); } private boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) { @VisibleForTesting boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) { if (allSubscriptions.size() != mMobileSignalControllers.size()) { return false; } Loading Loading @@ -992,8 +994,8 @@ public class NetworkControllerImpl extends BroadcastReceiver } // TODO: Move to its own file. static class MobileSignalController extends SignalController<MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> { public static class MobileSignalController extends SignalController< MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> { private final TelephonyManager mPhone; private final String mNetworkNameDefault; private final String mNetworkNameSeparator; Loading
packages/SystemUI/tests/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package="com.android.systemui.tests"> <uses-permission android:name="android.permission.INJECT_EVENTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application> <uses-library android:name="android.test.runner" /> Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java +89 −2 Original line number Diff line number Diff line Loading @@ -2,14 +2,21 @@ 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 org.mockito.Mockito; import com.android.systemui.statusbar.policy.NetworkControllerImpl.MobileSignalController; public class NetworkControllerSignalTest extends NetworkControllerBaseTest { Loading Loading @@ -145,6 +152,86 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { //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, Loading