diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java index 0aae349e72f..86ba5639859 100644 --- a/src/com/android/settings/network/ProviderModelSlice.java +++ b/src/com/android/settings/network/ProviderModelSlice.java @@ -34,6 +34,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.telephony.SubscriptionManager; +import android.util.EventLog; import android.util.Log; import android.view.WindowManager.LayoutParams; @@ -103,6 +104,12 @@ public class ProviderModelSlice extends WifiSlice { // Fifth section: Add the Wi-Fi items which are not connected. // Sixth section: Add the See All item. final ListBuilder listBuilder = mHelper.createListBuilder(getUri()); + if (isGuestUser(mContext)) { + Log.e(TAG, "Guest user is not allowed to configure Internet!"); + EventLog.writeEvent(0x534e4554, "227470877", -1 /* UID */, "User is a guest"); + return listBuilder.build(); + } + int maxListSize = 0; final NetworkProviderWorker worker = getWorker(); if (worker != null) { @@ -297,6 +304,8 @@ public class ProviderModelSlice extends WifiSlice { @Override public Class getBackgroundWorkerClass() { + if (isGuestUser(mContext)) return null; + return NetworkProviderWorker.class; } diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java index 169bcb3d838..c52f75ec0e3 100644 --- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java +++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java @@ -18,11 +18,14 @@ package com.android.settings.wifi.addappnetworks; import android.app.ActivityManager; import android.app.IActivityManager; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.RemoteException; +import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; +import android.util.EventLog; import android.util.Log; import android.view.Gravity; import android.view.Window; @@ -85,7 +88,13 @@ public class AddAppNetworksActivity extends FragmentActivity { } @VisibleForTesting - protected boolean showAddNetworksFragment() { + boolean showAddNetworksFragment() { + if (isGuestUser(getApplicationContext())) { + Log.e(TAG, "Guest user is not allowed to configure Wi-Fi!"); + EventLog.writeEvent(0x534e4554, "224772678", -1 /* UID */, "User is a guest"); + return false; + } + if (!isAddWifiConfigAllow()) { Log.d(TAG, "Not allowed by Enterprise Restriction"); return false; @@ -130,4 +139,11 @@ public class AddAppNetworksActivity extends FragmentActivity { boolean isAddWifiConfigAllow() { return WifiEnterpriseRestrictionUtils.isAddWifiConfigAllowed(this); } + + 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(); + } } diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java index 8391b8aa8dd..dccd0234f65 100644 --- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java +++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java @@ -18,24 +18,38 @@ package com.android.settings.wifi.addappnetworks; import static com.google.common.truth.Truth.assertThat; -import android.annotation.Nullable; -import android.app.IActivityManager; -import android.os.RemoteException; - import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.annotation.Nullable; +import android.app.IActivityManager; +import android.content.Context; +import android.os.RemoteException; +import android.os.UserManager; + +import androidx.test.core.app.ApplicationProvider; + import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class AddAppNetworksActivityTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Spy + Context mContext = ApplicationProvider.getApplicationContext(); + @Mock + UserManager mUserManager; @Mock private IActivityManager mIActivityManager; @@ -43,10 +57,13 @@ public class AddAppNetworksActivityTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); + when(mUserManager.isGuestUser()).thenReturn(false); - mActivity = Robolectric.buildActivity(FakeAddAppNetworksActivity.class).create().get(); + mActivity = spy(Robolectric.buildActivity(FakeAddAppNetworksActivity.class).create().get()); + when(mActivity.getApplicationContext()).thenReturn(mContext); mActivity.mActivityManager = mIActivityManager; + fakeCallingPackage("com.android.settings"); } @Test @@ -84,6 +101,20 @@ public class AddAppNetworksActivityTest { assertThat(mActivity.showAddNetworksFragment()).isFalse(); } + @Test + public void showAddNetworksFragment_isGuestUser_returnFalse() { + when(mUserManager.isGuestUser()).thenReturn(true); + + assertThat(mActivity.showAddNetworksFragment()).isFalse(); + } + + @Test + public void showAddNetworksFragment_notGuestUser_returnTrue() { + when(mUserManager.isGuestUser()).thenReturn(false); + + assertThat(mActivity.showAddNetworksFragment()).isTrue(); + } + private void fakeCallingPackage(@Nullable String packageName) { try { when(mIActivityManager.getLaunchedFromPackage(any())).thenReturn(packageName); diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java index 66247d3623e..345631cf5f6 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java @@ -42,6 +42,7 @@ import android.graphics.drawable.ColorDrawable; import android.net.ConnectivityManager; import android.net.Uri; import android.net.wifi.WifiManager; +import android.os.UserManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -86,6 +87,8 @@ public class ProviderModelSliceTest { private ListBuilder mListBuilder; private MockNetworkProviderWorker mMockNetworkProviderWorker; + @Mock + private UserManager mUserManager; @Mock private SubscriptionManager mSubscriptionManager; @Mock @@ -122,6 +125,8 @@ public class ProviderModelSliceTest { any(), any(), any(), any(), any(), anyLong(), anyLong(), any())) .thenReturn(mWifiPickerTracker); + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); + when(mUserManager.isGuestUser()).thenReturn(false); when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); @@ -162,6 +167,17 @@ public class ProviderModelSliceTest { .isEqualTo(Intent.FLAG_RECEIVER_FOREGROUND); } + @Test + @UiThreadTest + public void getSlice_isGuestUser_shouldNotAddRow() { + when(mUserManager.isGuestUser()).thenReturn(true); + + final Slice slice = mMockProviderModelSlice.getSlice(); + + assertThat(slice).isNotNull(); + verify(mListBuilder, never()).addRow(any()); + } + @Test @UiThreadTest public void getSlice_noWifiAndHasCarrierNoData_oneCarrier() { @@ -319,6 +335,21 @@ public class ProviderModelSliceTest { assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue(); } + @Test + public void getBackgroundWorkerClass_isGuestUser_returnNull() { + when(mUserManager.isGuestUser()).thenReturn(true); + + assertThat(mMockProviderModelSlice.getBackgroundWorkerClass()).isNull(); + } + + @Test + public void getBackgroundWorkerClass_notGuestUser_returnWorkerClass() { + when(mUserManager.isGuestUser()).thenReturn(false); + + assertThat(mMockProviderModelSlice.getBackgroundWorkerClass()) + .isEqualTo(NetworkProviderWorker.class); + } + @Test public void providerModelSlice_hasCorrectUri() { assertThat(mMockProviderModelSlice.getUri()).isEqualTo(PROVIDER_MODEL_SLICE_URI);