diff options
| author | 2018-04-13 19:56:20 +0000 | |
|---|---|---|
| committer | 2018-04-13 19:56:20 +0000 | |
| commit | a668c663019dcabe62d1f667ec5402806a22b0a8 (patch) | |
| tree | b49449dd559ce7c717750d9da9684fdfce5ce481 | |
| parent | 3ab97957febb312fd01c7a864d48fe6b79e4047f (diff) | |
| parent | 50322ff03187276bc2f2237f52329f8da9014f8e (diff) | |
Merge "Allow Device Owners/Profile Owners to set the interruption filter." into pi-dev
2 files changed, 19 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index c6886da55dfc..d5b2ee346187 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -98,6 +98,8 @@ import android.app.NotificationManager; import android.app.NotificationManager.Policy; import android.app.PendingIntent; import android.app.StatusBarManager; +import android.app.admin.DeviceAdminInfo; +import android.app.admin.DevicePolicyManagerInternal; import android.app.backup.BackupManager; import android.app.usage.UsageEvents; import android.app.usage.UsageStatsManagerInternal; @@ -366,6 +368,7 @@ public class NotificationManagerService extends SystemService { private AppOpsManager mAppOps; private UsageStatsManagerInternal mAppUsageStats; + private DevicePolicyManagerInternal mDpm; private Archive mArchive; @@ -1355,7 +1358,7 @@ public class NotificationManagerService extends SystemService { ICompanionDeviceManager companionManager, SnoozeHelper snoozeHelper, NotificationUsageStats usageStats, AtomicFile policyFile, ActivityManager activityManager, GroupHelper groupHelper, IActivityManager am, - UsageStatsManagerInternal appUsageStats) { + UsageStatsManagerInternal appUsageStats, DevicePolicyManagerInternal dpm) { Resources resources = getContext().getResources(); mMaxPackageEnqueueRate = Settings.Global.getFloat(getContext().getContentResolver(), Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE, @@ -1374,6 +1377,8 @@ public class NotificationManagerService extends SystemService { mActivityManager = activityManager; mDeviceIdleController = IDeviceIdleController.Stub.asInterface( ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); + mDpm = dpm; + try { mPermissionOwner = mAm.newUriPermissionOwner("notification"); } catch (RemoteException e) { @@ -1512,7 +1517,8 @@ public class NotificationManagerService extends SystemService { new AtomicFile(new File(systemDir, "notification_policy.xml"), "notification-policy"), (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE), getGroupHelper(), ActivityManager.getService(), - LocalServices.getService(UsageStatsManagerInternal.class)); + LocalServices.getService(UsageStatsManagerInternal.class), + LocalServices.getService(DevicePolicyManagerInternal.class)); // register for various Intents IntentFilter filter = new IntentFilter(); @@ -3090,8 +3096,8 @@ public class NotificationManagerService extends SystemService { private boolean checkPolicyAccess(String pkg) { try { - int uid = getContext().getPackageManager().getPackageUidAsUser( - pkg, UserHandle.getCallingUserId()); + int uid = getContext().getPackageManager().getPackageUidAsUser(pkg, + UserHandle.getCallingUserId()); if (PackageManager.PERMISSION_GRANTED == ActivityManager.checkComponentPermission( android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true)) { @@ -3100,7 +3106,11 @@ public class NotificationManagerService extends SystemService { } catch (NameNotFoundException e) { return false; } - return checkPackagePolicyAccess(pkg) || mListeners.isComponentEnabledForPackage(pkg); + return checkPackagePolicyAccess(pkg) + || mListeners.isComponentEnabledForPackage(pkg) + || (mDpm != null && + mDpm.isActiveAdminWithPolicy(Binder.getCallingUid(), + DeviceAdminInfo.USES_POLICY_PROFILE_OWNER)); } @Override diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 14f84b1feca2..9d5d263ad5af 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -68,6 +68,8 @@ import android.app.Notification.MessagingStyle.Message; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; import android.app.NotificationManager; +import android.app.admin.DeviceAdminInfo; +import android.app.admin.DevicePolicyManagerInternal; import android.app.usage.UsageStatsManagerInternal; import android.companion.ICompanionDeviceManager; import android.content.ComponentName; @@ -265,7 +267,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mPackageManager, mPackageManagerClient, mockLightsManager, mListeners, mAssistants, mConditionProviders, mCompanionMgr, mSnoozeHelper, mUsageStats, mPolicyFile, mActivityManager, - mGroupHelper, mAm, mock(UsageStatsManagerInternal.class)); + mGroupHelper, mAm, mock(UsageStatsManagerInternal.class), + mock(DevicePolicyManagerInternal.class)); } catch (SecurityException e) { if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) { throw e; |