Settings: Fix WifiSettings FC when rotating screen
Rotating screen will trigger wifisettings re-creation. Force close occurs If receiving wifi picker tracker callback during activity finishing. Bug: 218411211 Test: manual test make RunSettingsRoboTests ROBOTEST_FILTER=WifiSettingsTest Change-Id: I06d251a8a12d3f8785db24ead0abe31c0f34cc9b
This commit is contained in:
@@ -190,6 +190,8 @@ public class WifiSettings extends RestrictedSettingsFragment
|
|||||||
|
|
||||||
// Worker thread used for WifiPickerTracker work
|
// Worker thread used for WifiPickerTracker work
|
||||||
private HandlerThread mWorkerThread;
|
private HandlerThread mWorkerThread;
|
||||||
|
private Handler mMainHandler;
|
||||||
|
private Handler mWorkerHandler;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
WifiPickerTracker mWifiPickerTracker;
|
WifiPickerTracker mWifiPickerTracker;
|
||||||
@@ -290,11 +292,13 @@ public class WifiSettings extends RestrictedSettingsFragment
|
|||||||
return SystemClock.elapsedRealtime();
|
return SystemClock.elapsedRealtime();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mMainHandler = new Handler(Looper.getMainLooper());
|
||||||
|
mWorkerHandler = mWorkerThread.getThreadHandler();
|
||||||
mWifiPickerTracker = FeatureFactory.getFactory(context)
|
mWifiPickerTracker = FeatureFactory.getFactory(context)
|
||||||
.getWifiTrackerLibProvider()
|
.getWifiTrackerLibProvider()
|
||||||
.createWifiPickerTracker(getSettingsLifecycle(), context,
|
.createWifiPickerTracker(getSettingsLifecycle(), context,
|
||||||
new Handler(Looper.getMainLooper()),
|
mMainHandler, mWorkerHandler,
|
||||||
mWorkerThread.getThreadHandler(),
|
|
||||||
elapsedRealtimeClock,
|
elapsedRealtimeClock,
|
||||||
MAX_SCAN_AGE_MILLIS,
|
MAX_SCAN_AGE_MILLIS,
|
||||||
SCAN_INTERVAL_MILLIS,
|
SCAN_INTERVAL_MILLIS,
|
||||||
@@ -366,6 +370,10 @@ public class WifiSettings extends RestrictedSettingsFragment
|
|||||||
if (mWifiEnabler != null) {
|
if (mWifiEnabler != null) {
|
||||||
mWifiEnabler.teardownSwitchController();
|
mWifiEnabler.teardownSwitchController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// remove all msg and callback in main handler and worker handler
|
||||||
|
mMainHandler.removeCallbacksAndMessages(null);
|
||||||
|
mWorkerHandler.removeCallbacksAndMessages(null);
|
||||||
mWorkerThread.quit();
|
mWorkerThread.quit();
|
||||||
|
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
@@ -650,7 +658,7 @@ public class WifiSettings extends RestrictedSettingsFragment
|
|||||||
/** Called when the state of Wifi has changed. */
|
/** Called when the state of Wifi has changed. */
|
||||||
@Override
|
@Override
|
||||||
public void onWifiStateChanged() {
|
public void onWifiStateChanged() {
|
||||||
if (mIsRestricted) {
|
if (mIsRestricted || isFinishingOrDestroyed()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final int wifiState = mWifiPickerTracker.getWifiState();
|
final int wifiState = mWifiPickerTracker.getWifiState();
|
||||||
@@ -688,6 +696,10 @@ public class WifiSettings extends RestrictedSettingsFragment
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onWifiEntriesChanged() {
|
public void onWifiEntriesChanged() {
|
||||||
|
if (isFinishingOrDestroyed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (mIsWifiEntryListStale) {
|
if (mIsWifiEntryListStale) {
|
||||||
mIsWifiEntryListStale = false;
|
mIsWifiEntryListStale = false;
|
||||||
updateWifiEntryPreferences();
|
updateWifiEntryPreferences();
|
||||||
|
@@ -277,6 +277,11 @@ public class WifiSettingsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onWifiEntriesChanged_shouldChangeNextButtonState() {
|
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();
|
mWifiSettings.onWifiEntriesChanged();
|
||||||
|
|
||||||
verify(mWifiSettings).changeNextButtonState(anyBoolean());
|
verify(mWifiSettings).changeNextButtonState(anyBoolean());
|
||||||
|
Reference in New Issue
Block a user