[Wi-Fi] Fix exception when WifiTracker2 callbacks to Wi-Fi Settings

When WifiTracker2 callbacks to Wi-Fi Settings, should check if the
activity is finishing at first.

Bug: 151677440
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=WifiSettings2Test
Change-Id: I95737eae3f67e6471c75ba845b57af2d721d5d37
This commit is contained in:
Arc Wang
2020-03-20 13:34:33 +08:00
parent 750ff89856
commit 04854f8234
4 changed files with 40 additions and 10 deletions

View File

@@ -699,4 +699,9 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
}
getActivity().setResult(result);
}
protected boolean isFinishingOrDestroyed() {
final Activity activity = getActivity();
return activity == null || activity.isFinishing() || activity.isDestroyed();
}
}

View File

@@ -674,11 +674,17 @@ public class WifiSettings2 extends RestrictedSettingsFragment
@Override
public void onNumSavedNetworksChanged() {
if (isFinishingOrDestroyed()) {
return;
}
setAdditionalSettingsSummaries();
}
@Override
public void onNumSavedSubscriptionsChanged() {
if (isFinishingOrDestroyed()) {
return;
}
setAdditionalSettingsSummaries();
}
@@ -993,12 +999,10 @@ public class WifiSettings2 extends RestrictedSettingsFragment
@Override
public void onFailure(int reason) {
final Activity activity = getActivity();
if (isFisishingOrDestroyed(activity)) {
if (isFinishingOrDestroyed()) {
return;
}
Toast.makeText(activity, R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT)
Toast.makeText(getContext(), R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT)
.show();
}
};
@@ -1020,8 +1024,7 @@ public class WifiSettings2 extends RestrictedSettingsFragment
@Override
public void onConnectResult(@ConnectStatus int status) {
final Activity activity = getActivity();
if (isFisishingOrDestroyed(activity)) {
if (isFinishingOrDestroyed()) {
return;
}
@@ -1041,10 +1044,6 @@ public class WifiSettings2 extends RestrictedSettingsFragment
}
}
private boolean isFisishingOrDestroyed(Activity activity) {
return activity == null || activity.isFinishing() || activity.isDestroyed();
}
private void launchConfigNewNetworkFragment(WifiEntry wifiEntry) {
final Bundle bundle = new Bundle();
bundle.putString(WifiNetworkDetailsFragment2.KEY_CHOSEN_WIFIENTRY_KEY,

View File

@@ -153,6 +153,9 @@ public class SavedAccessPointsWifiSettings2 extends DashboardFragment
@Override
public void onSavedWifiEntriesChanged() {
if (isFinishingOrDestroyed()) {
return;
}
final PreferenceScreen screen = getPreferenceScreen();
use(SavedAccessPointsPreferenceController2.class)
.displayPreference(screen, mSavedNetworkTracker.getSavedWifiEntries());
@@ -160,6 +163,9 @@ public class SavedAccessPointsWifiSettings2 extends DashboardFragment
@Override
public void onSubscriptionWifiEntriesChanged() {
if (isFinishingOrDestroyed()) {
return;
}
final PreferenceScreen screen = getPreferenceScreen();
use(SubscribedAccessPointsPreferenceController2.class)
.displayPreference(screen, mSavedNetworkTracker.getSubscriptionWifiEntries());

View File

@@ -280,4 +280,24 @@ public class WifiSettings2Test {
verify(mWifiSettings2, times(1)).startActivityForResult(any(), anyInt());
}
@Test
public void onNumSavedNetworksChanged_isFinishing_ShouldNotCrash() {
final FragmentActivity activity = mock(FragmentActivity.class);
when(activity.isFinishing()).thenReturn(true);
when(mWifiSettings2.getActivity()).thenReturn(activity);
when(mWifiSettings2.getContext()).thenReturn(null);
mWifiSettings2.onNumSavedNetworksChanged();
}
@Test
public void onNumSavedSubscriptionsChanged_isFinishing_ShouldNotCrash() {
final FragmentActivity activity = mock(FragmentActivity.class);
when(activity.isFinishing()).thenReturn(true);
when(mWifiSettings2.getActivity()).thenReturn(activity);
when(mWifiSettings2.getContext()).thenReturn(null);
mWifiSettings2.onNumSavedSubscriptionsChanged();
}
}