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

Commit 0feb082f authored by Nate Myren's avatar Nate Myren Committed by Automerger Merge Worker
Browse files

Merge "Use Context in Notification PermissionHelper" into udc-dev am: fa17e75b

parents 0a61c39f fa17e75b
Loading
Loading
Loading
Loading
+2 −3
Original line number Original line Diff line number Diff line
@@ -316,7 +316,6 @@ import com.android.server.notification.toast.TextToastRecord;
import com.android.server.notification.toast.ToastRecord;
import com.android.server.notification.toast.ToastRecord;
import com.android.server.pm.PackageManagerService;
import com.android.server.pm.PackageManagerService;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.policy.PermissionPolicyInternal;
import com.android.server.policy.PermissionPolicyInternal;
import com.android.server.powerstats.StatsPullAtomCallbackImpl;
import com.android.server.powerstats.StatsPullAtomCallbackImpl;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.statusbar.StatusBarManagerInternal;
@@ -2559,8 +2558,8 @@ public class NotificationManagerService extends SystemService {
                        Context.STATS_MANAGER),
                        Context.STATS_MANAGER),
                getContext().getSystemService(TelephonyManager.class),
                getContext().getSystemService(TelephonyManager.class),
                LocalServices.getService(ActivityManagerInternal.class),
                LocalServices.getService(ActivityManagerInternal.class),
                createToastRateLimiter(), new PermissionHelper(LocalServices.getService(
                createToastRateLimiter(), new PermissionHelper(getContext(),
                        PermissionManagerServiceInternal.class), AppGlobals.getPackageManager(),
                        AppGlobals.getPackageManager(),
                        AppGlobals.getPermissionManager()),
                        AppGlobals.getPermissionManager()),
                LocalServices.getService(UsageStatsManagerInternal.class),
                LocalServices.getService(UsageStatsManagerInternal.class),
                getContext().getSystemService(TelecomManager.class),
                getContext().getSystemService(TelecomManager.class),
+7 −7
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.Manifest;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.annotation.UserIdInt;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
@@ -37,7 +38,6 @@ import android.util.Pair;
import android.util.Slog;
import android.util.Slog;


import com.android.internal.util.ArrayUtils;
import com.android.internal.util.ArrayUtils;
import com.android.server.pm.permission.PermissionManagerServiceInternal;


