Loading services/core/java/com/android/server/notification/NotificationManagerService.java +2 −3 Original line number Diff line number Diff line Loading @@ -316,7 +316,6 @@ import com.android.server.notification.toast.TextToastRecord; import com.android.server.notification.toast.ToastRecord; import com.android.server.pm.PackageManagerService; import com.android.server.pm.UserManagerInternal; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.android.server.policy.PermissionPolicyInternal; import com.android.server.powerstats.StatsPullAtomCallbackImpl; import com.android.server.statusbar.StatusBarManagerInternal; Loading Loading @@ -2559,8 +2558,8 @@ public class NotificationManagerService extends SystemService { Context.STATS_MANAGER), getContext().getSystemService(TelephonyManager.class), LocalServices.getService(ActivityManagerInternal.class), createToastRateLimiter(), new PermissionHelper(LocalServices.getService( PermissionManagerServiceInternal.class), AppGlobals.getPackageManager(), createToastRateLimiter(), new PermissionHelper(getContext(), AppGlobals.getPackageManager(), AppGlobals.getPermissionManager()), LocalServices.getService(UsageStatsManagerInternal.class), getContext().getSystemService(TelecomManager.class), Loading services/core/java/com/android/server/notification/PermissionHelper.java +7 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import android.Manifest; import android.annotation.NonNull; import android.annotation.UserIdInt; import android.content.Context; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; Loading @@ -37,7 +38,6 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.util.ArrayUtils; import com.android.server.pm.permission.PermissionManagerServiceInternal; import java.util.Collections; import java.util.HashSet; Loading @@ -53,13 +53,13 @@ public final class PermissionHelper { private static final String NOTIFICATION_PERMISSION = Manifest.permission.POST_NOTIFICATIONS; private final PermissionManagerServiceInternal mPmi; private final Context mContext; private final IPackageManager mPackageManager; private final IPermissionManager mPermManager; public PermissionHelper(PermissionManagerServiceInternal pmi, IPackageManager packageManager, public PermissionHelper(Context context, IPackageManager packageManager, IPermissionManager permManager) { mPmi = pmi; mContext = context; mPackageManager = packageManager; mPermManager = permManager; } Loading @@ -71,7 +71,7 @@ public final class PermissionHelper { public boolean hasPermission(int uid) { final long callingId = Binder.clearCallingIdentity(); try { return mPmi.checkUidPermission(uid, NOTIFICATION_PERMISSION) == PERMISSION_GRANTED; return mContext.checkPermission(NOTIFICATION_PERMISSION, -1, uid) == PERMISSION_GRANTED; } finally { Binder.restoreCallingIdentity(callingId); } Loading Loading @@ -193,8 +193,8 @@ public final class PermissionHelper { return; } boolean currentlyGranted = mPmi.checkPermission(packageName, NOTIFICATION_PERMISSION, userId) != PackageManager.PERMISSION_DENIED; int uid = mPackageManager.getPackageUid(packageName, 0, userId); boolean currentlyGranted = hasPermission(uid); if (grant && !currentlyGranted) { mPermManager.grantRuntimePermission(packageName, NOTIFICATION_PERMISSION, userId); } else if (!grant && currentlyGranted) { Loading services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java +18 −15 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.Manifest; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; Loading @@ -47,7 +48,6 @@ import android.util.Pair; import androidx.test.runner.AndroidJUnit4; import com.android.server.UiServiceTestCase; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; Loading @@ -67,7 +67,7 @@ import java.util.Set; public class PermissionHelperTest extends UiServiceTestCase { @Mock private PermissionManagerServiceInternal mPmi; private Context mContext; @Mock private IPackageManager mPackageManager; @Mock Loading @@ -80,7 +80,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mPermissionHelper = new PermissionHelper(mPmi, mPackageManager, mPermManager); mPermissionHelper = new PermissionHelper(mContext, mPackageManager, mPermManager); PackageInfo testPkgInfo = new PackageInfo(); testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.POST_NOTIFICATIONS }; when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt())) Loading @@ -89,12 +89,12 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testHasPermission() throws Exception { when(mPmi.checkUidPermission(anyInt(), anyString())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); assertThat(mPermissionHelper.hasPermission(1)).isTrue(); when(mPmi.checkUidPermission(anyInt(), anyString())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); assertThat(mPermissionHelper.hasPermission(1)).isFalse(); Loading Loading @@ -241,7 +241,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_grantUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); mPermissionHelper.setNotificationPermission("pkg", 10, true, true); Loading @@ -255,7 +255,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_pkgPerm_grantedByDefaultPermSet_allUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); when(mPermManager.getPermissionFlags(anyString(), eq(Manifest.permission.POST_NOTIFICATIONS), Loading @@ -273,7 +273,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_revokeUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); mPermissionHelper.setNotificationPermission("pkg", 10, false, true); Loading @@ -287,7 +287,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_grantNotUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); mPermissionHelper.setNotificationPermission("pkg", 10, true, false); Loading @@ -300,7 +300,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_revokeNotUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); mPermissionHelper.setNotificationPermission("pkg", 10, false, false); Loading Loading @@ -340,7 +340,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_alreadyGrantedNotRegranted() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); mPermissionHelper.setNotificationPermission("pkg", 10, true, false); Loading @@ -350,7 +350,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_alreadyRevokedNotRerevoked() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); mPermissionHelper.setNotificationPermission("pkg", 10, false, false); Loading @@ -360,16 +360,19 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_doesntRequestNotChanged() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) int testUid = -1; when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); when(mPackageManager.getPackageUid(anyString(), anyInt(), anyInt())) .thenReturn(testUid); PackageInfo testPkgInfo = new PackageInfo(); testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.RECORD_AUDIO }; when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt())) .thenReturn(testPkgInfo); mPermissionHelper.setNotificationPermission("pkg", 10, false, false); verify(mPmi, never()).checkPermission( eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10)); verify(mContext, never()).checkPermission( eq(Manifest.permission.POST_NOTIFICATIONS), eq(-1), eq(testUid)); verify(mPermManager, never()).revokeRuntimePermission( eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString()); } Loading Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +2 −3 Original line number Diff line number Diff line Loading @@ -316,7 +316,6 @@ import com.android.server.notification.toast.TextToastRecord; import com.android.server.notification.toast.ToastRecord; import com.android.server.pm.PackageManagerService; import com.android.server.pm.UserManagerInternal; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.android.server.policy.PermissionPolicyInternal; import com.android.server.powerstats.StatsPullAtomCallbackImpl; import com.android.server.statusbar.StatusBarManagerInternal; Loading Loading @@ -2559,8 +2558,8 @@ public class NotificationManagerService extends SystemService { Context.STATS_MANAGER), getContext().getSystemService(TelephonyManager.class), LocalServices.getService(ActivityManagerInternal.class), createToastRateLimiter(), new PermissionHelper(LocalServices.getService( PermissionManagerServiceInternal.class), AppGlobals.getPackageManager(), createToastRateLimiter(), new PermissionHelper(getContext(), AppGlobals.getPackageManager(), AppGlobals.getPermissionManager()), LocalServices.getService(UsageStatsManagerInternal.class), getContext().getSystemService(TelecomManager.class), Loading
services/core/java/com/android/server/notification/PermissionHelper.java +7 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import android.Manifest; import android.annotation.NonNull; import android.annotation.UserIdInt; import android.content.Context; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; Loading @@ -37,7 +38,6 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.util.ArrayUtils; import com.android.server.pm.permission.PermissionManagerServiceInternal; import java.util.Collections; import java.util.HashSet; Loading @@ -53,13 +53,13 @@ public final class PermissionHelper { private static final String NOTIFICATION_PERMISSION = Manifest.permission.POST_NOTIFICATIONS; private final PermissionManagerServiceInternal mPmi; private final Context mContext; private final IPackageManager mPackageManager; private final IPermissionManager mPermManager; public PermissionHelper(PermissionManagerServiceInternal pmi, IPackageManager packageManager, public PermissionHelper(Context context, IPackageManager packageManager, IPermissionManager permManager) { mPmi = pmi; mContext = context; mPackageManager = packageManager; mPermManager = permManager; } Loading @@ -71,7 +71,7 @@ public final class PermissionHelper { public boolean hasPermission(int uid) { final long callingId = Binder.clearCallingIdentity(); try { return mPmi.checkUidPermission(uid, NOTIFICATION_PERMISSION) == PERMISSION_GRANTED; return mContext.checkPermission(NOTIFICATION_PERMISSION, -1, uid) == PERMISSION_GRANTED; } finally { Binder.restoreCallingIdentity(callingId); } Loading Loading @@ -193,8 +193,8 @@ public final class PermissionHelper { return; } boolean currentlyGranted = mPmi.checkPermission(packageName, NOTIFICATION_PERMISSION, userId) != PackageManager.PERMISSION_DENIED; int uid = mPackageManager.getPackageUid(packageName, 0, userId); boolean currentlyGranted = hasPermission(uid); if (grant && !currentlyGranted) { mPermManager.grantRuntimePermission(packageName, NOTIFICATION_PERMISSION, userId); } else if (!grant && currentlyGranted) { Loading
services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java +18 −15 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.Manifest; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; Loading @@ -47,7 +48,6 @@ import android.util.Pair; import androidx.test.runner.AndroidJUnit4; import com.android.server.UiServiceTestCase; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; Loading @@ -67,7 +67,7 @@ import java.util.Set; public class PermissionHelperTest extends UiServiceTestCase { @Mock private PermissionManagerServiceInternal mPmi; private Context mContext; @Mock private IPackageManager mPackageManager; @Mock Loading @@ -80,7 +80,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mPermissionHelper = new PermissionHelper(mPmi, mPackageManager, mPermManager); mPermissionHelper = new PermissionHelper(mContext, mPackageManager, mPermManager); PackageInfo testPkgInfo = new PackageInfo(); testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.POST_NOTIFICATIONS }; when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt())) Loading @@ -89,12 +89,12 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testHasPermission() throws Exception { when(mPmi.checkUidPermission(anyInt(), anyString())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); assertThat(mPermissionHelper.hasPermission(1)).isTrue(); when(mPmi.checkUidPermission(anyInt(), anyString())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); assertThat(mPermissionHelper.hasPermission(1)).isFalse(); Loading Loading @@ -241,7 +241,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_grantUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); mPermissionHelper.setNotificationPermission("pkg", 10, true, true); Loading @@ -255,7 +255,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_pkgPerm_grantedByDefaultPermSet_allUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); when(mPermManager.getPermissionFlags(anyString(), eq(Manifest.permission.POST_NOTIFICATIONS), Loading @@ -273,7 +273,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_revokeUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); mPermissionHelper.setNotificationPermission("pkg", 10, false, true); Loading @@ -287,7 +287,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_grantNotUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); mPermissionHelper.setNotificationPermission("pkg", 10, true, false); Loading @@ -300,7 +300,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_revokeNotUserSet() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); mPermissionHelper.setNotificationPermission("pkg", 10, false, false); Loading Loading @@ -340,7 +340,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_alreadyGrantedNotRegranted() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); mPermissionHelper.setNotificationPermission("pkg", 10, true, false); Loading @@ -350,7 +350,7 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_alreadyRevokedNotRerevoked() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_DENIED); mPermissionHelper.setNotificationPermission("pkg", 10, false, false); Loading @@ -360,16 +360,19 @@ public class PermissionHelperTest extends UiServiceTestCase { @Test public void testSetNotificationPermission_doesntRequestNotChanged() throws Exception { when(mPmi.checkPermission(anyString(), anyString(), anyInt())) int testUid = -1; when(mContext.checkPermission(anyString(), anyInt(), anyInt())) .thenReturn(PERMISSION_GRANTED); when(mPackageManager.getPackageUid(anyString(), anyInt(), anyInt())) .thenReturn(testUid); PackageInfo testPkgInfo = new PackageInfo(); testPkgInfo.requestedPermissions = new String[]{ Manifest.permission.RECORD_AUDIO }; when(mPackageManager.getPackageInfo(anyString(), anyLong(), anyInt())) .thenReturn(testPkgInfo); mPermissionHelper.setNotificationPermission("pkg", 10, false, false); verify(mPmi, never()).checkPermission( eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10)); verify(mContext, never()).checkPermission( eq(Manifest.permission.POST_NOTIFICATIONS), eq(-1), eq(testUid)); verify(mPermManager, never()).revokeRuntimePermission( eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString()); } Loading