Fix crash in NetworkControllerImpl

Happened due to multiple entry points of configuration changes
running on different threads.

 - Remove the unneeded listening for configuration broadcasts
 - Make the handling for configuration changes happen on the right
   thread
 - Happen to fix the tests :)

Bug: 22560859
Change-Id: I194b4fa233f0a8a33c4ac3252ddec70a93822337
This commit is contained in:
Jason Monk
2015-07-20 09:45:54 -04:00
parent 29cf9aea54
commit 1c040dbee6
2 changed files with 12 additions and 5 deletions

View File

@@ -2910,7 +2910,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
updateRowStates();
mIconController.updateResources();
mScreenPinningRequest.onConfigurationChanged();
mNetworkController.handleConfigurationChanged();
mNetworkController.onConfigurationChanged();
}
@Override

View File

@@ -197,7 +197,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
mContext.registerReceiver(this, filter, null, mReceiverHandler);
mListening = true;
@@ -339,8 +338,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) ||
action.equals(ConnectivityManager.INET_CONDITION_ACTION)) {
updateConnectivity();
} else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
handleConfigurationChanged();
} else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
refreshLocale();
updateAirplaneMode(false);
@@ -373,8 +370,18 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
}
public void handleConfigurationChanged() {
public void onConfigurationChanged() {
mConfig = Config.readConfig(mContext);
mReceiverHandler.post(new Runnable() {
@Override
public void run() {
handleConfigurationChanged();
}
});
}
@VisibleForTesting
void handleConfigurationChanged() {
for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) {
mobileSignalController.setConfiguration(mConfig);
}