Merge "Restrict WifiSlice functionality for guest user" into tm-qpr-dev am: 1c25ce1937

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/18802566

Change-Id: Iaa2b5a26a3ee2b8490e116c5148a371651d32ee4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index 76dfab8..2e5524e 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -34,7 +34,9 @@
 import android.net.wifi.WifiManager;
 import android.os.Binder;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.text.TextUtils;
+import android.util.EventLog;
 import android.util.Log;
 
 import androidx.annotation.Nullable;
@@ -96,10 +98,18 @@
 
     @Override
     public Slice getSlice() {
+        final boolean isWifiEnabled = isWifiEnabled();
+        // If user is a guest just return a slice without a toggle.
+        if (isGuestUser(mContext)) {
+            Log.e(TAG, "Guest user is not allowed to configure Wi-Fi!");
+            EventLog.writeEvent(0x534e4554, "232798363", -1 /* UID */, "User is a guest");
+            return getListBuilder(isWifiEnabled, null /* wifiSliceItem */,
+                    false /* isWiFiPermissionGranted */).build();
+        }
+
         // If external calling package doesn't have Wi-Fi permission.
         final boolean isPermissionGranted =
                 Utils.isSettingsIntelligence(mContext) || isPermissionGranted(mContext);
-        final boolean isWifiEnabled = isWifiEnabled();
         ListBuilder listBuilder = getListBuilder(isWifiEnabled, null /* wifiSliceItem */,
                 isPermissionGranted);
         // If the caller doesn't have the permission granted, just return a slice without a toggle.
@@ -139,6 +149,13 @@
         return listBuilder.build();
     }
 
+    protected 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();
+    }
+
     private static boolean isPermissionGranted(Context settingsContext) {
         final int callingUid = Binder.getCallingUid();
         final String callingPackage = settingsContext.getPackageManager()
diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
index 8e42fcd..33302ce 100644
--- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
@@ -33,6 +33,7 @@
 import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.net.wifi.WifiManager;
+import android.os.UserManager;
 
 import androidx.slice.Slice;
 import androidx.slice.SliceItem;
@@ -84,6 +85,8 @@
     @Spy
     Context mContext = ApplicationProvider.getApplicationContext();
     @Mock
+    private UserManager mUserManager;
+    @Mock
     private WifiManager mWifiManager;
     @Mock
     private PackageManager mPackageManager;
@@ -98,6 +101,8 @@
     @Before
     public void setUp() {
         doReturn(mResolver).when(mContext).getContentResolver();
+        doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
+        doReturn(false).when(mUserManager).isGuestUser();
         doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class);
         doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
@@ -114,6 +119,33 @@
     }
 
     @Test
+    public void getWifiSlice_isGuestUser_shouldReturnNoToggle() {
+        doReturn(true).when(mUserManager).isGuestUser();
+
+        final Slice wifiSlice = mWifiSlice.getSlice();
+        final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice);
+        final List<SliceAction> toggles = metadata.getToggles();
+        assertThat(toggles).hasSize(0);
+
+        final int rows = SliceQuery.findAll(wifiSlice, FORMAT_SLICE, HINT_LIST_ITEM,
+                null /* nonHints */).size();
+        // Title row
+        assertThat(rows).isEqualTo(1);
+    }
+
+    @Test
+    public void getWifiSlice_isNotGuestUser_shouldHaveTitleAndToggle() {
+        doReturn(false).when(mUserManager).isGuestUser();
+
+        final Slice wifiSlice = mWifiSlice.getSlice();
+        assertThat(wifiSlice).isNotNull();
+
+        final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice);
+        final List<SliceAction> toggles = metadata.getToggles();
+        assertThat(toggles).hasSize(1);
+    }
+
+    @Test
     public void getWifiSlice_fromSIPackage_shouldHaveTitleAndToggle() {
         when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName});
         ShadowWifiSlice.setWifiPermissible(false);