Merge "Don't unregister MobileSignalControllers still used" into lmp-mr1-dev

This commit is contained in:
Jason Monk
2015-01-05 21:09:21 +00:00
committed by Android (Google) Code Review
3 changed files with 97 additions and 7 deletions

View File

@@ -134,7 +134,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
private ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>(); private ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>();
private ArrayList<NetworkSignalChangedCallback> mSignalsChangedCallbacks = private ArrayList<NetworkSignalChangedCallback> mSignalsChangedCallbacks =
new ArrayList<NetworkSignalChangedCallback>(); new ArrayList<NetworkSignalChangedCallback>();
private boolean mListening; @VisibleForTesting
boolean mListening;
// The current user ID. // The current user ID.
private int mCurrentUserId; private int mCurrentUserId;
@@ -474,7 +475,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
int subId = subscriptions.get(i).getSubscriptionId(); int subId = subscriptions.get(i).getSubscriptionId();
// If we have a copy of this controller already reuse it, otherwise make a new one. // If we have a copy of this controller already reuse it, otherwise make a new one.
if (cachedControllers.containsKey(subId)) { if (cachedControllers.containsKey(subId)) {
mMobileSignalControllers.put(subId, cachedControllers.get(subId)); mMobileSignalControllers.put(subId, cachedControllers.remove(subId));
} else { } else {
MobileSignalController controller = new MobileSignalController(mContext, mConfig, MobileSignalController controller = new MobileSignalController(mContext, mConfig,
mHasMobileDataFeature, mPhone, mSignalsChangedCallbacks, mSignalClusters, mHasMobileDataFeature, mPhone, mSignalsChangedCallbacks, mSignalClusters,
@@ -502,7 +503,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
updateAirplaneMode(true /* force */); updateAirplaneMode(true /* force */);
} }
private boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) { @VisibleForTesting
boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) {
if (allSubscriptions.size() != mMobileSignalControllers.size()) { if (allSubscriptions.size() != mMobileSignalControllers.size()) {
return false; return false;
} }
@@ -992,8 +994,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
} }
// TODO: Move to its own file. // TODO: Move to its own file.
static class MobileSignalController extends SignalController<MobileSignalController.MobileState, public static class MobileSignalController extends SignalController<
MobileSignalController.MobileIconGroup> { MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> {
private final TelephonyManager mPhone; private final TelephonyManager mPhone;
private final String mNetworkNameDefault; private final String mNetworkNameDefault;
private final String mNetworkNameSeparator; private final String mNetworkNameSeparator;

View File

@@ -18,6 +18,7 @@
package="com.android.systemui.tests"> package="com.android.systemui.tests">
<uses-permission android:name="android.permission.INJECT_EVENTS" /> <uses-permission android:name="android.permission.INJECT_EVENTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application> <application>
<uses-library android:name="android.test.runner" /> <uses-library android:name="android.test.runner" />

View File

@@ -2,14 +2,21 @@ package com.android.systemui.statusbar.policy;
import static org.mockito.Mockito.mock; 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.net.ConnectivityManager;
import android.telephony.ServiceState; import android.telephony.ServiceState;
import android.telephony.SignalStrength; import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.statusbar.policy.NetworkControllerImpl.MobileSignalController;
import org.mockito.Mockito;
public class NetworkControllerSignalTest extends NetworkControllerBaseTest { public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
@@ -145,6 +152,86 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
//verifyLastMobileDataIndicators(true, R.drawable.stat_sys_signal_null, 0 /* No 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() { private void setCdma() {
setIsGsm(false); setIsGsm(false);
updateDataConnectionState(TelephonyManager.DATA_CONNECTED, updateDataConnectionState(TelephonyManager.DATA_CONNECTED,