Restrict ProviderModelSlice for guest user

- Don't show ProviderModelSlice if the user is a guest.

- Don't run background worker if the user is a guest.

Bug: 227470877
Test: manual test
atest -c ProviderModelSliceTest

Change-Id: Id9fd50add271513c396adfbc083a9d8ea5f7771f
diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java
index 0aae349..86ba563 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.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 @@
         //  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 @@
 
     @Override
     public Class getBackgroundWorkerClass() {
+        if (isGuestUser(mContext)) return null;
+
         return NetworkProviderWorker.class;
     }
 
diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java
index 66247d3..345631c 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.net.ConnectivityManager;
 import android.net.Uri;
 import android.net.wifi.WifiManager;
+import android.os.UserManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
@@ -87,6 +88,8 @@
     private MockNetworkProviderWorker mMockNetworkProviderWorker;
 
     @Mock
+    private UserManager mUserManager;
+    @Mock
     private SubscriptionManager mSubscriptionManager;
     @Mock
     private ConnectivityManager mConnectivityManager;
@@ -122,6 +125,8 @@
                         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);
@@ -164,6 +169,17 @@
 
     @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() {
         mWifiList.clear();
         mMockNetworkProviderWorker.updateSelfResults(null);
@@ -320,6 +336,21 @@
     }
 
     @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);
     }