Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 274e3664 authored by Matías Hernández's avatar Matías Hernández
Browse files

Remove setAutomaticZenRuleState(boolean fromUser) overload

This is a leftover from the first approach, where fromUser was always false and Condition.source not directly checked in NMS. With both changed, it doesn't make sense to supply the exact same information in two parameters (and validate they match!); we can rely on Condition.source only.

(Also resolve a "follow-up" comment from the previous CL about TextUtils.formatSimple).

Bug: 308670715
Test: atest NotificationManagerZenTest
Change-Id: I0e49427636c6735748d9157262c8dd8c76fc7a56
parent 55171cfd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −12
Original line number Diff line number Diff line
@@ -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();
        }
+3 −10
Original line number Diff line number Diff line
@@ -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());
@@ -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));
            }
        }
+22 −17
Original line number Diff line number Diff line
@@ -9261,41 +9261,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() {