Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c25ce19 authored by Weng Su's avatar Weng Su Committed by Android (Google) Code Review
Browse files

Merge "Restrict WifiSlice functionality for guest user" into tm-qpr-dev

parents cc0754b4 5f421125
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -34,7 +34,9 @@ import android.net.Uri;
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 @@ public class WifiSlice implements CustomSliceable {

    @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 @@ public class WifiSlice implements CustomSliceable {
        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()
+32 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.content.Intent;
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 @@ public class WifiSliceTest {
    @Spy
    Context mContext = ApplicationProvider.getApplicationContext();
    @Mock
    private UserManager mUserManager;
    @Mock
    private WifiManager mWifiManager;
    @Mock
    private PackageManager mPackageManager;
@@ -98,6 +101,8 @@ public class WifiSliceTest {
    @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);
@@ -113,6 +118,33 @@ public class WifiSliceTest {
        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
    public void getWifiSlice_fromSIPackage_shouldHaveTitleAndToggle() {
        when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName});