From 1c040dbee62676226349b67d528b3d384c5ecfad Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Mon, 20 Jul 2015 09:45:54 -0400 Subject: [PATCH] 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 --- .../systemui/statusbar/phone/PhoneStatusBar.java | 2 +- .../statusbar/policy/NetworkControllerImpl.java | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index f0927a8403025..162a4f4f6368e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -2910,7 +2910,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateRowStates(); mIconController.updateResources(); mScreenPinningRequest.onConfigurationChanged(); - mNetworkController.handleConfigurationChanged(); + mNetworkController.onConfigurationChanged(); } @Override 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 81f2d532de358..7cd94d71f3f39 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -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); }