Merge "Handle duplicate Uris in DND rules"
This commit is contained in:
committed by
Android (Google) Code Review
commit
b3bd7b4508
@@ -417,7 +417,9 @@ public class ZenModeHelper {
|
||||
if (mConfig == null) return;
|
||||
|
||||
newConfig = mConfig.copy();
|
||||
setAutomaticZenRuleStateLocked(newConfig, newConfig.automaticRules.get(id), condition);
|
||||
ArrayList<ZenRule> rules = new ArrayList<>();
|
||||
rules.add(newConfig.automaticRules.get(id));
|
||||
setAutomaticZenRuleStateLocked(newConfig, rules, condition);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,31 +430,34 @@ public class ZenModeHelper {
|
||||
newConfig = mConfig.copy();
|
||||
|
||||
setAutomaticZenRuleStateLocked(newConfig,
|
||||
findMatchingRule(newConfig, ruleDefinition, condition),
|
||||
findMatchingRules(newConfig, ruleDefinition, condition),
|
||||
condition);
|
||||
}
|
||||
}
|
||||
|
||||
private void setAutomaticZenRuleStateLocked(ZenModeConfig config, ZenRule rule,
|
||||
private void setAutomaticZenRuleStateLocked(ZenModeConfig config, List<ZenRule> rules,
|
||||
Condition condition) {
|
||||
if (rule == null) return;
|
||||
if (rules == null || rules.isEmpty()) return;
|
||||
|
||||
rule.condition = condition;
|
||||
updateSnoozing(rule);
|
||||
setConfigLocked(config, rule.component, "conditionChanged");
|
||||
for (ZenRule rule : rules) {
|
||||
rule.condition = condition;
|
||||
updateSnoozing(rule);
|
||||
setConfigLocked(config, rule.component, "conditionChanged");
|
||||
}
|
||||
}
|
||||
|
||||
private ZenRule findMatchingRule(ZenModeConfig config, Uri id, Condition condition) {
|
||||
private List<ZenRule> findMatchingRules(ZenModeConfig config, Uri id, Condition condition) {
|
||||
List<ZenRule> matchingRules= new ArrayList<>();
|
||||
if (ruleMatches(id, condition, config.manualRule)) {
|
||||
return config.manualRule;
|
||||
matchingRules.add(config.manualRule);
|
||||
} else {
|
||||
for (ZenRule automaticRule : config.automaticRules.values()) {
|
||||
if (ruleMatches(id, condition, automaticRule)) {
|
||||
return automaticRule;
|
||||
matchingRules.add(automaticRule);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return matchingRules;
|
||||
}
|
||||
|
||||
private boolean ruleMatches(Uri id, Condition condition, ZenRule rule) {
|
||||
|
||||
@@ -44,6 +44,7 @@ import static com.android.os.AtomsProto.DNDModeProto.ZEN_MODE_FIELD_NUMBER;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static junit.framework.TestCase.assertTrue;
|
||||
import static junit.framework.TestCase.fail;
|
||||
|
||||
@@ -1556,6 +1557,49 @@ public class ZenModeHelperTest extends UiServiceTestCase {
|
||||
assertEquals(zenRule.getName(), ruleInConfig.name);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRulesWithSameUri() {
|
||||
Uri sharedUri = ZenModeConfig.toScheduleConditionId(new ScheduleInfo());
|
||||
AutomaticZenRule zenRule = new AutomaticZenRule("name",
|
||||
new ComponentName("android", "ScheduleConditionProvider"),
|
||||
sharedUri,
|
||||
NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
|
||||
String id = mZenModeHelperSpy.addAutomaticZenRule(zenRule, "test");
|
||||
AutomaticZenRule zenRule2 = new AutomaticZenRule("name2",
|
||||
new ComponentName("android", "ScheduleConditionProvider"),
|
||||
sharedUri,
|
||||
NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
|
||||
String id2 = mZenModeHelperSpy.addAutomaticZenRule(zenRule2, "test");
|
||||
|
||||
Condition condition = new Condition(sharedUri, "", Condition.STATE_TRUE);
|
||||
mZenModeHelperSpy.setAutomaticZenRuleState(sharedUri, condition);
|
||||
|
||||
for (ZenModeConfig.ZenRule rule : mZenModeHelperSpy.mConfig.automaticRules.values()) {
|
||||
if (rule.id.equals(id)) {
|
||||
assertNotNull(rule.condition);
|
||||
assertTrue(rule.condition.state == Condition.STATE_TRUE);
|
||||
}
|
||||
if (rule.id.equals(id2)) {
|
||||
assertNotNull(rule.condition);
|
||||
assertTrue(rule.condition.state == Condition.STATE_TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
condition = new Condition(sharedUri, "", Condition.STATE_FALSE);
|
||||
mZenModeHelperSpy.setAutomaticZenRuleState(sharedUri, condition);
|
||||
|
||||
for (ZenModeConfig.ZenRule rule : mZenModeHelperSpy.mConfig.automaticRules.values()) {
|
||||
if (rule.id.equals(id)) {
|
||||
assertNotNull(rule.condition);
|
||||
assertTrue(rule.condition.state == Condition.STATE_FALSE);
|
||||
}
|
||||
if (rule.id.equals(id2)) {
|
||||
assertNotNull(rule.condition);
|
||||
assertTrue(rule.condition.state == Condition.STATE_FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setupZenConfig() {
|
||||
mZenModeHelperSpy.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||
mZenModeHelperSpy.mConfig.allowAlarms = false;
|
||||
|
||||
Reference in New Issue
Block a user