summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt1
-rw-r--r--api/system-current.txt1
-rw-r--r--core/java/android/provider/Settings.java2
-rw-r--r--core/java/android/service/notification/NotificationListenerService.java6
-rw-r--r--packages/SystemUI/res/layout/segmented_button.xml4
-rw-r--r--packages/SystemUI/res/layout/volume_zen_footer.xml2
-rw-r--r--packages/SystemUI/res/layout/zen_mode_condition.xml4
-rw-r--r--packages/SystemUI/res/layout/zen_mode_panel.xml5
-rw-r--r--packages/SystemUI/res/values/strings.xml19
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/Events.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java14
-rw-r--r--services/core/java/com/android/server/notification/ZenLog.java1
-rw-r--r--services/core/java/com/android/server/notification/ZenModeHelper.java19
16 files changed, 80 insertions, 14 deletions
diff --git a/api/current.txt b/api/current.txt
index 25a8a0bcf38e..3aa62a8d9274 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -28049,6 +28049,7 @@ package android.service.notification {
method public final void requestInterruptionFilter(int);
method public final void requestListenerHints(int);
field public static final int HINT_HOST_DISABLE_EFFECTS = 1; // 0x1
+ field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
diff --git a/api/system-current.txt b/api/system-current.txt
index 6a02d9e6269b..f9c0ea22f798 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -30074,6 +30074,7 @@ package android.service.notification {
method public final void setOnNotificationPostedTrim(int);
method public void unregisterAsSystemService() throws android.os.RemoteException;
field public static final int HINT_HOST_DISABLE_EFFECTS = 1; // 0x1
+ field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index f79ef35642a5..ec7e8b2a6ab8 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -7110,9 +7110,11 @@ public final class Settings {
/** @hide */ public static final int ZEN_MODE_OFF = 0;
/** @hide */ public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1;
/** @hide */ public static final int ZEN_MODE_NO_INTERRUPTIONS = 2;
+ /** @hide */ public static final int ZEN_MODE_ALARMS = 3;
/** @hide */ public static String zenModeToString(int mode) {
if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS";
+ if (mode == ZEN_MODE_ALARMS) return "ZEN_MODE_ALARMS";
if (mode == ZEN_MODE_NO_INTERRUPTIONS) return "ZEN_MODE_NO_INTERRUPTIONS";
return "ZEN_MODE_OFF";
}
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 0860153988ec..fa782e41c20c 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -77,6 +77,12 @@ public abstract class NotificationListenerService extends Service {
*/
public static final int INTERRUPTION_FILTER_NONE = 3;
+ /**
+ * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
+ * Alarms only interruption filter.
+ */
+ public static final int INTERRUPTION_FILTER_ALARMS = 4;
+
/** {@link #getCurrentInterruptionFilter() Interruption filter} constant - returned when
* the value is unavailable for any reason. For example, before the notification listener
* is connected.
diff --git a/packages/SystemUI/res/layout/segmented_button.xml b/packages/SystemUI/res/layout/segmented_button.xml
index 2f84bab7b709..ead735fae26e 100644
--- a/packages/SystemUI/res/layout/segmented_button.xml
+++ b/packages/SystemUI/res/layout/segmented_button.xml
@@ -19,7 +19,9 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/segmented_button_spacing"
android:layout_weight="1"
- android:gravity="center"
+ android:paddingStart="8dp"
+ android:gravity="start|center_vertical"
+ android:maxLines="2"
android:textColor="@color/segmented_button_text_selector"
android:background="@drawable/btn_borderless_rect"
android:textAppearance="@style/TextAppearance.Volume.ZenSwitchSummary"
diff --git a/packages/SystemUI/res/layout/volume_zen_footer.xml b/packages/SystemUI/res/layout/volume_zen_footer.xml
index f4a8b898619e..c491e9cbf98b 100644
--- a/packages/SystemUI/res/layout/volume_zen_footer.xml
+++ b/packages/SystemUI/res/layout/volume_zen_footer.xml
@@ -100,7 +100,7 @@
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
- android:minWidth="84dp"
+ android:minWidth="66dp"
android:text="@string/quick_settings_done"
android:textAppearance="@style/TextAppearance.QS.DetailButton" />
</LinearLayout>
diff --git a/packages/SystemUI/res/layout/zen_mode_condition.xml b/packages/SystemUI/res/layout/zen_mode_condition.xml
index 0b91913c78fb..a169d1a1b258 100644
--- a/packages/SystemUI/res/layout/zen_mode_condition.xml
+++ b/packages/SystemUI/res/layout/zen_mode_condition.xml
@@ -18,8 +18,8 @@
android:layout_width="match_parent"
android:layout_height="@dimen/qs_detail_item_height"
android:layout_marginBottom="@dimen/zen_mode_condition_detail_item_spacing"
- android:layout_marginStart="@dimen/zen_mode_condition_detail_button_padding"
- android:layout_marginEnd="@dimen/zen_mode_condition_detail_button_padding" >
+ android:layout_marginStart="1dp"
+ android:layout_marginEnd="0dp" >
<RadioButton
android:id="@android:id/checkbox"
diff --git a/packages/SystemUI/res/layout/zen_mode_panel.xml b/packages/SystemUI/res/layout/zen_mode_panel.xml
index ef403e44a35d..3d73ff7df83d 100644
--- a/packages/SystemUI/res/layout/zen_mode_panel.xml
+++ b/packages/SystemUI/res/layout/zen_mode_panel.xml
@@ -19,6 +19,7 @@
android:id="@+id/zen_mode_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginStart="35dp"
android:clipChildren="false"
android:orientation="vertical" >
@@ -34,8 +35,8 @@
android:id="@+id/zen_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="40dp"
- android:layout_marginRight="40dp"
+ android:layout_marginLeft="8dp"
+ android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:clipChildren="false" />
</FrameLayout>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 1c8142f81498..3705157f5cac 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -435,6 +435,8 @@
<string name="accessibility_quick_settings_dnd_priority_on">Do not disturb on, priority only.</string>
<!-- Content description of the do not disturb tile in quick settings when on in none (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_dnd_none_on">Do not disturb on, no interruptions.</string>
+ <!-- Content description of the do not disturb tile in quick settings when on in alarms only (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_quick_settings_dnd_alarms_on">Do not disturb on, alarms only.</string>
<!-- Content description of the do not disturb tile in quick settings when off (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_dnd_off">Do not disturb off.</string>
<!-- Announcement made when do not disturb changes to off (not shown on the screen). [CHAR LIMIT=NONE] -->
@@ -567,6 +569,8 @@
<string name="quick_settings_dnd_label">Do not disturb</string>
<!-- QuickSettings: Do not disturb - Priority only [CHAR LIMIT=NONE] -->
<string name="quick_settings_dnd_priority_label">Priority only</string>
+ <!-- QuickSettings: Do not disturb - Alarms only [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_dnd_alarms_label">Alarms only</string>
<!-- QuickSettings: Do not disturb - No interruptions [CHAR LIMIT=NONE] -->
<string name="quick_settings_dnd_none_label">No interruptions</string>
<!-- QuickSettings: Bluetooth [CHAR LIMIT=NONE] -->
@@ -725,6 +729,9 @@
<!-- Zen mode: Only important interruptions. [CHAR LIMIT=40] -->
<string name="zen_important_interruptions">Priority interruptions only</string>
+ <!-- Zen mode: Only alarms. [CHAR LIMIT=40] -->
+ <string name="zen_alarms">Alarms only</string>
+
<!-- Zen mode: Next alarm information - just a time. [CHAR LIMIT=40] -->
<string name="zen_alarm_information_time">Your next alarm is at <xliff:g id="alarm_time" example="5:00 PM">%s</xliff:g></string>
@@ -758,9 +765,21 @@
<!-- Interruption level: Priority. [CHAR LIMIT=20] -->
<string name="interruption_level_priority">Priority only</string>
+ <!-- Interruption level: Alarms only. [CHAR LIMIT=20] -->
+ <string name="interruption_level_alarms">Alarms only</string>
+
<!-- Interruption level: All. [CHAR LIMIT=20] -->
<string name="interruption_level_all">All</string>
+ <!-- Interruption level: None. Optimized for narrow two-line display. [CHAR LIMIT=20] -->
+ <string name="interruption_level_none_twoline">No\ninterruptions</string>
+
+ <!-- Interruption level: Priority. Optimized for narrow two-line display. [CHAR LIMIT=20] -->
+ <string name="interruption_level_priority_twoline">Priority\nonly</string>
+
+ <!-- Interruption level: Alarms only. Optimized for narrow two-line display. [CHAR LIMIT=20] -->
+ <string name="interruption_level_alarms_twoline">Alarms\nonly</string>
+
<!-- Indication on the keyguard that is shown when the device is charging. [CHAR LIMIT=40]-->
<string name="keyguard_indication_charging_time">Charging (<xliff:g id="charging_time_left" example="4 hours and 2 minutes">%s</xliff:g> until full)</string>
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index 182a2dd3296b..ff6a45a30c5e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -112,6 +112,12 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_dnd_none_on);
break;
+ case Global.ZEN_MODE_ALARMS:
+ state.icon = ResourceIcon.get(R.drawable.ic_qs_dnd_on);
+ state.label = mContext.getString(R.string.quick_settings_dnd_alarms_label);
+ state.contentDescription = mContext.getString(
+ R.string.accessibility_quick_settings_dnd_alarms_on);
+ break;
default:
state.icon = ResourceIcon.get(R.drawable.ic_qs_dnd_off);
state.label = mContext.getString(R.string.quick_settings_dnd_label);
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 1938c6ddefa3..ac93ced3f3c7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -218,7 +218,7 @@ public class PhoneStatusBarPolicy {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_silent;
volumeDescription = mContext.getString(R.string.accessibility_ringer_silent);
- } else if (mZen != Global.ZEN_MODE_NO_INTERRUPTIONS &&
+ } else if (mZen != Global.ZEN_MODE_NO_INTERRUPTIONS && mZen != Global.ZEN_MODE_ALARMS &&
audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_vibrate;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/Events.java b/packages/SystemUI/src/com/android/systemui/volume/Events.java
index b20e39c7fe51..12dca94614ab 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/Events.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/Events.java
@@ -177,6 +177,7 @@ public class Events {
switch (zenMode) {
case Global.ZEN_MODE_OFF: return "off";
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: return "important_interruptions";
+ case Global.ZEN_MODE_ALARMS: return "alarms";
case Global.ZEN_MODE_NO_INTERRUPTIONS: return "no_interruptions";
default: return "unknown";
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
index ba5b8d10e638..f99eb6d316ba 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
@@ -139,13 +139,17 @@ public class ZenFooter extends LinearLayout {
}
public boolean isZen() {
- return isZenPriority() || isZenNone();
+ return isZenPriority() || isZenAlarms() || isZenNone();
}
private boolean isZenPriority() {
return mZen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
}
+ private boolean isZenAlarms() {
+ return mZen == Global.ZEN_MODE_ALARMS;
+ }
+
private boolean isZenNone() {
return mZen == Global.ZEN_MODE_NO_INTERRUPTIONS;
}
@@ -188,6 +192,7 @@ public class ZenFooter extends LinearLayout {
mSwitchBarIcon.setAlpha(isZen ? 1 : mSecondaryAlpha);
final String line1 =
isZenPriority() ? mContext.getString(R.string.interruption_level_priority)
+ : isZenAlarms() ? mContext.getString(R.string.interruption_level_alarms)
: isZenNone() ? mContext.getString(R.string.interruption_level_none)
: null;
Util.setText(mSummaryLine1, line1);
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index a7f6175d1f44..cb6c29f8541f 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -155,7 +155,7 @@ public class ZenModePanel extends LinearLayout {
} else {
mZenButtonsContainer.setBackgroundResource(R.drawable.qs_background_secondary);
}
- mZenButtons.getChildAt(2).setVisibility(mEmbedded ? GONE : VISIBLE);
+ mZenButtons.getChildAt(3).setVisibility(mEmbedded ? GONE : VISIBLE);
mZenEmbeddedDivider.setVisibility(mEmbedded ? VISIBLE : GONE);
setExpanded(mEmbedded);
updateWidgets();
@@ -166,8 +166,11 @@ public class ZenModePanel extends LinearLayout {
super.onFinishInflate();
mZenButtons = (SegmentedButtons) findViewById(R.id.zen_buttons);
- mZenButtons.addButton(R.string.interruption_level_none, Global.ZEN_MODE_NO_INTERRUPTIONS);
- mZenButtons.addButton(R.string.interruption_level_priority,
+ mZenButtons.addButton(R.string.interruption_level_none_twoline,
+ Global.ZEN_MODE_NO_INTERRUPTIONS);
+ mZenButtons.addButton(R.string.interruption_level_alarms_twoline,
+ Global.ZEN_MODE_ALARMS);
+ mZenButtons.addButton(R.string.interruption_level_priority_twoline,
Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
mZenButtons.addButton(R.string.interruption_level_all, Global.ZEN_MODE_OFF);
mZenButtons.setCallback(mZenButtonsCallback);
@@ -718,7 +721,10 @@ public class ZenModePanel extends LinearLayout {
case Global.ZEN_MODE_NO_INTERRUPTIONS:
modeText = mContext.getString(R.string.zen_no_interruptions);
break;
- default:
+ case Global.ZEN_MODE_ALARMS:
+ modeText = mContext.getString(R.string.zen_alarms);
+ break;
+ default:
return;
}
announceForAccessibility(mContext.getString(R.string.zen_mode_and_condition, modeText,
diff --git a/services/core/java/com/android/server/notification/ZenLog.java b/services/core/java/com/android/server/notification/ZenLog.java
index 1fc967f430ce..1e318ef3c487 100644
--- a/services/core/java/com/android/server/notification/ZenLog.java
+++ b/services/core/java/com/android/server/notification/ZenLog.java
@@ -172,6 +172,7 @@ public class ZenLog {
switch (zenMode) {
case Global.ZEN_MODE_OFF: return "off";
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: return "important_interruptions";
+ case Global.ZEN_MODE_ALARMS: return "alarms";
case Global.ZEN_MODE_NO_INTERRUPTIONS: return "no_interruptions";
default: return "unknown";
}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index a985b01730e3..91d1e563ef02 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -128,6 +128,8 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
return NotificationListenerService.INTERRUPTION_FILTER_ALL;
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
return NotificationListenerService.INTERRUPTION_FILTER_PRIORITY;
+ case Global.ZEN_MODE_ALARMS:
+ return NotificationListenerService.INTERRUPTION_FILTER_ALARMS;
case Global.ZEN_MODE_NO_INTERRUPTIONS:
return NotificationListenerService.INTERRUPTION_FILTER_NONE;
default:
@@ -142,6 +144,8 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
return Global.ZEN_MODE_OFF;
case NotificationListenerService.INTERRUPTION_FILTER_PRIORITY:
return Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+ case NotificationListenerService.INTERRUPTION_FILTER_ALARMS:
+ return Global.ZEN_MODE_ALARMS;
case NotificationListenerService.INTERRUPTION_FILTER_NONE:
return Global.ZEN_MODE_NO_INTERRUPTIONS;
default:
@@ -171,6 +175,13 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
// #notevenalarms
ZenLog.traceIntercepted(record, "none");
return true;
+ case Global.ZEN_MODE_ALARMS:
+ if (isAlarm(record)) {
+ // Alarms only
+ return false;
+ }
+ ZenLog.traceIntercepted(record, "alarmsOnly");
+ return true;
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
if (isAlarm(record)) {
// Alarms are always priority
@@ -314,6 +325,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
int newRingerModeInternal = ringerModeInternal;
switch (mZenMode) {
case Global.ZEN_MODE_NO_INTERRUPTIONS:
+ case Global.ZEN_MODE_ALARMS:
if (ringerModeInternal != AudioManager.RINGER_MODE_SILENT) {
mPreviousRingerMode = ringerModeInternal;
newRingerModeInternal = AudioManager.RINGER_MODE_SILENT;
@@ -344,7 +356,8 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT:
if (isChange && policy.doNotDisturbWhenSilent) {
- if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS) {
+ if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS
+ && mZenMode != Global.ZEN_MODE_ALARMS) {
newZen = Global.ZEN_MODE_NO_INTERRUPTIONS;
}
}
@@ -352,7 +365,8 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
case AudioManager.RINGER_MODE_VIBRATE:
case AudioManager.RINGER_MODE_NORMAL:
if (isChange && ringerModeOld == AudioManager.RINGER_MODE_SILENT
- && mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS) {
+ && (mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS
+ || mZenMode == Global.ZEN_MODE_ALARMS)) {
newZen = Global.ZEN_MODE_OFF;
} else if (mZenMode != Global.ZEN_MODE_OFF) {
ringerModeExternalOut = AudioManager.RINGER_MODE_SILENT;
@@ -470,6 +484,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
ValidateNotificationPeople validator, int contactsTimeoutMs, float timeoutAffinity) {
final int zen = mZenMode;
if (zen == Global.ZEN_MODE_NO_INTERRUPTIONS) return false; // nothing gets through
+ if (zen == Global.ZEN_MODE_ALARMS) return false; // not an alarm
if (zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) {
if (!mConfig.allowCalls) return false; // no calls get through
if (validator != null) {