summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/notification/modes/TestModeBuilder.java23
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java27
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt2
4 files changed, 40 insertions, 15 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/modes/TestModeBuilder.java b/packages/SettingsLib/src/com/android/settingslib/notification/modes/TestModeBuilder.java
index 2c982d6a9fe2..f7492cfc9a72 100644
--- a/packages/SettingsLib/src/com/android/settingslib/notification/modes/TestModeBuilder.java
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/modes/TestModeBuilder.java
@@ -40,18 +40,17 @@ public class TestModeBuilder {
private ZenModeConfig.ZenRule mConfigZenRule;
public static final ZenMode EXAMPLE = new TestModeBuilder().build();
- public static final ZenMode MANUAL_DND_ACTIVE = ZenMode.manualDndMode(
- new AutomaticZenRule.Builder("Do Not Disturb", Uri.parse("rule://dnd"))
- .setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY)
- .setZenPolicy(new ZenPolicy.Builder().disallowAllSounds().build())
- .build(),
- /* isActive= */ true);
- public static final ZenMode MANUAL_DND_INACTIVE = ZenMode.manualDndMode(
- new AutomaticZenRule.Builder("Do Not Disturb", Uri.parse("rule://dnd"))
- .setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY)
- .setZenPolicy(new ZenPolicy.Builder().disallowAllSounds().build())
- .build(),
- /* isActive= */ false);
+ public static final ZenMode MANUAL_DND_ACTIVE = manualDnd(Uri.EMPTY, true);
+ public static final ZenMode MANUAL_DND_INACTIVE = manualDnd(Uri.EMPTY, false);
+
+ public static ZenMode manualDnd(Uri conditionId, boolean isActive) {
+ return ZenMode.manualDndMode(
+ new AutomaticZenRule.Builder("Do Not Disturb", conditionId)
+ .setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY)
+ .setZenPolicy(new ZenPolicy.Builder().disallowAllSounds().build())
+ .build(),
+ isActive);
+ }
public TestModeBuilder() {
// Reasonable defaults
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java
index 88497a393ce8..2f4b2efeec7f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java
@@ -22,6 +22,7 @@ import static android.app.NotificationManager.INTERRUPTION_FILTER_ALL;
import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY;
import static android.service.notification.SystemZenRules.getTriggerDescriptionForScheduleEvent;
import static android.service.notification.SystemZenRules.getTriggerDescriptionForScheduleTime;
+import static android.service.notification.ZenModeConfig.tryParseCountdownConditionId;
import static android.service.notification.ZenModeConfig.tryParseEventConditionId;
import static android.service.notification.ZenModeConfig.tryParseScheduleConditionId;
@@ -188,11 +189,37 @@ public class ZenMode implements Parcelable {
return mRule.getType();
}
+ /** Returns the trigger description of the mode. */
@Nullable
public String getTriggerDescription() {
return mRule.getTriggerDescription();
}
+ /**
+ * Returns a "dynamic" trigger description. For some modes (such as manual Do Not Disturb)
+ * when activated, we know when (and if) the mode is expected to end on its own; this dynamic
+ * description reflects that. In other cases, returns {@link #getTriggerDescription}.
+ */
+ @Nullable
+ public String getDynamicDescription(Context context) {
+ if (isManualDnd() && isActive()) {
+ long countdownEndTime = tryParseCountdownConditionId(mRule.getConditionId());
+ if (countdownEndTime > 0) {
+ CharSequence formattedTime = ZenModeConfig.getFormattedTime(context,
+ countdownEndTime, ZenModeConfig.isToday(countdownEndTime),
+ context.getUserId());
+ return context.getString(com.android.internal.R.string.zen_mode_until,
+ formattedTime);
+ }
+ }
+ // TODO: b/333527800 - For TYPE_SCHEDULE_TIME rules we could do the same; however
+ // according to the snoozing discussions the mode may or may not end at the scheduled
+ // time if manually activated. When we resolve that point, we could calculate end time
+ // for these modes as well.
+
+ return getTriggerDescription();
+ }
+
@NonNull
public ListenableFuture<Drawable> getIcon(@NonNull Context context,
@NonNull ZenIconLoader iconLoader) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java
index f533c951d7f8..492828d701b9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java
@@ -116,7 +116,6 @@ public class ZenModesBackend {
private ZenMode getManualDndMode(ZenModeConfig config) {
ZenModeConfig.ZenRule manualRule = config.manualRule;
- // TODO: b/333682392 - Replace with final strings for name & trigger description
AutomaticZenRule manualDndRule = new AutomaticZenRule.Builder(
mContext.getString(R.string.zen_mode_settings_title), manualRule.conditionId)
.setType(manualRule.type)
@@ -127,7 +126,7 @@ public class ZenModesBackend {
.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY)
.build();
- return ZenMode.manualDndMode(manualDndRule, config != null && config.isManualActive());
+ return ZenMode.manualDndMode(manualDndRule, config.isManualActive());
}
public void updateMode(ZenMode mode) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt
index b7531b0e2e0f..44b692fcb786 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt
@@ -131,7 +131,7 @@ constructor(
val on = context.resources.getString(R.string.zen_mode_on)
val off = context.resources.getString(R.string.zen_mode_off)
- return mode.rule.triggerDescription ?: if (mode.isActive) on else off
+ return mode.getDynamicDescription(context) ?: if (mode.isActive) on else off
}
private fun makeZenModeDialog(): Dialog {