Merge "Don't override dialog icon drawable unless valid resource ID was set" into lmp-mr1-dev
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index d80ad6a..523f970 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2565,7 +2565,7 @@
if (getVisibility() == VISIBLE) {
selector.setVisible(true, false);
}
- selector.setState(getDrawableState());
+ updateSelectorState();
}
if (manageHotspot) {
selector.setHotspot(x, y);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java
index 479c982..dc6af6a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java
@@ -125,7 +125,7 @@
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
intent.putExtra(EXTRA_START_CONNECT_SSID, ap.ssid);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- mContext.startActivity(intent);
+ mContext.startActivityAsUser(intent, new UserHandle(mCurrentUser));
return true;
} else {
WifiConfiguration config = new WifiConfiguration();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index 5eebf3c..b289155 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -134,7 +134,8 @@
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;
@@ -474,7 +475,7 @@
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,
@@ -502,7 +503,8 @@
updateAirplaneMode(true /* force */);
}
- private boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) {
+ @VisibleForTesting
+ boolean hasCorrectMobileControllers(List<SubscriptionInfo> allSubscriptions) {
if (allSubscriptions.size() != mMobileSignalControllers.size()) {
return false;
}
@@ -992,8 +994,8 @@
}
// 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;
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index e52806d..c21af24 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -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" />
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
index 27a4052..525dd20 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
@@ -2,14 +2,21 @@
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 {
@@ -145,6 +152,86 @@
//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,