Fix ConnectivityManager.requestNetwork crash issue when try again

- When the user requests "try again", the Network-Request-Dialog will be
  recreated. If the Wi-Fi framework sends the callback result at this
  time, the Network-Request-Dialog may not be ready at the moment,
  causing the NPE to crash.

- Add NPE checks to avoid crash issues.

Bug: 220679437
Test: manual test
make RunSettingsRoboTests \
  ROBOTEST_FILTER=NetworkRequestDialogActivityTest

Change-Id: I8e48a29649e72d9f8c67c4ac24f0eb27ba600dae
This commit is contained in:
Weng Su
2022-03-23 02:09:19 +08:00
parent b39ab3e1c4
commit 98d30c880d
2 changed files with 53 additions and 35 deletions

View File

@@ -58,12 +58,17 @@ public class NetworkRequestDialogActivity extends FragmentActivity implements
final static String EXTRA_IS_SPECIFIED_SSID =
"com.android.settings.wifi.extra.REQUEST_IS_FOR_SINGLE_NETWORK";
@VisibleForTesting NetworkRequestDialogBaseFragment mDialogFragment;
@VisibleForTesting
NetworkRequestDialogBaseFragment mDialogFragment;
@VisibleForTesting
boolean mIsSpecifiedSsid;
@VisibleForTesting
boolean mShowingErrorDialog;
@VisibleForTesting
ProgressDialog mProgressDialog;
private NetworkRequestUserSelectionCallback mUserSelectionCallback;
private boolean mIsSpecifiedSsid;
private boolean mShowingErrorDialog;
private WifiConfiguration mMatchedConfig;
@VisibleForTesting ProgressDialog mProgressDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -103,7 +108,8 @@ public class NetworkRequestDialogActivity extends FragmentActivity implements
mDialogFragment.show(getSupportFragmentManager(), TAG);
}
private void dismissDialogs() {
@VisibleForTesting
void dismissDialogs() {
if (mDialogFragment != null) {
mDialogFragment.dismiss();
mDialogFragment = null;
@@ -174,7 +180,9 @@ public class NetworkRequestDialogActivity extends FragmentActivity implements
return;
}
mDialogFragment.onUserSelectionCallbackRegistration(userSelectionCallback);
if (mDialogFragment != null) {
mDialogFragment.onUserSelectionCallbackRegistration(userSelectionCallback);
}
}
@Override
@@ -201,7 +209,9 @@ public class NetworkRequestDialogActivity extends FragmentActivity implements
return;
}
mDialogFragment.onMatch(scanResults);
if (mDialogFragment != null) {
mDialogFragment.onMatch(scanResults);
}
}
@Override