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

Commit ced26a65 authored by Nikhil Nayunigari's avatar Nikhil Nayunigari
Browse files

Set the state of network config dialog based on wifi network ownership

On a network that is not owned but allows editing configuration, we
should just allow user to edit the password. This change sets the state
of editable options in the network config dialog based on ownership
state.

Bug: 409847592

Flag: com.android.settings.connectivity.wifi_multiuser

Test: Manual testing
Change-Id: I4a801f2c85576f5e6b936fb7f074d1f2efbdb308
parent 8a887616
Loading
Loading
Loading
Loading
+21 −12
Original line number Diff line number Diff line
@@ -232,6 +232,8 @@ public class WifiConfigController2 implements TextWatcher,
    private final boolean mHideMeteredAndPrivacy;
    private final WifiManager mWifiManager;
    private final AndroidKeystoreAliasLoader mAndroidKeystoreAliasLoader;
    private final boolean mIsMultiUser;
    private boolean mIsNetworkEditable = true;

    private TextInputValidator mValidator = new TextInputValidator();
    private TextInputGroup mSsidInputGroup;
@@ -272,6 +274,10 @@ public class WifiConfigController2 implements TextWatcher,
        mContext = mConfigUi.getContext();
        mWifiManager = wifiManager;
        mAndroidKeystoreAliasLoader = androidKeystoreAliasLoader;
        mIsMultiUser = mContext.getSystemService(UserManager.class).getUserCount() > 1;
        if (mWifiEntry != null) {
            mIsNetworkEditable = WifiUtils.isNetworkEditable(mWifiEntry, mContext);
        }
        initWifiConfigController2(wifiEntry);
    }

@@ -281,8 +287,6 @@ public class WifiConfigController2 implements TextWatcher,
                wifiEntry.getSecurity();
        mIsTrustOnFirstUseSupported = mWifiManager.isTrustOnFirstUseSupported();

        UserManager mUserManager = mContext.getSystemService(UserManager.class);

        final Resources res = mContext.getResources();

        mLevels = res.getStringArray(R.array.wifi_signal);
