From 44e1baba39bb5751e2605574d3026c8f385532af Mon Sep 17 00:00:00 2001 From: Yuri Lin Date: Wed, 18 Aug 2021 15:49:57 -0400 Subject: [PATCH] Fix ZenPolicy -> NotificationManager.Policy for conversations setting. Unlike the priority senders (for messages and calls), the conversations setting uses the same enum in both ZenPolicy and NotificationManager.Policy, so the extraneous call to getNotificationPolicySenders resulted in an incorrect value in conversion. Bug: 197223270 Test: atest ZenModeConfigTest Change-Id: Ifa135ba9869ae1a2d3bffe5ec40f411eee197d7e --- .../service/notification/ZenModeConfig.java | 19 +++++++++++++++---- .../notification/ZenModeConfigTest.java | 12 +++++++----- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index 45bdb110634ce..c1d5a28aa349b 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -1051,9 +1051,8 @@ public class ZenModeConfig implements Parcelable { if (zenPolicy.isCategoryAllowed(ZenPolicy.PRIORITY_CATEGORY_CONVERSATIONS, isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_CONVERSATIONS, defaultPolicy))) { priorityCategories |= Policy.PRIORITY_CATEGORY_CONVERSATIONS; - conversationSenders = getNotificationPolicySenders( - zenPolicy.getPriorityConversationSenders(), - conversationSenders); + conversationSenders = getConversationSendersWithDefault( + zenPolicy.getPriorityConversationSenders(), conversationSenders); } if (zenPolicy.isCategoryAllowed(ZenPolicy.PRIORITY_CATEGORY_CALLS, @@ -1166,6 +1165,17 @@ public class ZenModeConfig implements Parcelable { } } + private int getConversationSendersWithDefault(@ZenPolicy.ConversationSenders int senders, + int defaultPolicySender) { + switch (senders) { + case ZenPolicy.CONVERSATION_SENDERS_ANYONE: + case ZenPolicy.CONVERSATION_SENDERS_IMPORTANT: + case ZenPolicy.CONVERSATION_SENDERS_NONE: + return senders; + default: + return defaultPolicySender; + } + } /** * Maps NotificationManager.Policy senders type to ZenPolicy.PeopleType @@ -1216,7 +1226,8 @@ public class ZenModeConfig implements Parcelable { } priorityCallSenders = sourceToPrioritySenders(allowCallsFrom, priorityCallSenders); priorityMessageSenders = sourceToPrioritySenders(allowMessagesFrom, priorityMessageSenders); - priorityConversationSenders = allowConversationsFrom; + priorityConversationSenders = getConversationSendersWithDefault( + allowConversationsFrom, priorityConversationSenders); return new Policy(priorityCategories, priorityCallSenders, priorityMessageSenders, suppressedVisualEffects, areChannelsBypassingDnd diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java index 733d3f0f66efb..9dca23566b98e 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java @@ -16,6 +16,8 @@ package com.android.server.notification; +import static android.service.notification.ZenPolicy.CONVERSATION_SENDERS_IMPORTANT; + import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertNull; @@ -36,13 +38,10 @@ import android.util.Xml; import androidx.test.runner.AndroidJUnit4; -import com.android.internal.util.FastXmlSerializer; import com.android.server.UiServiceTestCase; import org.junit.Test; import org.junit.runner.RunWith; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlSerializer; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -81,10 +80,12 @@ public class ZenModeConfigTest extends UiServiceTestCase { ZenModeConfig config = getMutedAllConfig(); config.suppressedVisualEffects |= Policy.SUPPRESSED_EFFECT_BADGE; + // Explicitly allow conversations from priority senders to make sure that goes through ZenPolicy zenPolicy = new ZenPolicy.Builder() .allowAlarms(true) .allowReminders(true) .allowEvents(true) + .allowConversations(CONVERSATION_SENDERS_IMPORTANT) .showLights(false) .showInAmbientDisplay(false) .build(); @@ -93,11 +94,12 @@ public class ZenModeConfigTest extends UiServiceTestCase { int priorityCategories = originalPolicy.priorityCategories; int priorityCallSenders = originalPolicy.priorityCallSenders; int priorityMessageSenders = originalPolicy.priorityMessageSenders; - int priorityConversationsSenders = originalPolicy.priorityConversationSenders; + int priorityConversationsSenders = CONVERSATION_SENDERS_IMPORTANT; int suppressedVisualEffects = originalPolicy.suppressedVisualEffects; priorityCategories |= Policy.PRIORITY_CATEGORY_ALARMS; priorityCategories |= Policy.PRIORITY_CATEGORY_REMINDERS; priorityCategories |= Policy.PRIORITY_CATEGORY_EVENTS; + priorityCategories |= Policy.PRIORITY_CATEGORY_CONVERSATIONS; suppressedVisualEffects |= Policy.SUPPRESSED_EFFECT_LIGHTS; suppressedVisualEffects |= Policy.SUPPRESSED_EFFECT_AMBIENT; @@ -344,7 +346,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { config.allowCallsFrom = ZenModeConfig.SOURCE_ANYONE; config.allowMessagesFrom = ZenModeConfig.SOURCE_ANYONE; config.allowConversations = true; - config.allowConversationsFrom = ZenPolicy.CONVERSATION_SENDERS_IMPORTANT; + config.allowConversationsFrom = CONVERSATION_SENDERS_IMPORTANT; config.suppressedVisualEffects = 0; return config;