Merge "Don't unregister MobileSignalControllers still used" into lmp-mr1-dev
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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" />
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user