From 3aaabd71242bf8aedb8edb87565943460a79226d Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 12 Dec 2014 11:11:44 -0500 Subject: [PATCH] Handle config changes in NetworkController We need to remap or recalculate icons after a config change, so configs based on mccmnc can update properly. Bug: 18654943 Change-Id: I6a4c1debf9b266d486143b9869abb569bbc31aef --- .../statusbar/policy/NetworkControllerImpl.java | 35 +++++++++++++------- .../policy/NetworkControllerDataTest.java | 38 +++++++++++++++++++--- 2 files changed, 58 insertions(+), 15 deletions(-) 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 6431ab54a2ca..8d6aed747cff 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -21,7 +21,6 @@ import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; - import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -49,6 +48,7 @@ import android.telephony.TelephonyManager; import android.text.TextUtils; import android.text.format.DateFormat; import android.util.Log; +import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.IccCardConstants; @@ -92,7 +92,7 @@ public class NetworkControllerImpl extends BroadcastReceiver private final ConnectivityManager mConnectivityManager; private final SubscriptionManager mSubscriptionManager; private final boolean mHasMobileDataFeature; - private final Config mConfig; + private Config mConfig; // Subcontrollers. @VisibleForTesting @@ -376,8 +376,8 @@ public class NetworkControllerImpl extends BroadcastReceiver updateConnectivity(); refreshCarrierLabel(); } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { - refreshLocale(); - refreshCarrierLabel(); + mConfig = Config.readConfig(mContext); + handleConfigurationChanged(); } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) { refreshLocale(); updateAirplaneMode(false); @@ -411,6 +411,15 @@ public class NetworkControllerImpl extends BroadcastReceiver } } + @VisibleForTesting + void handleConfigurationChanged() { + for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) { + mobileSignalController.setConfiguration(mConfig); + } + refreshLocale(); + refreshCarrierLabel(); + } + private void updateMobileControllers() { if (!mListening) { return; @@ -971,7 +980,6 @@ public class NetworkControllerImpl extends BroadcastReceiver // TODO: Move to its own file. static class MobileSignalController extends SignalController { - private final Config mConfig; private final TelephonyManager mPhone; private final String mNetworkNameDefault; private final String mNetworkNameSeparator; @@ -981,7 +989,7 @@ public class NetworkControllerImpl extends BroadcastReceiver private final SubscriptionInfo mSubscriptionInfo; // @VisibleForDemoMode - Map mNetworkToIconLookup; + final SparseArray mNetworkToIconLookup; // Since some pieces of the phone state are interdependent we store it locally, // this could potentially become part of MobileState for simplification/complication @@ -992,6 +1000,7 @@ public class NetworkControllerImpl extends BroadcastReceiver private ServiceState mServiceState; private SignalStrength mSignalStrength; private MobileIconGroup mDefaultIcons; + private Config mConfig; // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't // need listener lists anymore. @@ -1002,6 +1011,7 @@ public class NetworkControllerImpl extends BroadcastReceiver super("MobileSignalController(" + info.getSubscriptionId() + ")", context, NetworkCapabilities.TRANSPORT_CELLULAR, signalCallbacks, signalClusters, networkController); + mNetworkToIconLookup = new SparseArray<>(); mConfig = config; mPhone = phone; mSubscriptionInfo = info; @@ -1019,6 +1029,12 @@ public class NetworkControllerImpl extends BroadcastReceiver updateDataSim(); } + public void setConfiguration(Config config) { + mConfig = config; + mapIconSets(); + updateTelephony(); + } + /** * Get (the mobile parts of) the carrier string. * @@ -1103,12 +1119,9 @@ public class NetworkControllerImpl extends BroadcastReceiver /** * Produce a mapping of data network types to icon groups for simple and quick use in * updateTelephony. - * - * TODO: See if config can change with locale, this may need to be regenerated on Locale - * change. */ private void mapIconSets() { - mNetworkToIconLookup = new HashMap(); + mNetworkToIconLookup.clear(); mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EVDO_0, TelephonyIcons.THREE_G); mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EVDO_A, TelephonyIcons.THREE_G); @@ -1312,7 +1325,7 @@ public class NetworkControllerImpl extends BroadcastReceiver mCurrentState.level = mSignalStrength.getLevel(); } } - if (mNetworkToIconLookup.containsKey(mDataNetType)) { + if (mNetworkToIconLookup.indexOfKey(mDataNetType) >= 0) { mCurrentState.iconGroup = mNetworkToIconLookup.get(mDataNetType); } else { mCurrentState.iconGroup = mDefaultIcons; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java index e327233c9ae7..3f9312dbd964 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java @@ -1,9 +1,9 @@ package com.android.systemui.statusbar.policy; +import org.mockito.Mockito; + import android.telephony.TelephonyManager; -// WARNING: Many of these tests may fail with config showMin3G. -// TODO: Maybe fix the above. public class NetworkControllerDataTest extends NetworkControllerBaseTest { public void test3gDataIcon() { @@ -57,7 +57,6 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { updateDataConnectionState(TelephonyManager.DATA_CONNECTED, TelephonyManager.NETWORK_TYPE_LTE); - // WARNING: May fail depending on config. verifyDataIndicators(TelephonyIcons.DATA_LTE[1][0 /* No direction */], TelephonyIcons.QS_DATA_LTE[1]); } @@ -67,11 +66,42 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { updateDataConnectionState(TelephonyManager.DATA_CONNECTED, TelephonyManager.NETWORK_TYPE_HSPA); - // WARNING: May fail depending on config. verifyDataIndicators(TelephonyIcons.DATA_H[1][0 /* No direction */], TelephonyIcons.QS_DATA_H[1]); } + public void test4gDataIcon() { + // Switch to showing 4g icon and re-initialize the NetworkController. + mConfig.show4gForLte = true; + mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm, + mConfig, Mockito.mock(AccessPointControllerImpl.class), + Mockito.mock(MobileDataControllerImpl.class)); + setupNetworkController(); + + setupDefaultSignal(); + updateDataConnectionState(TelephonyManager.DATA_CONNECTED, + TelephonyManager.NETWORK_TYPE_LTE); + + verifyDataIndicators(TelephonyIcons.DATA_4G[1][0 /* No direction */], + TelephonyIcons.QS_DATA_4G[1]); + } + + public void test4gDataIconConfigChange() { + setupDefaultSignal(); + updateDataConnectionState(TelephonyManager.DATA_CONNECTED, + TelephonyManager.NETWORK_TYPE_LTE); + + // Switch to showing 4g icon and re-initialize the NetworkController. + mConfig.show4gForLte = true; + // Can't send the broadcast as that would actually read the config from + // the context. Instead we'll just poke at a function that does all of + // the after work. + mNetworkController.handleConfigurationChanged(); + + verifyDataIndicators(TelephonyIcons.DATA_4G[1][0 /* No direction */], + TelephonyIcons.QS_DATA_4G[1]); + } + public void testDataActivity() { setupDefaultSignal(); -- 2.11.0