Loading src/com/android/settings/wifi/ConfigureWifiSettings.java +51 −20 Original line number Diff line number Diff line Loading @@ -15,19 +15,21 @@ */ package com.android.settings.wifi; import static android.content.Context.WIFI_SERVICE; import android.annotation.Nullable; import android.app.settings.SettingsEnums; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.net.wifi.WifiManager; import android.os.Bundle; import android.util.FeatureFlagUtils; import android.os.UserManager; import android.util.EventLog; import android.util.Log; import android.view.View; import android.widget.TextView; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; Loading @@ -43,7 +45,8 @@ import java.util.List; public class ConfigureWifiSettings extends DashboardFragment { private static final String TAG = "ConfigureWifiSettings"; private static final String KEY_INSTALL_CREDENTIALS = "install_credentials"; @VisibleForTesting static final String KEY_INSTALL_CREDENTIALS = "install_credentials"; private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL"; private static final String PACKAGE_INSTALL_CERTS = "com.android.certinstaller"; private static final String CLASS_INSTALL_CERTS = "com.android.certinstaller.CertInstallerMain"; Loading @@ -53,16 +56,26 @@ public class ConfigureWifiSettings extends DashboardFragment { public static final int WIFI_WAKEUP_REQUEST_CODE = 600; private WifiWakeupPreferenceController mWifiWakeupPreferenceController; private Preference mCertinstallerPreference; @Override public void onAttach(Context context) { super.onAttach(context); if (isGuestUser(context)) return; mWifiWakeupPreferenceController = use(WifiWakeupPreferenceController.class); mWifiWakeupPreferenceController.setFragment(this); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); getActivity().setTitle(R.string.network_and_internet_preferences_title); mCertinstallerPreference = findPreference(KEY_INSTALL_CREDENTIALS); if (mCertinstallerPreference != null) { mCertinstallerPreference.setOnPreferenceClickListener(preference -> { if (isGuestUser(getContext())) return; final Preference installCredentialsPref = findPreference(KEY_INSTALL_CREDENTIALS); if (installCredentialsPref != null) { installCredentialsPref.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(ACTION_INSTALL_CERTS); intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK); Loading @@ -77,6 +90,23 @@ public class ConfigureWifiSettings extends DashboardFragment { } } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (!isGuestUser(getContext())) return; Log.w(TAG, "Displays the restricted UI because the user is a guest."); EventLog.writeEvent(0x534e4554, "231987122", -1 /* UID */, "User is a guest"); // Restricted UI final TextView emptyView = getActivity().findViewById(android.R.id.empty); if (emptyView != null) { emptyView.setVisibility(View.VISIBLE); emptyView.setText(R.string.wifi_empty_list_user_restricted); } getPreferenceScreen().removeAll(); } @Override public int getMetricsCategory() { return SettingsEnums.CONFIGURE_WIFI; Loading @@ -94,25 +124,18 @@ public class ConfigureWifiSettings extends DashboardFragment { @Override protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); if (isGuestUser(context)) return null; final WifiManager wifiManager = getSystemService(WifiManager.class); final List<AbstractPreferenceController> controllers = new ArrayList<>(); controllers.add(new WifiP2pPreferenceController(context, getSettingsLifecycle(), wifiManager)); return controllers; } @Override public void onAttach(Context context) { super.onAttach(context); mWifiWakeupPreferenceController = use(WifiWakeupPreferenceController.class); mWifiWakeupPreferenceController.setFragment(this); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == WIFI_WAKEUP_REQUEST_CODE) { if (mWifiWakeupPreferenceController != null && requestCode == WIFI_WAKEUP_REQUEST_CODE) { mWifiWakeupPreferenceController.onActivityResult(requestCode, resultCode); return; } Loading @@ -122,8 +145,16 @@ public class ConfigureWifiSettings extends DashboardFragment { public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.wifi_configure_settings) { protected boolean isPageSearchEnabled(Context context) { if (isGuestUser(context)) return false; return context.getResources() .getBoolean(R.bool.config_show_wifi_settings); } }; private static boolean isGuestUser(Context context) { if (context == null) return false; final UserManager userManager = context.getSystemService(UserManager.class); if (userManager == null) return false; return userManager.isGuestUser(); } } tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java +144 −5 Original line number Diff line number Diff line package com.android.settings.wifi; import static com.android.settings.wifi.ConfigureWifiSettings.KEY_INSTALL_CREDENTIALS; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.annotation.Nullable; import android.content.Context; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.UserManager; import android.view.View; import android.widget.TextView; import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.testutils.XmlTestUtils; import com.android.settingslib.core.AbstractPreferenceController; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import java.util.List; @RunWith(RobolectricTestRunner.class) public class ConfigureWifiSettingsTest { private Context mContext; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Spy Context mContext = ApplicationProvider.getApplicationContext(); @Mock UserManager mUserManager; @Mock WifiManager mWifiManager; @Mock FragmentActivity mActivity; @Mock WifiWakeupPreferenceController mWifiWakeupPreferenceController; @Mock Preference mInstallCredentialsPref; @Mock PreferenceScreen mPreferenceScreen; @Mock TextView mEmptyView; TestConfigureWifiSettings mSettings; @Before public void setUp() { mContext = spy(RuntimeEnvironment.application); when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); when(mUserManager.isGuestUser()).thenReturn(false); when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager); mSettings = spy(new TestConfigureWifiSettings()); when(mSettings.getContext()).thenReturn(mContext); when(mSettings.getActivity()).thenReturn(mActivity); when(mSettings.use(WifiWakeupPreferenceController.class)) .thenReturn(mWifiWakeupPreferenceController); when(mSettings.findPreference(KEY_INSTALL_CREDENTIALS)).thenReturn(mInstallCredentialsPref); } @Test public void onAttach_isNotGuestUser_setupController() { when(mUserManager.isGuestUser()).thenReturn(false); mSettings.onAttach(mContext); verify(mWifiWakeupPreferenceController).setFragment(any()); } @Test public void onAttach_isGuestUser_doNotSetupController() { when(mUserManager.isGuestUser()).thenReturn(true); mSettings.onAttach(mContext); verify(mWifiWakeupPreferenceController, never()).setFragment(any()); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onCreate_isNotGuestUser_setupPreference() { when(mUserManager.isGuestUser()).thenReturn(false); mSettings.onCreate(null); verify(mInstallCredentialsPref).setOnPreferenceClickListener(any()); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onCreate_isGuestUser_doNotSetupPreference() { when(mUserManager.isGuestUser()).thenReturn(true); mSettings.onCreate(null); verify(mInstallCredentialsPref, never()).setOnPreferenceClickListener(any()); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onViewCreated_isNotGuestUser_doNotRestrictUi() { when(mUserManager.isGuestUser()).thenReturn(false); when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView); doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen(); mSettings.onViewCreated(mock(View.class), null); verify(mEmptyView, never()).setVisibility(View.VISIBLE); verify(mPreferenceScreen, never()).removeAll(); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onViewCreated_isGuestUser_restrictUi() { when(mUserManager.isGuestUser()).thenReturn(true); when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView); doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen(); mSettings.onViewCreated(mock(View.class), null); verify(mEmptyView).setVisibility(View.VISIBLE); verify(mPreferenceScreen).removeAll(); } @Test @Config(qualifiers = "mcc999") public void testNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() { public void getNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() { final List<String> niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); final int xmlId = new ConfigureWifiSettings().getPreferenceScreenResId(); final int xmlId = mSettings.getPreferenceScreenResId(); final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId); assertThat(keys).isNotNull(); assertThat(niks).containsAtLeastElementsIn(keys); } public static class TestConfigureWifiSettings extends ConfigureWifiSettings { @Override public <T extends AbstractPreferenceController> T use(Class<T> clazz) { return super.use(clazz); } } @Implements(DashboardFragment.class) public static class ShadowDashboardFragment { @Implementation public void onCreate(Bundle icicle) { // do nothing } @Implementation public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { // do nothing } } } Loading
src/com/android/settings/wifi/ConfigureWifiSettings.java +51 −20 Original line number Diff line number Diff line Loading @@ -15,19 +15,21 @@ */ package com.android.settings.wifi; import static android.content.Context.WIFI_SERVICE; import android.annotation.Nullable; import android.app.settings.SettingsEnums; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.net.wifi.WifiManager; import android.os.Bundle; import android.util.FeatureFlagUtils; import android.os.UserManager; import android.util.EventLog; import android.util.Log; import android.view.View; import android.widget.TextView; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; Loading @@ -43,7 +45,8 @@ import java.util.List; public class ConfigureWifiSettings extends DashboardFragment { private static final String TAG = "ConfigureWifiSettings"; private static final String KEY_INSTALL_CREDENTIALS = "install_credentials"; @VisibleForTesting static final String KEY_INSTALL_CREDENTIALS = "install_credentials"; private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL"; private static final String PACKAGE_INSTALL_CERTS = "com.android.certinstaller"; private static final String CLASS_INSTALL_CERTS = "com.android.certinstaller.CertInstallerMain"; Loading @@ -53,16 +56,26 @@ public class ConfigureWifiSettings extends DashboardFragment { public static final int WIFI_WAKEUP_REQUEST_CODE = 600; private WifiWakeupPreferenceController mWifiWakeupPreferenceController; private Preference mCertinstallerPreference; @Override public void onAttach(Context context) { super.onAttach(context); if (isGuestUser(context)) return; mWifiWakeupPreferenceController = use(WifiWakeupPreferenceController.class); mWifiWakeupPreferenceController.setFragment(this); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); getActivity().setTitle(R.string.network_and_internet_preferences_title); mCertinstallerPreference = findPreference(KEY_INSTALL_CREDENTIALS); if (mCertinstallerPreference != null) { mCertinstallerPreference.setOnPreferenceClickListener(preference -> { if (isGuestUser(getContext())) return; final Preference installCredentialsPref = findPreference(KEY_INSTALL_CREDENTIALS); if (installCredentialsPref != null) { installCredentialsPref.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(ACTION_INSTALL_CERTS); intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK); Loading @@ -77,6 +90,23 @@ public class ConfigureWifiSettings extends DashboardFragment { } } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (!isGuestUser(getContext())) return; Log.w(TAG, "Displays the restricted UI because the user is a guest."); EventLog.writeEvent(0x534e4554, "231987122", -1 /* UID */, "User is a guest"); // Restricted UI final TextView emptyView = getActivity().findViewById(android.R.id.empty); if (emptyView != null) { emptyView.setVisibility(View.VISIBLE); emptyView.setText(R.string.wifi_empty_list_user_restricted); } getPreferenceScreen().removeAll(); } @Override public int getMetricsCategory() { return SettingsEnums.CONFIGURE_WIFI; Loading @@ -94,25 +124,18 @@ public class ConfigureWifiSettings extends DashboardFragment { @Override protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); if (isGuestUser(context)) return null; final WifiManager wifiManager = getSystemService(WifiManager.class); final List<AbstractPreferenceController> controllers = new ArrayList<>(); controllers.add(new WifiP2pPreferenceController(context, getSettingsLifecycle(), wifiManager)); return controllers; } @Override public void onAttach(Context context) { super.onAttach(context); mWifiWakeupPreferenceController = use(WifiWakeupPreferenceController.class); mWifiWakeupPreferenceController.setFragment(this); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == WIFI_WAKEUP_REQUEST_CODE) { if (mWifiWakeupPreferenceController != null && requestCode == WIFI_WAKEUP_REQUEST_CODE) { mWifiWakeupPreferenceController.onActivityResult(requestCode, resultCode); return; } Loading @@ -122,8 +145,16 @@ public class ConfigureWifiSettings extends DashboardFragment { public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.wifi_configure_settings) { protected boolean isPageSearchEnabled(Context context) { if (isGuestUser(context)) return false; return context.getResources() .getBoolean(R.bool.config_show_wifi_settings); } }; private static boolean isGuestUser(Context context) { if (context == null) return false; final UserManager userManager = context.getSystemService(UserManager.class); if (userManager == null) return false; return userManager.isGuestUser(); } }
tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java +144 −5 Original line number Diff line number Diff line package com.android.settings.wifi; import static com.android.settings.wifi.ConfigureWifiSettings.KEY_INSTALL_CREDENTIALS; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.annotation.Nullable; import android.content.Context; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.UserManager; import android.view.View; import android.widget.TextView; import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.testutils.XmlTestUtils; import com.android.settingslib.core.AbstractPreferenceController; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import java.util.List; @RunWith(RobolectricTestRunner.class) public class ConfigureWifiSettingsTest { private Context mContext; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Spy Context mContext = ApplicationProvider.getApplicationContext(); @Mock UserManager mUserManager; @Mock WifiManager mWifiManager; @Mock FragmentActivity mActivity; @Mock WifiWakeupPreferenceController mWifiWakeupPreferenceController; @Mock Preference mInstallCredentialsPref; @Mock PreferenceScreen mPreferenceScreen; @Mock TextView mEmptyView; TestConfigureWifiSettings mSettings; @Before public void setUp() { mContext = spy(RuntimeEnvironment.application); when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); when(mUserManager.isGuestUser()).thenReturn(false); when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager); mSettings = spy(new TestConfigureWifiSettings()); when(mSettings.getContext()).thenReturn(mContext); when(mSettings.getActivity()).thenReturn(mActivity); when(mSettings.use(WifiWakeupPreferenceController.class)) .thenReturn(mWifiWakeupPreferenceController); when(mSettings.findPreference(KEY_INSTALL_CREDENTIALS)).thenReturn(mInstallCredentialsPref); } @Test public void onAttach_isNotGuestUser_setupController() { when(mUserManager.isGuestUser()).thenReturn(false); mSettings.onAttach(mContext); verify(mWifiWakeupPreferenceController).setFragment(any()); } @Test public void onAttach_isGuestUser_doNotSetupController() { when(mUserManager.isGuestUser()).thenReturn(true); mSettings.onAttach(mContext); verify(mWifiWakeupPreferenceController, never()).setFragment(any()); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onCreate_isNotGuestUser_setupPreference() { when(mUserManager.isGuestUser()).thenReturn(false); mSettings.onCreate(null); verify(mInstallCredentialsPref).setOnPreferenceClickListener(any()); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onCreate_isGuestUser_doNotSetupPreference() { when(mUserManager.isGuestUser()).thenReturn(true); mSettings.onCreate(null); verify(mInstallCredentialsPref, never()).setOnPreferenceClickListener(any()); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onViewCreated_isNotGuestUser_doNotRestrictUi() { when(mUserManager.isGuestUser()).thenReturn(false); when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView); doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen(); mSettings.onViewCreated(mock(View.class), null); verify(mEmptyView, never()).setVisibility(View.VISIBLE); verify(mPreferenceScreen, never()).removeAll(); } @Test @Config(shadows = ShadowDashboardFragment.class) public void onViewCreated_isGuestUser_restrictUi() { when(mUserManager.isGuestUser()).thenReturn(true); when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView); doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen(); mSettings.onViewCreated(mock(View.class), null); verify(mEmptyView).setVisibility(View.VISIBLE); verify(mPreferenceScreen).removeAll(); } @Test @Config(qualifiers = "mcc999") public void testNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() { public void getNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() { final List<String> niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); final int xmlId = new ConfigureWifiSettings().getPreferenceScreenResId(); final int xmlId = mSettings.getPreferenceScreenResId(); final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId); assertThat(keys).isNotNull(); assertThat(niks).containsAtLeastElementsIn(keys); } public static class TestConfigureWifiSettings extends ConfigureWifiSettings { @Override public <T extends AbstractPreferenceController> T use(Class<T> clazz) { return super.use(clazz); } } @Implements(DashboardFragment.class) public static class ShadowDashboardFragment { @Implementation public void onCreate(Bundle icicle) { // do nothing } @Implementation public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { // do nothing } } }