Merge "Zen: Add warning text if total silence will eat the next alarm." into mnc-dev
diff --git a/packages/SystemUI/res/layout/zen_mode_panel.xml b/packages/SystemUI/res/layout/zen_mode_panel.xml
index 731d4c1..43ab4bb 100644
--- a/packages/SystemUI/res/layout/zen_mode_panel.xml
+++ b/packages/SystemUI/res/layout/zen_mode_panel.xml
@@ -97,4 +97,15 @@
         android:orientation="vertical"
         android:paddingBottom="@dimen/zen_mode_condition_detail_bottom_padding" />
 
+
+    <TextView
+        android:id="@+id/zen_alarm_warning"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="18dp"
+        android:layout_marginEnd="16dp"
+        android:textDirection="locale"
+        android:lineSpacingMultiplier="1.20029"
+        android:textAppearance="@style/TextAppearance.QS.Warning" />
+
 </com.android.systemui.volume.ZenModePanel>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 5b1a5b3..d96ed96 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1044,4 +1044,17 @@
     <string name="regrettable_lack_of_easter_egg">
         ¯\\_(ツ)_/¯
     </string>
+
+    <!-- Warning text when an alarm might be silenced by Do Not Disturb [CHAR LIMIT=NONE] -->
+    <string name="zen_alarm_warning_indef">You won\'t hear your next alarm <xliff:g id="when" example="at 7:00 AM">%1$s</xliff:g> unless you turn this off before then</string>
+
+    <!-- Warning text when an alarm might be silenced by Do Not Disturb due to a time-based condition [CHAR LIMIT=NONE] -->
+    <string name="zen_alarm_warning">You won\'t hear your next alarm <xliff:g id="when" example="at 7:00 AM">%1$s</xliff:g></string>
+
+    <!-- Alarm template for near alarms [CHAR LIMIT=25] -->
+    <string name="alarm_template">at <xliff:g id="when" example="7:00 AM">%1$s</xliff:g></string>
+
+    <!-- Alarm template for far alarms [CHAR LIMIT=25] -->
+    <string name="alarm_template_far">on <xliff:g id="when" example="Fri 7:00 AM">%1$s</xliff:g></string>
+
 </resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 6709095..bda39b1 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -142,6 +142,11 @@
         <item name="android:textSize">14sp</item>
     </style>
 
+    <style name="TextAppearance.QS.Warning">
+        <item name="android:textSize">14sp</item>
+        <item name="android:textColor">@color/system_warning_color</item>
+    </style>
+
     <style name="TextAppearance.QS.DetailButton">
         <item name="android:textSize">@dimen/qs_detail_button_text_size</item>
         <item name="android:textColor">@color/qs_detail_button</item>
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index ec24d75..027d637 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -35,6 +35,7 @@
 import android.service.notification.ZenModeConfig;
 import android.service.notification.ZenModeConfig.ZenRule;
 import android.text.TextUtils;
+import android.text.format.DateFormat;
 import android.util.ArraySet;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -57,6 +58,7 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.Arrays;
+import java.util.Locale;
 import java.util.Objects;
 
 public class ZenModePanel extends LinearLayout {
@@ -96,6 +98,7 @@
     private View mZenIntroductionConfirm;
     private View mZenIntroductionCustomize;
     private LinearLayout mZenConditions;
+    private TextView mZenAlarmWarning;
 
     private Callback mCallback;
     private ZenModeController mController;
@@ -176,6 +179,7 @@
         });
 
         mZenConditions = (LinearLayout) findViewById(R.id.zen_conditions);
+        mZenAlarmWarning = (TextView) findViewById(R.id.zen_alarm_warning);
     }
 
     @Override
@@ -436,6 +440,40 @@
                     : R.string.zen_silence_introduction);
             mZenIntroductionCustomize.setVisibility(zenImportant ? VISIBLE : GONE);
         }
+        final String warning = computeAlarmWarningText(zenNone);
+        mZenAlarmWarning.setVisibility(warning != null ? VISIBLE : GONE);
+        mZenAlarmWarning.setText(warning);
+    }
+
+    private String computeAlarmWarningText(boolean zenNone) {
+        if (!zenNone) {
+            return null;
+        }
+        final long now = System.currentTimeMillis();
+        final long nextAlarm = mController.getNextAlarm();
+        if (nextAlarm < now) {
+            return null;
+        }
+        int warningRes = 0;
+        if (mSessionExitCondition == null || isForever(mSessionExitCondition)) {
+            warningRes = R.string.zen_alarm_warning_indef;
+        } else {
+            final long time = ZenModeConfig.tryParseCountdownConditionId(mSessionExitCondition.id);
+            if (time > now && nextAlarm < time) {
+                warningRes = R.string.zen_alarm_warning;
+            }
+        }
+        if (warningRes == 0) {
+            return null;
+        }
+        final boolean soon = (nextAlarm - now) < 24 * 60 * 60 * 1000;
+        final boolean is24 = DateFormat.is24HourFormat(mContext, ActivityManager.getCurrentUser());
+        final String skeleton = soon ? (is24 ? "Hm" : "hma") : (is24 ? "EEEHm" : "EEEhma");
+        final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
+        final CharSequence formattedTime = DateFormat.format(pattern, nextAlarm);
+        final int templateRes = soon ? R.string.alarm_template : R.string.alarm_template_far;
+        final String template = getResources().getString(templateRes, formattedTime);
+        return getResources().getString(warningRes, template);
     }
 
     private static Condition parseExistingTimeCondition(Context context, Condition condition) {