Restrict WifiSlice functionality for guest user
- Hide Wi-Fi toggle and show Wi-Fi status only if the user is a guest. Bug: 232798363 Test: manual test make RunSettingsRoboTests ROBOTEST_FILTER=WifiSliceTest Change-Id: I35418477808eb5082f4651f5689f018dbb8e42ac
This commit is contained in:
@@ -34,7 +34,9 @@ import android.net.Uri;
|
|||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.UserManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.EventLog;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -96,10 +98,18 @@ public class WifiSlice implements CustomSliceable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Slice getSlice() {
|
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.
|
// If external calling package doesn't have Wi-Fi permission.
|
||||||
final boolean isPermissionGranted =
|
final boolean isPermissionGranted =
|
||||||
Utils.isSettingsIntelligence(mContext) || isPermissionGranted(mContext);
|
Utils.isSettingsIntelligence(mContext) || isPermissionGranted(mContext);
|
||||||
final boolean isWifiEnabled = isWifiEnabled();
|
|
||||||
ListBuilder listBuilder = getListBuilder(isWifiEnabled, null /* wifiSliceItem */,
|
ListBuilder listBuilder = getListBuilder(isWifiEnabled, null /* wifiSliceItem */,
|
||||||
isPermissionGranted);
|
isPermissionGranted);
|
||||||
// If the caller doesn't have the permission granted, just return a slice without a toggle.
|
// If the caller doesn't have the permission granted, just return a slice without a toggle.
|
||||||
@@ -139,6 +149,13 @@ public class WifiSlice implements CustomSliceable {
|
|||||||
return listBuilder.build();
|
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) {
|
private static boolean isPermissionGranted(Context settingsContext) {
|
||||||
final int callingUid = Binder.getCallingUid();
|
final int callingUid = Binder.getCallingUid();
|
||||||
final String callingPackage = settingsContext.getPackageManager()
|
final String callingPackage = settingsContext.getPackageManager()
|
||||||
|
@@ -33,6 +33,7 @@ import android.content.Intent;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.os.UserManager;
|
||||||
|
|
||||||
import androidx.slice.Slice;
|
import androidx.slice.Slice;
|
||||||
import androidx.slice.SliceItem;
|
import androidx.slice.SliceItem;
|
||||||
@@ -84,6 +85,8 @@ public class WifiSliceTest {
|
|||||||
@Spy
|
@Spy
|
||||||
Context mContext = ApplicationProvider.getApplicationContext();
|
Context mContext = ApplicationProvider.getApplicationContext();
|
||||||
@Mock
|
@Mock
|
||||||
|
private UserManager mUserManager;
|
||||||
|
@Mock
|
||||||
private WifiManager mWifiManager;
|
private WifiManager mWifiManager;
|
||||||
@Mock
|
@Mock
|
||||||
private PackageManager mPackageManager;
|
private PackageManager mPackageManager;
|
||||||
@@ -98,6 +101,8 @@ public class WifiSliceTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
doReturn(mResolver).when(mContext).getContentResolver();
|
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(mWifiManager).when(mContext).getSystemService(WifiManager.class);
|
||||||
doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
|
doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
|
||||||
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||||
@@ -113,6 +118,33 @@ public class WifiSliceTest {
|
|||||||
mWifiSlice = new WifiSlice(mContext, mWifiRestriction);
|
mWifiSlice = new WifiSlice(mContext, mWifiRestriction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Test
|
||||||
public void getWifiSlice_fromSIPackage_shouldHaveTitleAndToggle() {
|
public void getWifiSlice_fromSIPackage_shouldHaveTitleAndToggle() {
|
||||||
when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName});
|
when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName});
|
||||||
|
Reference in New Issue
Block a user