Use consolidated zen policy for dnd
Instead of using the default notification policy,
use the consolidated zen policy when do not disturb
is in priority only dnd mode
Bug: 111474881
Test: atest ZenModeHelperTest ZenPolicyTest ZenModeFilteringTest AudioManagerTest
Test: atest SystemUITests ZenModeExtractorTest
Change-Id: I88934103a56f06d4a4f620a8f557347331a79627
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index b988c55..326df49 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -33,19 +33,19 @@
import android.os.Handler;
import android.provider.AlarmClock;
import android.service.notification.ZenModeConfig;
-import android.widget.FrameLayout;
-import androidx.annotation.VisibleForTesting;
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
import android.view.View;
import android.view.WindowInsets;
+import android.widget.FrameLayout;
import android.widget.ImageView;
-import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.Dependency;
@@ -56,8 +56,8 @@
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
-import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.phone.StatusIconContainer;
+import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.policy.DarkIconDispatcher;
import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.policy.DateView;
@@ -205,7 +205,7 @@
boolean ringerVisible = false;
if (!ZenModeConfig.isZenOverridingRinger(mZenController.getZen(),
- mZenController.getConfig())) {
+ mZenController.getConsolidatedPolicy())) {
if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_vibrate);
mRingerModeTextView.setText(R.string.qs_status_phone_vibrate);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 553165b..0e6efc8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -57,6 +57,7 @@
import android.util.ArraySet;
import android.util.Log;
import android.util.Pair;
+
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.TelephonyIntents;
@@ -391,7 +392,7 @@
zenDescription = mContext.getString(R.string.interruption_level_priority);
}
- if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConfig())) {
+ if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConsolidatedPolicy())) {
if (audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_vibrate;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java
index 4ee8059..ad19729 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.policy;
+import android.app.NotificationManager;
import android.content.ComponentName;
import android.net.Uri;
import android.service.notification.Condition;
@@ -29,6 +30,8 @@
int getZen();
ZenRule getManualRule();
ZenModeConfig getConfig();
+ /** Gets consolidated zen policy that will apply when DND is on in priority only mode */
+ NotificationManager.Policy getConsolidatedPolicy();
long getNextAlarm();
boolean isZenAvailable();
ComponentName getEffectsSuppressor();
@@ -45,6 +48,8 @@
default void onEffectsSupressorChanged() {}
default void onManualRuleChanged(ZenRule rule) {}
default void onConfigChanged(ZenModeConfig config) {}
+ /** Called when the consolidated zen policy changes */
+ default void onConsolidatedPolicyChanged(NotificationManager.Policy policy) {}
}
}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
index 8d2552f..89ccff0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
@@ -69,6 +69,7 @@
private ZenModeConfig mConfig;
private int mZenMode;
private long mZenUpdateTime;
+ private NotificationManager.Policy mConsolidatedNotificationPolicy;
public ZenModeControllerImpl(Context context, Handler handler) {
super(context);
@@ -91,6 +92,7 @@
updateZenMode(mModeSetting.getValue());
mConfigSetting.setListening(true);
updateZenModeConfig();
+ updateConsolidatedNotificationPolicy();
mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
mSetupObserver = new SetupObserver(handler);
mSetupObserver.register();
@@ -153,6 +155,11 @@
}
@Override
+ public NotificationManager.Policy getConsolidatedPolicy() {
+ return mConsolidatedNotificationPolicy;
+ }
+
+ @Override
public long getNextAlarm() {
final AlarmManager.AlarmClockInfo info = mAlarmManager.getNextAlarmClock(mUserId);
return info != null ? info.getTriggerTime() : 0;
@@ -217,6 +224,12 @@
}
}
+ private void fireConsolidatedPolicyChanged(NotificationManager.Policy policy) {
+ synchronized (mCallbacksLock) {
+ Utils.safeForeach(mCallbacks, c -> c.onConsolidatedPolicyChanged(policy));
+ }
+ }
+
@VisibleForTesting
protected void fireConfigChanged(ZenModeConfig config) {
synchronized (mCallbacksLock) {
@@ -231,6 +244,16 @@
}
@VisibleForTesting
+ protected void updateConsolidatedNotificationPolicy() {
+ final NotificationManager.Policy policy = mNoMan.getConsolidatedNotificationPolicy();
+ if (!Objects.equals(policy, mConsolidatedNotificationPolicy)) {
+ mConsolidatedNotificationPolicy = policy;
+ fireConsolidatedPolicyChanged(policy);
+ }
+ }
+
+
+ @VisibleForTesting
protected void updateZenModeConfig() {
final ZenModeConfig config = mNoMan.getZenModeConfig();
if (Objects.equals(config, mConfig)) return;
@@ -238,9 +261,19 @@
mConfig = config;
mZenUpdateTime = System.currentTimeMillis();
fireConfigChanged(config);
+
final ZenRule newRule = config != null ? config.manualRule : null;
- if (Objects.equals(oldRule, newRule)) return;
- fireManualRuleChanged(newRule);
+ if (!Objects.equals(oldRule, newRule)) {
+ fireManualRuleChanged(newRule);
+ }
+
+ final NotificationManager.Policy consolidatedPolicy =
+ mNoMan.getConsolidatedNotificationPolicy();
+ if (!Objects.equals(consolidatedPolicy, mConsolidatedNotificationPolicy)) {
+ mConsolidatedNotificationPolicy = consolidatedPolicy;
+ fireConsolidatedPolicyChanged(consolidatedPolicy);
+ }
+
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@@ -260,6 +293,7 @@
pw.println("ZenModeControllerImpl:");
pw.println(" mZenMode=" + mZenMode);
pw.println(" mConfig=" + mConfig);
+ pw.println(" mConsolidatedNotificationPolicy=" + mConsolidatedNotificationPolicy);
pw.println(" mZenUpdateTime=" + DateFormat.format("MM-dd HH:mm:ss", mZenUpdateTime));
}