import java.util.Collections;
import java.util.Collections;
import java.util.HashSet;
import java.util.HashSet;
@@ -53,13 +53,13 @@ public final class PermissionHelper {


    private static final String NOTIFICATION_PERMISSION = Manifest.permission.POST_NOTIFICATIONS;
    private static final String NOTIFICATION_PERMISSION = Manifest.permission.POST_NOTIFICATIONS;


    private final PermissionManagerServiceInternal mPmi;
    private final Context mContext;
    private final IPackageManager mPackageManager;
    private final IPackageManager mPackageManager;
    private final IPermissionManager mPermManager;
    private final IPermissionManager mPermManager;


    public PermissionHelper(PermissionManagerServiceInternal pmi, IPackageManager packageManager,
    public PermissionHelper(Context context, IPackageManager packageManager,
            IPermissionManager permManager) {
            IPermissionManager permManager) {
        mPmi = pmi;
        mContext = context;
        mPackageManager = packageManager;
        mPackageManager = packageManager;
        mPermManager = permManager;
        mPermManager = permManager;
    }
    }
@@ -71,7 +71,7 @@ public final class PermissionHelper {
    public boolean hasPermission(int uid) {
    public boolean hasPermission(int uid) {
        final long callingId = Binder.clearCallingIdentity();
        final long callingId = Binder.clearCallingIdentity();
        try {
        try {
            return mPmi.checkUidPermission(uid, NOTIFICATION_PERMISSION) == PERMISSION_GRANTED;
            return mContext.checkPermission(NOTIFICATION_PERMISSION, -1, uid) == PERMISSION_GRANTED;
        } finally {
        } finally {
            Binder.restoreCallingIdentity(callingId);
            Binder.restoreCallingIdentity(callingId);
        }
        }
@@ -193,8 +193,8 @@ public final class PermissionHelper {
                return;
                return;
            }
            }


            boolean currentlyGranted = mPmi.checkPermission(packageName, NOTIFICATION_PERMISSION,
            int uid = mPackageManager.getPackageUid(packageName, 0, userId);
                    userId) != PackageManager.PERMISSION_DENIED;
            boolean currentlyGranted = hasPermission(uid);
            if (grant && !currentlyGranted) {
            if (grant && !currentlyGranted) {
                mPermManager.grantRuntimePermission(packageName, NOTIFICATION_PERMISSION, userId);
                mPermManager.grantRuntimePermission(packageName, NOTIFICATION_PERMISSION, userId);
            } else if (!grant && currentlyGranted) {
            } else if (!grant && currentlyGranted) {
+18 −15
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.Manifest;
import android.Manifest;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfo;
@@ -47,7 +48,6 @@ import android.util.Pair;
import androidx.test.runner.AndroidJUnit4;
import androidx.test.runner.AndroidJUnit4;


import com.android.server.UiServiceTestCase;
import com.android.server.UiServiceTestCase;
import com.android.server.pm.permission.PermissionManagerServiceInternal;


import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap;
@@ -67,7 +67,7 @@ import java.util.Set;
public class PermissionHelperTest extends UiServiceTestCase {
public class PermissionHelperTest extends UiServiceTestCase {


    @Mock
    @Mock
    private PermissionManagerServiceInternal mPmi;
    private Context mContext;
    @Mock
    @Mock
    private IPackageManager mPackageManager;
    private IPackageManager mPackageManager;
    @Mock
    @Mock
@@ -80,7 +80,7 @@ public class PermissionHelperTest extends UiServiceTestCase {
    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        mPermissionHelper = new PermissionHelper(mPmi, mPackageManager, mPermManager);
        mPermissionHelper = new PermissionHelper(mContext, mPackageManager, mPermManager);
        PackageInfo testPkgInfo = new PackageInfo();
        PackageInfo testPkgInfo = new PackageInfo();
        testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.POST_NOTIFICATIONS };
        testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.POST_NOTIFICATIONS };
        when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt()))
        when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt()))
@@ -89,12 +89,12 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testHasPermission() throws Exception {
    public void testHasPermission() throws Exception {
        when(mPmi.checkUidPermission(anyInt(), anyString()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_GRANTED);
                .thenReturn(PERMISSION_GRANTED);


        assertThat(mPermissionHelper.hasPermission(1)).isTrue();
        assertThat(mPermissionHelper.hasPermission(1)).isTrue();


        when(mPmi.checkUidPermission(anyInt(), anyString()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_DENIED);
                .thenReturn(PERMISSION_DENIED);


        assertThat(mPermissionHelper.hasPermission(1)).isFalse();
        assertThat(mPermissionHelper.hasPermission(1)).isFalse();
@@ -241,7 +241,7 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testSetNotificationPermission_grantUserSet() throws Exception {
    public void testSetNotificationPermission_grantUserSet() throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_DENIED);
                .thenReturn(PERMISSION_DENIED);
        mPermissionHelper.setNotificationPermission("pkg", 10, true, true);
        mPermissionHelper.setNotificationPermission("pkg", 10, true, true);


@@ -255,7 +255,7 @@ public class PermissionHelperTest extends UiServiceTestCase {
    @Test
    @Test
    public void testSetNotificationPermission_pkgPerm_grantedByDefaultPermSet_allUserSet()
    public void testSetNotificationPermission_pkgPerm_grantedByDefaultPermSet_allUserSet()
            throws Exception {
            throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_DENIED);
                .thenReturn(PERMISSION_DENIED);
        when(mPermManager.getPermissionFlags(anyString(),
        when(mPermManager.getPermissionFlags(anyString(),
                eq(Manifest.permission.POST_NOTIFICATIONS),
                eq(Manifest.permission.POST_NOTIFICATIONS),
@@ -273,7 +273,7 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testSetNotificationPermission_revokeUserSet() throws Exception {
    public void testSetNotificationPermission_revokeUserSet() throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_GRANTED);
                .thenReturn(PERMISSION_GRANTED);


        mPermissionHelper.setNotificationPermission("pkg", 10, false, true);
        mPermissionHelper.setNotificationPermission("pkg", 10, false, true);
@@ -287,7 +287,7 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testSetNotificationPermission_grantNotUserSet() throws Exception {
    public void testSetNotificationPermission_grantNotUserSet() throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_DENIED);
                .thenReturn(PERMISSION_DENIED);


        mPermissionHelper.setNotificationPermission("pkg", 10, true, false);
        mPermissionHelper.setNotificationPermission("pkg", 10, true, false);
@@ -300,7 +300,7 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testSetNotificationPermission_revokeNotUserSet() throws Exception {
    public void testSetNotificationPermission_revokeNotUserSet() throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_GRANTED);
                .thenReturn(PERMISSION_GRANTED);


        mPermissionHelper.setNotificationPermission("pkg", 10, false, false);
        mPermissionHelper.setNotificationPermission("pkg", 10, false, false);
@@ -340,7 +340,7 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testSetNotificationPermission_alreadyGrantedNotRegranted() throws Exception {
    public void testSetNotificationPermission_alreadyGrantedNotRegranted() throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_GRANTED);
                .thenReturn(PERMISSION_GRANTED);
        mPermissionHelper.setNotificationPermission("pkg", 10, true, false);
        mPermissionHelper.setNotificationPermission("pkg", 10, true, false);


@@ -350,7 +350,7 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testSetNotificationPermission_alreadyRevokedNotRerevoked() throws Exception {
    public void testSetNotificationPermission_alreadyRevokedNotRerevoked() throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_DENIED);
                .thenReturn(PERMISSION_DENIED);
        mPermissionHelper.setNotificationPermission("pkg", 10, false, false);
        mPermissionHelper.setNotificationPermission("pkg", 10, false, false);


@@ -360,16 +360,19 @@ public class PermissionHelperTest extends UiServiceTestCase {


    @Test
    @Test
    public void testSetNotificationPermission_doesntRequestNotChanged() throws Exception {
    public void testSetNotificationPermission_doesntRequestNotChanged() throws Exception {
        when(mPmi.checkPermission(anyString(), anyString(), anyInt()))
        int testUid = -1;
        when(mContext.checkPermission(anyString(), anyInt(), anyInt()))
                .thenReturn(PERMISSION_GRANTED);
                .thenReturn(PERMISSION_GRANTED);
        when(mPackageManager.getPackageUid(anyString(), anyInt(), anyInt()))
                .thenReturn(testUid);
        PackageInfo testPkgInfo = new PackageInfo();
        PackageInfo testPkgInfo = new PackageInfo();
        testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.RECORD_AUDIO };
        testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.RECORD_AUDIO };
        when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt()))
        when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt()))
                .thenReturn(testPkgInfo);
                .thenReturn(testPkgInfo);
        mPermissionHelper.setNotificationPermission("pkg", 10, false, false);
        mPermissionHelper.setNotificationPermission("pkg", 10, false, false);


        verify(mPmi, never()).checkPermission(
        verify(mContext, never()).checkPermission(
                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10));
                eq(Manifest.permission.POST_NOTIFICATIONS), eq(-1), eq(testUid));
        verify(mPermManager, never()).revokeRuntimePermission(
        verify(mPermManager, never()).revokeRuntimePermission(
                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
    }
    }