Merge "Add cross user permission check - areNotificationsEnabledForPackage" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e4c6ce23af
@@ -2186,6 +2186,11 @@ public class NotificationManagerService extends SystemService {
|
|||||||
@Override
|
@Override
|
||||||
public boolean areNotificationsEnabledForPackage(String pkg, int uid) {
|
public boolean areNotificationsEnabledForPackage(String pkg, int uid) {
|
||||||
checkCallerIsSystemOrSameApp(pkg);
|
checkCallerIsSystemOrSameApp(pkg);
|
||||||
|
if (UserHandle.getCallingUserId() != UserHandle.getUserId(uid)) {
|
||||||
|
getContext().enforceCallingPermission(
|
||||||
|
android.Manifest.permission.INTERACT_ACROSS_USERS,
|
||||||
|
"canNotifyAsPackage for uid " + uid);
|
||||||
|
}
|
||||||
|
|
||||||
return mRankingHelper.getImportance(pkg, uid) != IMPORTANCE_NONE;
|
return mRankingHelper.getImportance(pkg, uid) != IMPORTANCE_NONE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON
|
|||||||
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR;
|
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR;
|
||||||
import static android.content.pm.PackageManager.FEATURE_WATCH;
|
import static android.content.pm.PackageManager.FEATURE_WATCH;
|
||||||
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||||
|
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||||
import static android.os.Build.VERSION_CODES.O_MR1;
|
import static android.os.Build.VERSION_CODES.O_MR1;
|
||||||
import static android.os.Build.VERSION_CODES.P;
|
import static android.os.Build.VERSION_CODES.P;
|
||||||
|
|
||||||
@@ -106,6 +107,7 @@ import android.testing.AndroidTestingRunner;
|
|||||||
import android.testing.TestableContext;
|
import android.testing.TestableContext;
|
||||||
import android.testing.TestableLooper;
|
import android.testing.TestableLooper;
|
||||||
import android.testing.TestableLooper.RunWithLooper;
|
import android.testing.TestableLooper.RunWithLooper;
|
||||||
|
import android.testing.TestablePermissions;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.AtomicFile;
|
import android.util.AtomicFile;
|
||||||
@@ -3145,4 +3147,21 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
|
|||||||
|
|
||||||
assertEquals(0, captor.getValue().getNotification().flags);
|
assertEquals(0, captor.getValue().getNotification().flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAreNotificationsEnabledForPackage_crossUser() throws Exception {
|
||||||
|
try {
|
||||||
|
mBinderService.areNotificationsEnabledForPackage(mContext.getPackageName(),
|
||||||
|
mUid + UserHandle.PER_USER_RANGE);
|
||||||
|
fail("Cannot call cross user without permission");
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
// pass
|
||||||
|
}
|
||||||
|
|
||||||
|
// cross user, with permission, no problem
|
||||||
|
TestablePermissions perms = mContext.getTestablePermissions();
|
||||||
|
perms.setPermission(android.Manifest.permission.INTERACT_ACROSS_USERS, PERMISSION_GRANTED);
|
||||||
|
mBinderService.areNotificationsEnabledForPackage(mContext.getPackageName(),
|
||||||
|
mUid + UserHandle.PER_USER_RANGE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user