From 98690197e66e999c94a4a306f1a91a063c102428 Mon Sep 17 00:00:00 2001 From: cosmohsieh Date: Thu, 5 Sep 2019 13:09:37 +0800 Subject: [PATCH] [Network Connection] Call NetworkRequestUserSelectionCallback#reject() if user quit activity without selection Call NetworkRequestUserSelectionCallback#reject() to notify framework that user quit this request without selecting any network. Bug: 138855477 Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi.NetworkRequestErrorDialogFragmentTest Change-Id: I4b06c9772598ab3f9416f32456cd0a65e2d70d68 Merged-In: I4b06c9772598ab3f9416f32456cd0a65e2d70d68 --- .../wifi/NetworkRequestDialogFragment.java | 1 + .../NetworkRequestErrorDialogFragment.java | 26 ++++++++++++++++--- ...NetworkRequestErrorDialogFragmentTest.java | 22 ++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java index eb7d78fd789..4762403f4db 100644 --- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java +++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java @@ -340,6 +340,7 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp // Throws error dialog. final NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment .newInstance(); + fragment.setRejectCallback(mUserSelectionCallback); final Bundle bundle = new Bundle(); bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type); fragment.setArguments(bundle); diff --git a/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java index 261d3131e49..98194743bb6 100644 --- a/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java +++ b/src/com/android/settings/wifi/NetworkRequestErrorDialogFragment.java @@ -20,8 +20,10 @@ import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.DialogInterface; import android.os.Bundle; +import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import com.android.settings.R; @@ -36,6 +38,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(); @@ -49,7 +53,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 @@ -65,10 +69,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) -> startScanningDialog()) - .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(); } @@ -78,9 +84,23 @@ 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 startScanningDialog() { final NetworkRequestDialogFragment fragment = NetworkRequestDialogFragment.newInstance(); fragment.show(getActivity().getSupportFragmentManager(), NetworkRequestErrorDialogFragment.class.getSimpleName()); } + + 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 303f6af6721..c7b1a89d57f 100644 --- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestErrorDialogFragmentTest.java @@ -18,11 +18,13 @@ package com.android.settings.wifi; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; 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; @@ -32,6 +34,8 @@ import androidx.fragment.app.FragmentActivity; import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settings.wifi.NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE; +import com.android.settingslib.wifi.WifiTracker; +import com.android.settingslib.wifi.WifiTrackerFactory; import org.junit.Before; import org.junit.Test; @@ -47,12 +51,17 @@ public class NetworkRequestErrorDialogFragmentTest { private FragmentActivity mActivity; private NetworkRequestErrorDialogFragment mFragment; + private WifiTracker mWifiTracker; @Before public void setUp() { mActivity = Robolectric.setupActivity(FragmentActivity.class); mFragment = spy(NetworkRequestErrorDialogFragment.newInstance()); mFragment.show(mActivity.getSupportFragmentManager(), null); + + // Prevents NPE when calling up NetworkRequestDialogFragment. + mWifiTracker = mock(WifiTracker.class); + WifiTrackerFactory.setTestingWifiTracker(mWifiTracker); } @Test @@ -111,4 +120,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(); + } }