Merge "Use Context in Notification PermissionHelper" into udc-dev
This commit is contained in:
@@ -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;
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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
|
||||
@@ -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()))
|
||||
@@ -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();
|
||||
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user