Add info on whether the rule is active to ZenMode

modifying the corresponding methods on ZenModesBackend to collect that information from NotificationManager.

Bug: 327419222
Test: ZenModesBackendTest, ZenModeTest
Change-Id: I01cb0ffa21a7fecaa5128cec51ced3eff384f370
This commit is contained in:
Yuri Lin
2024-04-17 18:32:04 -04:00
parent aafecbef69
commit af82199317
4 changed files with 157 additions and 44 deletions

View File

@@ -75,20 +75,22 @@ class ZenMode {
private final String mId;
private final AutomaticZenRule mRule;
private boolean mIsActive;
private final boolean mIsManualDnd;
ZenMode(String id, AutomaticZenRule rule) {
this(id, rule, false);
ZenMode(String id, AutomaticZenRule rule, boolean isActive) {
this(id, rule, isActive, false);
}
private ZenMode(String id, AutomaticZenRule rule, boolean isManualDnd) {
private ZenMode(String id, AutomaticZenRule rule, boolean isActive, boolean isManualDnd) {
mId = id;
mRule = rule;
mIsActive = isActive;
mIsManualDnd = isManualDnd;
}
static ZenMode manualDndMode(AutomaticZenRule dndPolicyAsRule) {
return new ZenMode(MANUAL_DND_MODE_ID, dndPolicyAsRule, true);
static ZenMode manualDndMode(AutomaticZenRule dndPolicyAsRule, boolean isActive) {
return new ZenMode(MANUAL_DND_MODE_ID, dndPolicyAsRule, isActive, true);
}
@NonNull
@@ -190,11 +192,16 @@ class ZenMode {
return mIsManualDnd;
}
public boolean isActive() {
return mIsActive;
}
@Override
public boolean equals(@Nullable Object obj) {
return obj instanceof ZenMode other
&& mId.equals(other.mId)
&& mRule.equals(other.mRule);
&& mRule.equals(other.mRule)
&& mIsActive == other.mIsActive;
}
@Override
@@ -204,6 +211,6 @@ class ZenMode {
@Override
public String toString() {
return mId + " -> " + mRule;
return mId + "(" + (mIsActive ? "active" : "inactive") + ") -> " + mRule;
}
}

View File

@@ -67,11 +67,14 @@ class ZenModesBackend {
List<ZenMode> getModes() {
ArrayList<ZenMode> modes = new ArrayList<>();
modes.add(getManualDndMode());
ZenModeConfig currentConfig = mNotificationManager.getZenModeConfig();
modes.add(getManualDndMode(currentConfig));
Map<String, AutomaticZenRule> zenRules = mNotificationManager.getAutomaticZenRules();
for (Map.Entry<String, AutomaticZenRule> zenRuleEntry : zenRules.entrySet()) {
modes.add(new ZenMode(zenRuleEntry.getKey(), zenRuleEntry.getValue()));
String ruleId = zenRuleEntry.getKey();
modes.add(new ZenMode(ruleId, zenRuleEntry.getValue(),
isRuleActive(ruleId, currentConfig)));
}
// TODO: b/331429435 - Sort modes.
@@ -80,15 +83,20 @@ class ZenModesBackend {
@Nullable
ZenMode getMode(String id) {
ZenModeConfig currentConfig = mNotificationManager.getZenModeConfig();
if (ZenMode.MANUAL_DND_MODE_ID.equals(id)) {
return getManualDndMode();
// Regardless of its contents, non-null manualRule means that manual rule is active.
return getManualDndMode(currentConfig);
} else {
AutomaticZenRule rule = mNotificationManager.getAutomaticZenRule(id);
return rule != null ? new ZenMode(id, rule) : null;
if (rule == null) {
return null;
}
return new ZenMode(id, rule, isRuleActive(id, currentConfig));
}
}
private ZenMode getManualDndMode() {
private ZenMode getManualDndMode(ZenModeConfig config) {
// TODO: b/333530553 - Read ZenDeviceEffects of manual DND.
// TODO: b/333682392 - Replace with final strings for name & trigger description
AutomaticZenRule manualDndRule = new AutomaticZenRule.Builder(
@@ -103,7 +111,17 @@ class ZenModesBackend {
.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY)
.build();
return ZenMode.manualDndMode(manualDndRule);
return ZenMode.manualDndMode(manualDndRule,
config != null && config.manualRule != null); // isActive
}
private static boolean isRuleActive(String id, ZenModeConfig config) {
if (config == null) {
// shouldn't happen if the config is coming from NM, but be safe
return false;
}
ZenModeConfig.ZenRule configRule = config.automaticRules.get(id);
return configRule != null && configRule.isAutomaticActive();
}
void updateMode(ZenMode mode) {