diff --git a/src/com/android/settings/wifi/NetworkRequestDialogActivity.java b/src/com/android/settings/wifi/NetworkRequestDialogActivity.java index d917b03024f..1f2b2216449 100644 --- a/src/com/android/settings/wifi/NetworkRequestDialogActivity.java +++ b/src/com/android/settings/wifi/NetworkRequestDialogActivity.java @@ -29,7 +29,6 @@ import android.os.Handler; import android.os.Message; import android.widget.Toast; import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentActivity; import com.android.settings.R; import com.android.settings.wifi.NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE; @@ -152,7 +151,9 @@ public class NetworkRequestDialogActivity extends FragmentActivity implements dismissDialogs(); // Throws error dialog. - final DialogFragment dialogFragment = NetworkRequestErrorDialogFragment.newInstance(); + final NetworkRequestErrorDialogFragment dialogFragment = + NetworkRequestErrorDialogFragment.newInstance(); + dialogFragment.setRejectCallback(mUserSelectionCallback); final Bundle bundle = new Bundle(); bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type); dialogFragment.setArguments(bundle); diff --git a/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java index 731456ac5c6..57e1bcaa681 100644 --- a/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java +++ b/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java @@ -19,8 +19,11 @@ package com.android.settings.wifi; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.DialogInterface; +import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback; import android.os.Bundle; + import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; @@ -34,6 +37,8 @@ public class NetworkRequestErrorDialogFragment extends InstrumentedDialogFragmen public static final String DIALOG_TYPE = "DIALOG_ERROR_TYPE"; public enum ERROR_DIALOG_TYPE {TIME_OUT, ABORT} + @Nullable + private NetworkRequestUserSelectionCallback mRejectCallback; public static NetworkRequestErrorDialogFragment newInstance() { return new NetworkRequestErrorDialogFragment(); @@ -47,7 +52,7 @@ public class NetworkRequestErrorDialogFragment extends InstrumentedDialogFragmen public void onCancel(@NonNull DialogInterface dialog) { super.onCancel(dialog); // Wants to finish the activity when user clicks back key or outside of the dialog. - getActivity().finish(); + rejectNetworkRequestAndFinish(); } @Override @@ -63,10 +68,12 @@ public class NetworkRequestErrorDialogFragment extends InstrumentedDialogFragmen builder.setMessage(R.string.network_connection_timeout_dialog_message) .setPositiveButton(R.string.network_connection_timeout_dialog_ok, (dialog, which) -> onRescanClick()) - .setNegativeButton(R.string.cancel, (dialog, which) -> getActivity().finish()); + .setNegativeButton(R.string.cancel, + (dialog, which) -> rejectNetworkRequestAndFinish()); } else { builder.setMessage(R.string.network_connection_errorstate_dialog_message) - .setPositiveButton(R.string.okay, (dialog, which) -> getActivity().finish()); + .setPositiveButton(R.string.okay, + (dialog, which) -> rejectNetworkRequestAndFinish()); } return builder.create(); } @@ -76,10 +83,24 @@ public class NetworkRequestErrorDialogFragment extends InstrumentedDialogFragmen return SettingsEnums.WIFI_SCANNING_NEEDED_DIALOG; } + // Sets the callback for fragment to reject this request. + public void setRejectCallback(NetworkRequestUserSelectionCallback rejectCallback) { + mRejectCallback = rejectCallback; + } + protected void onRescanClick() { if (getActivity() != null) { dismiss(); ((NetworkRequestDialogActivity)getActivity()).onClickRescanButton(); } } + + private void rejectNetworkRequestAndFinish() { + if (getActivity() != null) { + if (mRejectCallback != null) { + mRejectCallback.reject(); + } + getActivity().finish(); + } + } } diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java index fb15371dd99..c4bdda8f0d7 100644 --- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java @@ -23,6 +23,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.internal.verification.VerificationModeFactory.times; import android.content.DialogInterface; +import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback; import android.os.Bundle; import android.widget.Button; import androidx.appcompat.app.AlertDialog; @@ -112,4 +113,17 @@ public class NetworkRequestErrorDialogFragmentTest { negativeButton.performClick(); assertThat(alertDialog.isShowing()).isFalse(); } + + @Test + public void clickNegativeButton_shouldCallReject() { + final NetworkRequestUserSelectionCallback rejectCallback = + mock(NetworkRequestUserSelectionCallback.class); + mFragment.setRejectCallback(rejectCallback); + + final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog(); + final Button negativeButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); + negativeButton.performClick(); + + verify(rejectCallback, times(1)).reject(); + } }