Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9308663 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Passpointv2] Implement confirm dialog for passpoint forget button"

parents 685b6b4d 9fcfae63
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -10710,4 +10710,7 @@
    <string name="media_output_panel_title">Switch output</string>
    <!-- Summary for represent which device is playing media [CHAR LIMIT=NONE] -->
    <string name="media_output_panel_summary_of_playing_device">Currently playing on <xliff:g id="device_name" example="Bose headphone">%1$s</xliff:g></string>
    <!-- Message for forget passpoint dialog [CHAR LIMIT=none] -->
    <string name="forget_passpoint_dialog_message">Your subscription with this provider may be cancelled. Recurring subscriptions will not be cancelled. For more information, check with your provider.</string>
</resources>
+24 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
@@ -45,7 +46,6 @@ import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;
@@ -61,6 +61,7 @@ import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.development.featureflags.FeatureFlagPersistent;
import com.android.settings.widget.EntityHeaderController;
import com.android.settings.wifi.WifiDialog;
import com.android.settings.wifi.WifiDialog.WifiDialogListener;
@@ -568,6 +569,12 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
            mWifiManager.disableEphemeralNetwork(mWifiInfo.getSSID());
        } else if (mWifiConfig != null) {
            if (mWifiConfig.isPasspoint()) {
                // Post a dialog to confirm if user really want to forget the passpoint network.
                if (FeatureFlagPersistent.isEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2)) {
                    showConfirmForgetDialog();
                    return;
                }

                mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN);
            } else {
                mWifiManager.forget(mWifiConfig.networkId, null /* action listener */);
@@ -578,6 +585,22 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
        mFragment.getActivity().finish();
    }

    @VisibleForTesting
    protected void showConfirmForgetDialog() {
        final AlertDialog dialog = new AlertDialog.Builder(mContext)
                .setPositiveButton(R.string.forget, ((dialog1, which) -> {
                    mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN);
                    mMetricsFeatureProvider.action(
                            mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
                    mFragment.getActivity().finish();
                }))
                .setNegativeButton(R.string.cancel, null /* listener */)
                .setTitle(R.string.wifi_forget_dialog_title)
                .setMessage(R.string.forget_passpoint_dialog_message)
                .create();
        dialog.show();
    }

    /**
     * Show QR code to share the network represented by this preference.
     */
+32 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ import androidx.preference.PreferenceScreen;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.FeatureFlags;
import com.android.settings.development.featureflags.FeatureFlagPersistent;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
import com.android.settings.widget.EntityHeaderController;
@@ -755,6 +757,36 @@ public class WifiDetailPreferenceControllerTest {
                .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
    }

    @Test
    public void forgetNetwork_Passpoint() {
        mockWifiConfig.networkId = 5;
        when(mockWifiConfig.isPasspoint()).thenReturn(true);

        mController.displayPreference(mockScreen);
        mForgetClickListener.getValue().onClick(null);

        verify(mockWifiManager).removePasspointConfiguration(mockWifiConfig.FQDN);
        verify(mockMetricsFeatureProvider)
                .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
    }

    @Test
    public void forgetNetwork_PasspointV2_shouldShowDialog() {
        final WifiDetailPreferenceController spyController = spy(mController);

        mockWifiConfig.networkId = 5;
        when(mockWifiConfig.isPasspoint()).thenReturn(true);
        FeatureFlagPersistent.setEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2, true);

        spyController.displayPreference(mockScreen);
        mForgetClickListener.getValue().onClick(null);

        verify(mockWifiManager, times(0)).removePasspointConfiguration(mockWifiConfig.FQDN);
        verify(mockMetricsFeatureProvider, times(0))
                .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
        verify(spyController).showConfirmForgetDialog();
    }

    @Test
    public void networkStateChangedIntent_shouldRefetchInfo() {
        displayAndResume();