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

Commit 277a5dc6 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

DO NOT MERGE: Ensure zen SystemConditions are subscribed

Test: ZenModeHelperTest
Bug: 112500368
Change-Id: I5ac4edcee5a6dc7c4877aa147016c09e53a0b033
parent d82da978
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.server.notification;
import android.content.ComponentName;
import android.content.ComponentName;
import android.net.Uri;
import android.net.Uri;
import android.service.notification.Condition;
import android.service.notification.Condition;
import android.service.notification.IConditionListener;
import android.service.notification.IConditionProvider;
import android.service.notification.IConditionProvider;
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig.ZenRule;
import android.service.notification.ZenModeConfig.ZenRule;
@@ -27,6 +26,8 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Log;
import android.util.Log;


import com.android.internal.annotations.VisibleForTesting;

import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.Objects;
import java.util.Objects;


@@ -36,7 +37,9 @@ public class ZenModeConditions implements ConditionProviders.Callback {


    private final ZenModeHelper mHelper;
    private final ZenModeHelper mHelper;
    private final ConditionProviders mConditionProviders;
    private final ConditionProviders mConditionProviders;
    private final ArrayMap<Uri, ComponentName> mSubscriptions = new ArrayMap<>();

    @VisibleForTesting
    protected final ArrayMap<Uri, ComponentName> mSubscriptions = new ArrayMap<>();


    private boolean mFirstEvaluation = true;
    private boolean mFirstEvaluation = true;


@@ -152,7 +155,8 @@ public class ZenModeConditions implements ConditionProviders.Callback {
        if (current != null) {
        if (current != null) {
            current.add(id);
            current.add(id);
        }
        }
        if (processSubscriptions && trigger != null && trigger.equals(rule.component)) {
        if (processSubscriptions && ((trigger != null && trigger.equals(rule.component))
                || isSystemCondition)) {
            if (DEBUG) Log.d(TAG, "Subscribing to " + rule.component);
            if (DEBUG) Log.d(TAG, "Subscribing to " + rule.component);
            if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) {
            if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) {
                synchronized (mSubscriptions) {
                synchronized (mSubscriptions) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -102,7 +102,7 @@ public class ZenModeHelper {
    private final ZenModeFiltering mFiltering;
    private final ZenModeFiltering mFiltering;
    protected final RingerModeDelegate mRingerModeDelegate = new
    protected final RingerModeDelegate mRingerModeDelegate = new
            RingerModeDelegate();
            RingerModeDelegate();
    private final ZenModeConditions mConditions;
    @VisibleForTesting protected final ZenModeConditions mConditions;
    private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>();
    private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>();
    private final Metrics mMetrics = new Metrics();
    private final Metrics mMetrics = new Metrics();
    private final ConditionProviders.Config mServiceConfig;
    private final ConditionProviders.Config mServiceConfig;
+32 −1
Original line number Original line Diff line number Diff line
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.AppOpsManager;
import android.app.NotificationManager;
import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.ComponentName;
@@ -49,8 +50,10 @@ import android.media.AudioManager;
import android.media.AudioManagerInternal;
import android.media.AudioManagerInternal;
import android.media.VolumePolicy;
import android.media.VolumePolicy;
import android.media.AudioSystem;
import android.media.AudioSystem;
import android.net.Uri;
import android.provider.Settings;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.provider.Settings.Global;
import android.service.notification.Condition;
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig.ScheduleInfo;
import android.service.notification.ZenModeConfig.ScheduleInfo;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;
@@ -61,6 +64,7 @@ import android.util.Xml;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.server.notification.ManagedServices.UserProfiles;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.FastXmlSerializer;
import com.android.server.UiServiceTestCase;
import com.android.server.UiServiceTestCase;
import android.util.Slog;
import android.util.Slog;
@@ -83,7 +87,7 @@ import java.io.ByteArrayOutputStream;
@TestableLooper.RunWithLooper
@TestableLooper.RunWithLooper
public class ZenModeHelperTest extends UiServiceTestCase {
public class ZenModeHelperTest extends UiServiceTestCase {


    @Mock ConditionProviders mConditionProviders;
    ConditionProviders mConditionProviders;
    @Mock NotificationManager mNotificationManager;
    @Mock NotificationManager mNotificationManager;
    @Mock private Resources mResources;
    @Mock private Resources mResources;
    private TestableLooper mTestableLooper;
    private TestableLooper mTestableLooper;
@@ -103,6 +107,9 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        when(mResources.getString(R.string.zen_mode_default_events_name)).thenReturn("events");
        when(mResources.getString(R.string.zen_mode_default_events_name)).thenReturn("events");
        when(mContext.getSystemService(NotificationManager.class)).thenReturn(mNotificationManager);
        when(mContext.getSystemService(NotificationManager.class)).thenReturn(mNotificationManager);


        mConditionProviders = new ConditionProviders(mContext, new UserProfiles(),
                AppGlobals.getPackageManager());
        mConditionProviders.addSystemProvider(new CountdownConditionProvider());
        mZenModeHelperSpy = spy(new ZenModeHelper(mContext, mTestableLooper.getLooper(),
        mZenModeHelperSpy = spy(new ZenModeHelper(mContext, mTestableLooper.getLooper(),
                mConditionProviders));
                mConditionProviders));
    }
    }
@@ -813,6 +820,30 @@ public class ZenModeHelperTest extends UiServiceTestCase {
        setupZenConfigMaintained();
        setupZenConfigMaintained();
    }
    }


    @Test
    public void testCountdownConditionSubscription() throws Exception {
        ZenModeConfig config = new ZenModeConfig();
        mZenModeHelperSpy.mConfig = config;
        mZenModeHelperSpy.mConditions.evaluateConfig(mZenModeHelperSpy.mConfig, null, true);
        assertEquals(0, mZenModeHelperSpy.mConditions.mSubscriptions.size());

        mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule();
        Uri conditionId = ZenModeConfig.toCountdownConditionId(9000000, false);
        mZenModeHelperSpy.mConfig.manualRule.conditionId = conditionId;
        mZenModeHelperSpy.mConfig.manualRule.component = new ComponentName("android",
                CountdownConditionProvider.class.getName());
        mZenModeHelperSpy.mConfig.manualRule.condition = new Condition(conditionId, "", "", "", 0,
                Condition.STATE_TRUE, Condition.FLAG_RELEVANT_NOW);
        mZenModeHelperSpy.mConfig.manualRule.enabled = true;
        ZenModeConfig originalConfig = mZenModeHelperSpy.mConfig.copy();

        mZenModeHelperSpy.mConditions.evaluateConfig(mZenModeHelperSpy.mConfig, null, true);

        assertEquals(true, ZenModeConfig.isValidCountdownConditionId(conditionId));
        assertEquals(originalConfig, mZenModeHelperSpy.mConfig);
        assertEquals(1, mZenModeHelperSpy.mConditions.mSubscriptions.size());
    }

    private void setupZenConfig() {
    private void setupZenConfig() {
        mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        mZenModeHelperSpy.mConfig.allowAlarms = false;
        mZenModeHelperSpy.mConfig.allowAlarms = false;