Loading core/java/android/app/INotificationManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -222,7 +222,7 @@ interface INotificationManager boolean removeAutomaticZenRule(String id, boolean fromUser); boolean removeAutomaticZenRules(String packageName, boolean fromUser); int getRuleInstanceCount(in ComponentName owner); void setAutomaticZenRuleState(String id, in Condition condition, boolean fromUser); void setAutomaticZenRuleState(String id, in Condition condition); byte[] getBackupPayload(int user); void applyRestore(in byte[] payload, int user); Loading core/java/android/app/NotificationManager.java +1 −12 Original line number Diff line number Diff line Loading @@ -1391,20 +1391,9 @@ public class NotificationManager { * @param condition The new state of this rule */ public void setAutomaticZenRuleState(@NonNull String id, @NonNull Condition condition) { if (Flags.modesApi()) { setAutomaticZenRuleState(id, condition, /* fromUser= */ condition.source == Condition.SOURCE_USER_ACTION); } else { setAutomaticZenRuleState(id, condition, /* fromUser= */ false); } } /** @hide */ public void setAutomaticZenRuleState(@NonNull String id, @NonNull Condition condition, boolean fromUser) { INotificationManager service = getService(); try { service.setAutomaticZenRuleState(id, condition, fromUser); service.setAutomaticZenRuleState(id, condition); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading services/core/java/com/android/server/notification/NotificationManagerService.java +3 −10 Original line number Diff line number Diff line Loading @@ -5472,20 +5472,13 @@ public class NotificationManagerService extends SystemService { } @Override public void setAutomaticZenRuleState(String id, Condition condition, boolean fromUser) { public void setAutomaticZenRuleState(String id, Condition condition) { Objects.requireNonNull(id, "id is null"); Objects.requireNonNull(condition, "Condition is null"); condition.validate(); enforcePolicyAccess(Binder.getCallingUid(), "setAutomaticZenRuleState"); if (android.app.Flags.modesApi()) { if (fromUser != (condition.source == Condition.SOURCE_USER_ACTION)) { throw new IllegalArgumentException(String.format( "Mismatch between fromUser (%s) and condition.source (%s)", fromUser, Condition.sourceToString(condition.source))); } } boolean fromUser = (condition.source == Condition.SOURCE_USER_ACTION); mZenModeHelper.setAutomaticZenRuleState(id, condition, computeZenOrigin(fromUser), Binder.getCallingUid()); Loading @@ -5508,7 +5501,7 @@ public class NotificationManagerService extends SystemService { if (android.app.Flags.modesApi() && fromUser && !isCallerSystemOrSystemUiOrShell()) { throw new SecurityException(String.format( throw new SecurityException(TextUtils.formatSimple( "Calling %s with fromUser == true is only allowed for system", method)); } } Loading services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +22 −17 Original line number Diff line number Diff line Loading @@ -9258,41 +9258,46 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromUserMatchesConditionSource_okay() throws Exception { public void setAutomaticZenRuleState_conditionFromUser_mappedToOriginUser() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.setCallerIsNormalPackage(); Condition withSourceContext = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_CONTEXT); mBinderService.setAutomaticZenRuleState("id", withSourceContext, /* fromUser= */ false); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceContext), eq(ZenModeConfig.UPDATE_ORIGIN_APP), anyInt()); Condition withSourceUser = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_USER_ACTION); mBinderService.setAutomaticZenRuleState("id", withSourceUser, /* fromUser= */ true); mBinderService.setAutomaticZenRuleState("id", withSourceUser); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceUser), eq(ZenModeConfig.UPDATE_ORIGIN_USER), anyInt()); } @Test @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromUserDoesNotMatchConditionSource_blocked() public void setAutomaticZenRuleState_fromAppWithConditionNotFromUser_mappedToOriginApp() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.setCallerIsNormalPackage(); Condition withSourceContext = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_CONTEXT); assertThrows(IllegalArgumentException.class, () -> mBinderService.setAutomaticZenRuleState("id", withSourceContext, /* fromUser= */ true)); mBinderService.setAutomaticZenRuleState("id", withSourceContext); Condition withSourceUser = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_USER_ACTION); assertThrows(IllegalArgumentException.class, () -> mBinderService.setAutomaticZenRuleState("id", withSourceUser, /* fromUser= */ false)); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceContext), eq(ZenModeConfig.UPDATE_ORIGIN_APP), anyInt()); } @Test @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromSystemWithConditionNotFromUser_mappedToOriginSystem() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.isSystemUid = true; Condition withSourceContext = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_CONTEXT); mBinderService.setAutomaticZenRuleState("id", withSourceContext); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceContext), eq(ZenModeConfig.UPDATE_ORIGIN_SYSTEM_OR_SYSTEMUI), anyInt()); } private ZenModeHelper setUpMockZenTest() { Loading Loading
core/java/android/app/INotificationManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -222,7 +222,7 @@ interface INotificationManager boolean removeAutomaticZenRule(String id, boolean fromUser); boolean removeAutomaticZenRules(String packageName, boolean fromUser); int getRuleInstanceCount(in ComponentName owner); void setAutomaticZenRuleState(String id, in Condition condition, boolean fromUser); void setAutomaticZenRuleState(String id, in Condition condition); byte[] getBackupPayload(int user); void applyRestore(in byte[] payload, int user); Loading
core/java/android/app/NotificationManager.java +1 −12 Original line number Diff line number Diff line Loading @@ -1391,20 +1391,9 @@ public class NotificationManager { * @param condition The new state of this rule */ public void setAutomaticZenRuleState(@NonNull String id, @NonNull Condition condition) { if (Flags.modesApi()) { setAutomaticZenRuleState(id, condition, /* fromUser= */ condition.source == Condition.SOURCE_USER_ACTION); } else { setAutomaticZenRuleState(id, condition, /* fromUser= */ false); } } /** @hide */ public void setAutomaticZenRuleState(@NonNull String id, @NonNull Condition condition, boolean fromUser) { INotificationManager service = getService(); try { service.setAutomaticZenRuleState(id, condition, fromUser); service.setAutomaticZenRuleState(id, condition); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +3 −10 Original line number Diff line number Diff line Loading @@ -5472,20 +5472,13 @@ public class NotificationManagerService extends SystemService { } @Override public void setAutomaticZenRuleState(String id, Condition condition, boolean fromUser) { public void setAutomaticZenRuleState(String id, Condition condition) { Objects.requireNonNull(id, "id is null"); Objects.requireNonNull(condition, "Condition is null"); condition.validate(); enforcePolicyAccess(Binder.getCallingUid(), "setAutomaticZenRuleState"); if (android.app.Flags.modesApi()) { if (fromUser != (condition.source == Condition.SOURCE_USER_ACTION)) { throw new IllegalArgumentException(String.format( "Mismatch between fromUser (%s) and condition.source (%s)", fromUser, Condition.sourceToString(condition.source))); } } boolean fromUser = (condition.source == Condition.SOURCE_USER_ACTION); mZenModeHelper.setAutomaticZenRuleState(id, condition, computeZenOrigin(fromUser), Binder.getCallingUid()); Loading @@ -5508,7 +5501,7 @@ public class NotificationManagerService extends SystemService { if (android.app.Flags.modesApi() && fromUser && !isCallerSystemOrSystemUiOrShell()) { throw new SecurityException(String.format( throw new SecurityException(TextUtils.formatSimple( "Calling %s with fromUser == true is only allowed for system", method)); } } Loading
services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +22 −17 Original line number Diff line number Diff line Loading @@ -9258,41 +9258,46 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromUserMatchesConditionSource_okay() throws Exception { public void setAutomaticZenRuleState_conditionFromUser_mappedToOriginUser() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.setCallerIsNormalPackage(); Condition withSourceContext = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_CONTEXT); mBinderService.setAutomaticZenRuleState("id", withSourceContext, /* fromUser= */ false); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceContext), eq(ZenModeConfig.UPDATE_ORIGIN_APP), anyInt()); Condition withSourceUser = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_USER_ACTION); mBinderService.setAutomaticZenRuleState("id", withSourceUser, /* fromUser= */ true); mBinderService.setAutomaticZenRuleState("id", withSourceUser); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceUser), eq(ZenModeConfig.UPDATE_ORIGIN_USER), anyInt()); } @Test @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromUserDoesNotMatchConditionSource_blocked() public void setAutomaticZenRuleState_fromAppWithConditionNotFromUser_mappedToOriginApp() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.setCallerIsNormalPackage(); Condition withSourceContext = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_CONTEXT); assertThrows(IllegalArgumentException.class, () -> mBinderService.setAutomaticZenRuleState("id", withSourceContext, /* fromUser= */ true)); mBinderService.setAutomaticZenRuleState("id", withSourceContext); Condition withSourceUser = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_USER_ACTION); assertThrows(IllegalArgumentException.class, () -> mBinderService.setAutomaticZenRuleState("id", withSourceUser, /* fromUser= */ false)); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceContext), eq(ZenModeConfig.UPDATE_ORIGIN_APP), anyInt()); } @Test @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromSystemWithConditionNotFromUser_mappedToOriginSystem() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.isSystemUid = true; Condition withSourceContext = new Condition(Uri.parse("uri"), "summary", STATE_TRUE, SOURCE_CONTEXT); mBinderService.setAutomaticZenRuleState("id", withSourceContext); verify(zenModeHelper).setAutomaticZenRuleState(eq("id"), eq(withSourceContext), eq(ZenModeConfig.UPDATE_ORIGIN_SYSTEM_OR_SYSTEMUI), anyInt()); } private ZenModeHelper setUpMockZenTest() { Loading