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);