@@ -354,12 +358,10 @@ public class WifiConfigController2 implements TextWatcher,
            (LinearLayout) mView.findViewById(R.id.shared_network_login_screen_warning);

        if (com.android.settings.connectivity.Flags.wifiMultiuser()) {
            int userCount = mUserManager.getUserCount();
            mView.findViewById(R.id.sharing_toggle_fields)
                    .setVisibility(userCount > 1 ? View.VISIBLE : View.GONE);
            mEditConfigurationSwitch.setEnabled(false);
                    .setVisibility(mIsMultiUser ? View.VISIBLE : View.GONE);
            mView.findViewById(R.id.edit_wifi_network_configuration_fields)
                    .setVisibility(userCount > 1 ? View.VISIBLE : View.GONE);
                    .setVisibility(mIsMultiUser ? View.VISIBLE : View.GONE);

            boolean sharedDefault =
                    mContext.getResources().getBoolean(R.bool.config_share_network_by_default);
@@ -368,7 +370,8 @@ public class WifiConfigController2 implements TextWatcher,
                        .getBoolean(R.bool.config_allow_edit_network_configuration_by_default);

            mSharedSwitch.setChecked(sharedDefault);
            mEditConfigurationSwitch.setEnabled(sharedDefault);
            mSharedSwitch.setEnabled(mIsNetworkEditable);
            mEditConfigurationSwitch.setEnabled(sharedDefault && mIsNetworkEditable);
            mEditConfigurationSwitch.setChecked(editConfigDefault);

            mSharedSwitch.setOnCheckedChangeListener(this);
@@ -418,11 +421,9 @@ public class WifiConfigController2 implements TextWatcher,
                } else {
                    mIpSettingsSpinner.setSelection(DHCP);
                }
                mIpSettingsSpinner.setEnabled(mIsNetworkEditable);

                mSharedCheckBox.setEnabled(config.shared);
                if (!config.shared) {
                    showAdvancedFields = true;
                }

                ProxySettings proxySettings = config.getIpConfiguration().getProxySettings();
                if (proxySettings == ProxySettings.STATIC) {
@@ -434,6 +435,7 @@ public class WifiConfigController2 implements TextWatcher,
                } else {
                    mProxySettingsSpinner.setSelection(PROXY_NONE);
                }
                mProxySettingsSpinner.setEnabled(mIsNetworkEditable);
                if (config != null && config.isPasspoint()) {
                    addRow(group, R.string.passpoint_label,
                            String.format(mContext.getString(R.string.passpoint_content),
@@ -1450,7 +1452,6 @@ public class WifiConfigController2 implements TextWatcher,
        WifiConfiguration config = null;

        mView.findViewById(R.id.ip_fields).setVisibility(View.VISIBLE);

        if (mWifiEntry != null && mWifiEntry.isSaved()) {
            config = mWifiEntry.getWifiConfiguration();
        }
@@ -1460,16 +1461,21 @@ public class WifiConfigController2 implements TextWatcher,
            if (mIpAddressView == null) {
                mIpAddressView = (TextView) mView.findViewById(R.id.ipaddress);
                mIpAddressView.addTextChangedListener(this);
                mIpAddressView.setEnabled(mIsNetworkEditable);
                mGatewayView = (TextView) mView.findViewById(R.id.gateway);
                mGatewayView.addTextChangedListener(getIpConfigFieldsTextWatcher(mGatewayView));
                mGatewayView.setEnabled(mIsNetworkEditable);
                mNetworkPrefixLengthView = (TextView) mView.findViewById(
                        R.id.network_prefix_length);
                mNetworkPrefixLengthView.addTextChangedListener(
                        getIpConfigFieldsTextWatcher(mNetworkPrefixLengthView));
                mNetworkPrefixLengthView.setEnabled(mIsNetworkEditable);
                mDns1View = (TextView) mView.findViewById(R.id.dns1);
                mDns1View.addTextChangedListener(getIpConfigFieldsTextWatcher(mDns1View));
                mDns1View.setEnabled(mIsNetworkEditable);
                mDns2View = (TextView) mView.findViewById(R.id.dns2);
                mDns2View.addTextChangedListener(this);
                mDns2View.setEnabled(mIsNetworkEditable);
            }
            if (config != null) {
                StaticIpConfiguration staticConfig = config.getIpConfiguration()
@@ -1504,7 +1510,6 @@ public class WifiConfigController2 implements TextWatcher,
        WifiConfiguration config = null;

        mView.findViewById(R.id.proxy_settings_fields).setVisibility(View.VISIBLE);

        if (mWifiEntry != null && mWifiEntry.isSaved()) {
            config = mWifiEntry.getWifiConfiguration();
        }
@@ -1516,10 +1521,13 @@ public class WifiConfigController2 implements TextWatcher,
            if (mProxyHostView == null) {
                mProxyHostView = (TextView) mView.findViewById(R.id.proxy_hostname);
                mProxyHostView.addTextChangedListener(this);
                mProxyHostView.setEnabled(mIsNetworkEditable);
                mProxyPortView = (TextView) mView.findViewById(R.id.proxy_port);
                mProxyPortView.addTextChangedListener(this);
                mProxyPortView.setEnabled(mIsNetworkEditable);
                mProxyExclusionListView = (TextView) mView.findViewById(R.id.proxy_exclusionlist);
                mProxyExclusionListView.addTextChangedListener(this);
                mProxyExclusionListView.setEnabled(mIsNetworkEditable);
            }
            if (config != null) {
                ProxyInfo proxyProperties = config.getHttpProxy();
@@ -1538,6 +1546,7 @@ public class WifiConfigController2 implements TextWatcher,
            if (mProxyPacView == null) {
                mProxyPacView = (TextView) mView.findViewById(R.id.proxy_pac);
                mProxyPacView.addTextChangedListener(this);
                mProxyPacView.setEnabled(mIsNetworkEditable);
            }
            if (config != null) {
                ProxyInfo proxyInfo = config.getHttpProxy();
+100 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.net.wifi.WifiManager;
import android.os.Looper;
import android.os.UserManager;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -68,11 +69,13 @@ import com.android.wifitrackerlib.WifiEntry;
import com.google.common.collect.ImmutableList;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
@@ -89,6 +92,11 @@ public class WifiConfigController2Test {

    static final String WIFI_EAP_TLS_V1_3 = "TLS v1.3";

    @Rule
    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    @Mock
    private WifiConfigUiBase2 mConfigUiBase;
    @Mock
@@ -130,6 +138,7 @@ public class WifiConfigController2Test {
    private static final String NUMBER_AND_CHARACTER_KEY = "123456abcd";
    private static final String PARTIAL_NUMBER_AND_CHARACTER_KEY = "123456abc?";
    private static final int DHCP = 0;
    private static final int STATIC_IP = 1;
    // Saved certificates
    private static final String SAVED_CA_CERT = "saved CA cert";
    private static final String SAVED_USER_CERT = "saved user cert";
@@ -142,7 +151,6 @@ public class WifiConfigController2Test {

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = spy(RuntimeEnvironment.application);
        when(mContext.getSystemService(eq(WifiManager.class))).thenReturn(mWifiManager);
        when(mContext.getSystemService(eq(UserManager.class))).thenReturn(mUserManager);
@@ -269,6 +277,96 @@ public class WifiConfigController2Test {
        assertThat(editConfigFields.getVisibility()).isEqualTo(View.GONE);
    }

    @Test
    @EnableFlags(Flags.FLAG_WIFI_MULTIUSER)
    public void checkIpSpinnerState_networkNotOwned_multipleUsers() {
        when(mUserManager.getUserCount()).thenReturn(2);
        when(mWifiEntry.isSaved()).thenReturn(true);
        final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
        when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
        when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
        mockWifiConfig.creatorUid = Integer.MAX_VALUE;
        createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);

        final View ipSettingsSpinner = mView.findViewById(R.id.ip_settings);
        assertThat(ipSettingsSpinner.isEnabled()).isEqualTo(false);
    }

    @Test
    @EnableFlags(Flags.FLAG_WIFI_MULTIUSER)
    public void checkIpSpinnerState_networkNotOwned_singleUser() {
        when(mUserManager.getUserCount()).thenReturn(1);
        when(mWifiEntry.isSaved()).thenReturn(true);
        final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
        when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
        when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
        mockWifiConfig.creatorUid = Integer.MAX_VALUE;
        createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);

        final View ipSettingsSpinner = mView.findViewById(R.id.ip_settings);
        assertThat(ipSettingsSpinner.isEnabled()).isEqualTo(true);
    }

    @Test
    @EnableFlags(Flags.FLAG_WIFI_MULTIUSER)
    public void checkIpSpinnerState_networkOwned_multipleUsers() {
        when(mUserManager.getUserCount()).thenReturn(2);
        when(mWifiEntry.isSaved()).thenReturn(true);
        final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
        when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
        when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
        mockWifiConfig.creatorUid = 1;
        createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);

        final View ipSettingsSpinner = mView.findViewById(R.id.ip_settings);
        assertThat(ipSettingsSpinner.isEnabled()).isEqualTo(true);
    }

    @Test
    @EnableFlags(Flags.FLAG_WIFI_MULTIUSER)
    public void checkProxySpinnerState_networkNotOwned_multipleUsers() {
        when(mUserManager.getUserCount()).thenReturn(2);
        when(mWifiEntry.isSaved()).thenReturn(true);
        final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
        when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
        when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
        mockWifiConfig.creatorUid = Integer.MAX_VALUE;
        createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);

        final View proxySettingsSpinner = mView.findViewById(R.id.proxy_settings);
        assertThat(proxySettingsSpinner.isEnabled()).isEqualTo(false);
    }

    @Test
    @EnableFlags(Flags.FLAG_WIFI_MULTIUSER)
    public void checkProxySpinnerState_networkNotOwned_singleUser() {
        when(mUserManager.getUserCount()).thenReturn(1);
        when(mWifiEntry.isSaved()).thenReturn(true);
        final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
        when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
        when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
        mockWifiConfig.creatorUid = Integer.MAX_VALUE;
        createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);

        final View proxySettingsSpinner = mView.findViewById(R.id.proxy_settings);
        assertThat(proxySettingsSpinner.isEnabled()).isEqualTo(true);
    }

    @Test
    @EnableFlags(Flags.FLAG_WIFI_MULTIUSER)
    public void checkProxySpinnerState_networkOwned_multipleUsers() {
        when(mUserManager.getUserCount()).thenReturn(2);
        when(mWifiEntry.isSaved()).thenReturn(true);
        final WifiConfiguration mockWifiConfig = spy(new WifiConfiguration());
        when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
        when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
        mockWifiConfig.creatorUid = 1;
        createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);

        final View proxySettingsSpinner = mView.findViewById(R.id.proxy_settings);
        assertThat(proxySettingsSpinner.isEnabled()).isEqualTo(true);
    }

    @Test
    public void isSubmittable_EapWithAkaMethod_shouldReturnTrue() {
        createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);