Merge "Settings: Fix NPE FC when access saved wifi p2p device after screen rotation"
diff --git a/src/com/android/settings/network/InternetResetHelper.java b/src/com/android/settings/network/InternetResetHelper.java
index d6c5476..253cf56 100644
--- a/src/com/android/settings/network/InternetResetHelper.java
+++ b/src/com/android/settings/network/InternetResetHelper.java
@@ -204,7 +204,7 @@
protected void resumePreferences() {
if (mIsRecoveryReady && mMobileNetworkController != null) {
Log.d(TAG, "Resume the Mobile Network controller");
- mMobileNetworkController.hidePreference(false /* hide */, false /* immediately */);
+ mMobileNetworkController.hidePreference(false /* hide */, true /* immediately */);
}
if (mIsWifiReady && mWifiTogglePreferences != null) {
Log.d(TAG, "Resume the Wi-Fi preferences");
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index f0ae90e..7f41f36 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -190,6 +190,8 @@
// Worker thread used for WifiPickerTracker work
private HandlerThread mWorkerThread;
+ private Handler mMainHandler;
+ private Handler mWorkerHandler;
@VisibleForTesting
WifiPickerTracker mWifiPickerTracker;
@@ -290,11 +292,13 @@
return SystemClock.elapsedRealtime();
}
};
+
+ mMainHandler = new Handler(Looper.getMainLooper());
+ mWorkerHandler = mWorkerThread.getThreadHandler();
mWifiPickerTracker = FeatureFactory.getFactory(context)
.getWifiTrackerLibProvider()
.createWifiPickerTracker(getSettingsLifecycle(), context,
- new Handler(Looper.getMainLooper()),
- mWorkerThread.getThreadHandler(),
+ mMainHandler, mWorkerHandler,
elapsedRealtimeClock,
MAX_SCAN_AGE_MILLIS,
SCAN_INTERVAL_MILLIS,
@@ -366,6 +370,10 @@
if (mWifiEnabler != null) {
mWifiEnabler.teardownSwitchController();
}
+
+ // remove all msg and callback in main handler and worker handler
+ mMainHandler.removeCallbacksAndMessages(null);
+ mWorkerHandler.removeCallbacksAndMessages(null);
mWorkerThread.quit();
super.onDestroyView();
@@ -650,7 +658,7 @@
/** Called when the state of Wifi has changed. */
@Override
public void onWifiStateChanged() {
- if (mIsRestricted) {
+ if (mIsRestricted || isFinishingOrDestroyed()) {
return;
}
final int wifiState = mWifiPickerTracker.getWifiState();
@@ -688,6 +696,10 @@
@Override
public void onWifiEntriesChanged() {
+ if (isFinishingOrDestroyed()) {
+ return;
+ }
+
if (mIsWifiEntryListStale) {
mIsWifiEntryListStale = false;
updateWifiEntryPreferences();
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
index 5f2f564..abed447 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
@@ -277,6 +277,11 @@
@Test
public void onWifiEntriesChanged_shouldChangeNextButtonState() {
+ final FragmentActivity activity = mock(FragmentActivity.class);
+ doReturn(false).when(activity).isFinishing();
+ doReturn(false).when(activity).isDestroyed();
+ doReturn(activity).when(mWifiSettings).getActivity();
+
mWifiSettings.onWifiEntriesChanged();
verify(mWifiSettings).changeNextButtonState(anyBoolean());
diff --git a/tests/unit/src/com/android/settings/network/InternetResetHelperTest.java b/tests/unit/src/com/android/settings/network/InternetResetHelperTest.java
index 00ca8e1..3dbaa91 100644
--- a/tests/unit/src/com/android/settings/network/InternetResetHelperTest.java
+++ b/tests/unit/src/com/android/settings/network/InternetResetHelperTest.java
@@ -217,7 +217,7 @@
// Show resetting preference
assertThat(mResettingPreference.isVisible()).isTrue();
// Show Mobile Network controller
- verify(mMobileNetworkController).hidePreference(false /* hide */, false /* immediately*/);
+ verify(mMobileNetworkController).hidePreference(false /* hide */, true /* immediately*/);
// Hide Wi-Fi preferences
assertThat(mWifiTogglePreferences.isVisible()).isFalse();
assertThat(mConnectedWifiEntryPreferences.isVisible()).isFalse();
@@ -240,7 +240,7 @@
assertThat(mWifiEntryPreferences.isVisible()).isTrue();
// Hide Mobile Network controller
verify(mMobileNetworkController, never())
- .hidePreference(false /* hide */, false /* immediately*/);
+ .hidePreference(false /* hide */, true /* immediately*/);
}
@Test
@@ -251,7 +251,7 @@
mInternetResetHelper.resumePreferences();
// Show subsystem preferences
- verify(mMobileNetworkController).hidePreference(false, false);
+ verify(mMobileNetworkController).hidePreference(false, true);
assertThat(mWifiTogglePreferences.isVisible()).isTrue();
assertThat(mConnectedWifiEntryPreferences.isVisible()).isTrue();
assertThat(mWifiEntryPreferences.isVisible()).isTrue();