summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2015-04-13 19:21:26 -0400
committerJohn Spurlock <jspurlock@google.com>2015-04-14 10:18:34 -0400
commitf55b7f2fb614b917b7d1943396880978258dd1bb (patch)
treea121d349c34ce720e71f9f095a5586a9cb23e66e
parentcbcf902a4afbb449ae6ba3738d32d3ca1c5c4602 (diff)
downloadframeworks_base-f55b7f2fb614b917b7d1943396880978258dd1bb.zip
frameworks_base-f55b7f2fb614b917b7d1943396880978258dd1bb.tar.gz
frameworks_base-f55b7f2fb614b917b7d1943396880978258dd1bb.tar.bz2
Zen: Add new user introduction msg for "Priority only".
Bug: 19260237 Change-Id: I3b5785befc05685c7f676e918710fb7500221172
-rw-r--r--packages/SystemUI/res/layout/volume_dialog.xml2
-rw-r--r--packages/SystemUI/res/layout/volume_dialog_row.xml2
-rw-r--r--packages/SystemUI/res/layout/volume_zen_footer.xml9
-rw-r--r--packages/SystemUI/res/layout/zen_mode_panel.xml56
-rw-r--r--packages/SystemUI/res/values/colors.xml3
-rw-r--r--packages/SystemUI/res/values/strings.xml8
-rw-r--r--packages/SystemUI/res/values/styles.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/Prefs.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java46
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java33
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumePanelComponent.java24
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java (renamed from packages/SystemUI/src/com/android/systemui/volume/Prefs.java)2
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java25
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java28
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java87
16 files changed, 283 insertions, 62 deletions
diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml
index 7586227..c86e9dc 100644
--- a/packages/SystemUI/res/layout/volume_dialog.xml
+++ b/packages/SystemUI/res/layout/volume_dialog.xml
@@ -41,8 +41,6 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="4dp"
- android:paddingEnd="4dp"
- android:paddingStart="4dp"
android:paddingTop="6dp" >
<!-- volume rows added and removed here! :-) -->
diff --git a/packages/SystemUI/res/layout/volume_dialog_row.xml b/packages/SystemUI/res/layout/volume_dialog_row.xml
index af27cc4..b51aa96 100644
--- a/packages/SystemUI/res/layout/volume_dialog_row.xml
+++ b/packages/SystemUI/res/layout/volume_dialog_row.xml
@@ -16,6 +16,8 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:paddingStart="4dp"
+ android:paddingEnd="4dp"
android:clipChildren="false" >
<TextView
diff --git a/packages/SystemUI/res/layout/volume_zen_footer.xml b/packages/SystemUI/res/layout/volume_zen_footer.xml
index c491e9c..dcdc859 100644
--- a/packages/SystemUI/res/layout/volume_zen_footer.xml
+++ b/packages/SystemUI/res/layout/volume_zen_footer.xml
@@ -24,6 +24,8 @@
android:id="@+id/volume_zen_switch_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/volume_button_size"
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
android:clickable="true"
android:orientation="horizontal" >
@@ -49,6 +51,7 @@
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginEnd="11dp" />
+
</LinearLayout>
<RelativeLayout
@@ -56,8 +59,8 @@
android:layout_width="match_parent"
android:layout_height="@dimen/volume_button_size"
android:layout_marginStart="@dimen/volume_button_size"
- android:paddingEnd="3dp"
- android:paddingStart="3dp" >
+ android:paddingEnd="7dp"
+ android:paddingStart="7dp" >
<TextView
android:id="@+id/volume_zen_panel_summary_line_1"
@@ -79,6 +82,8 @@
android:id="@+id/volume_zen_mode_panel_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
android:gravity="end" >
<TextView
diff --git a/packages/SystemUI/res/layout/zen_mode_panel.xml b/packages/SystemUI/res/layout/zen_mode_panel.xml
index 3d73ff7..d829f0e 100644
--- a/packages/SystemUI/res/layout/zen_mode_panel.xml
+++ b/packages/SystemUI/res/layout/zen_mode_panel.xml
@@ -19,7 +19,6 @@
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" >
@@ -28,6 +27,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="8dp"
+ android:layout_marginStart="39dp"
android:elevation="4dp"
android:background="@drawable/qs_background_secondary" >
@@ -46,15 +46,13 @@
android:layout_width="match_parent"
android:layout_height="1dp"
android:visibility="gone"
- android:layout_marginStart="@dimen/qs_panel_padding"
- android:layout_marginEnd="@dimen/qs_panel_padding"
- android:layout_marginBottom="@dimen/qs_panel_padding"
android:background="#4dffffff" />
<RelativeLayout
android:id="@+id/zen_subhead"
android:layout_width="match_parent"
android:layout_height="62dp"
+ android:layout_marginStart="39dp"
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp" >
@@ -98,10 +96,60 @@
</RelativeLayout>
+ <RelativeLayout
+ android:id="@+id/zen_introduction"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingEnd="4dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:background="@color/zen_introduction_message_background" >
+
+ <ImageView
+ android:id="@+id/zen_introduction_confirm"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_alignParentEnd="true"
+ android:background="@drawable/btn_borderless_rect"
+ android:clickable="true"
+ android:contentDescription="@string/accessibility_desc_confirm"
+ android:scaleType="center"
+ android:src="@drawable/ic_close"
+ android:tint="@android:color/white" />
+
+ <TextView
+ android:id="@+id/zen_introduction_message"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="12dp"
+ android:layout_marginStart="55dp"
+ android:lineSpacingMultiplier="1.20029"
+ android:layout_toStartOf="@id/zen_introduction_confirm"
+ android:text="@string/zen_priority_introduction"
+ android:textAppearance="@style/TextAppearance.QS.VolumeSuppressor" />
+
+ <TextView
+ android:id="@+id/zen_introduction_customize"
+ style="@style/QSBorderlessButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_marginEnd="4dp"
+ android:layout_below="@id/zen_introduction_message"
+ android:clickable="true"
+ android:focusable="true"
+ android:text="@string/zen_priority_customize_button"
+ android:textAppearance="@style/TextAppearance.QS.DetailButton.White" />
+
+ </RelativeLayout>
+
<LinearLayout
android:id="@+id/zen_conditions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginStart="39dp"
android:orientation="vertical"
android:paddingBottom="@dimen/zen_mode_condition_detail_bottom_padding" />
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index ded7c4e..88d1769 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -44,6 +44,7 @@
<color name="qs_subhead">#99FFFFFF</color><!-- 60% white -->
<color name="qs_detail_empty">#24B0BEC5</color><!-- 14% blue grey 200 -->
<color name="qs_detail_button">#FFB0BEC5</color><!-- 100% blue grey 200 -->
+ <color name="qs_detail_button_white">#B3FFFFFF</color><!-- 70% white -->
<color name="qs_detail_transition">#66FFFFFF</color>
<color name="qs_detail_progress_track">#99009688</color><!-- 60% deep teal 500 -->
<color name="data_usage_secondary">#99FFFFFF</color><!-- 60% white -->
@@ -137,4 +138,6 @@
<color name="light_mode_icon_color_single_tone">#ffffff</color>
<color name="light_mode_icon_color_dual_tone_background">#4dffffff</color>
<color name="light_mode_icon_color_dual_tone_fill">#ffffff</color>
+
+ <color name="zen_introduction_message_background">#ff009688</color><!-- deep teal 500 -->
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 779b55e..807bb19 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -410,6 +410,8 @@
<string name="accessibility_desc_settings">Settings</string>
<!-- Content description for the recent apps panel (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_desc_recent_apps">Overview.</string>
+ <!-- Content description for the confirm button in the zen mode panel introduction message. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_desc_confirm">Confirm</string>
<!-- Content description of the user tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_user">User <xliff:g id="user" example="John Doe">%s</xliff:g>.</string>
@@ -723,6 +725,12 @@
<!-- Zen mode: No interruptions title, with a warning about alarms. [CHAR LIMIT=60] -->
<string name="zen_no_interruptions_with_warning">No interruptions. Not even alarms.</string>
+ <!-- Zen mode: Priority only introduction message on first use -->
+ <string name="zen_priority_introduction">You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events, and callers you specify.</string>
+
+ <!-- Zen mode: Priority only customization button label -->
+ <string name="zen_priority_customize_button">Customize</string>
+
<!-- Zen mode: No interruptions. [CHAR LIMIT=40] -->
<string name="zen_no_interruptions">No interruptions</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 107a8ec..974cc48 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -151,6 +151,10 @@
<item name="android:gravity">center</item>
</style>
+ <style name="TextAppearance.QS.DetailButton.White">
+ <item name="android:textColor">@color/qs_detail_button_white</item>
+ </style>
+
<style name="TextAppearance.QS.DetailEmpty">
<item name="android:textSize">@dimen/qs_detail_empty_text_size</item>
<item name="android:textColor">@color/qs_subhead</item>
diff --git a/packages/SystemUI/src/com/android/systemui/Prefs.java b/packages/SystemUI/src/com/android/systemui/Prefs.java
index 9df67fd..68b1968 100644
--- a/packages/SystemUI/src/com/android/systemui/Prefs.java
+++ b/packages/SystemUI/src/com/android/systemui/Prefs.java
@@ -35,7 +35,10 @@ public final class Prefs {
Key.HOTSPOT_TILE_LAST_USED,
Key.COLOR_INVERSION_TILE_LAST_USED,
Key.DND_TILE_VISIBLE,
- Key.DND_TILE_COMBINED_ICON
+ Key.DND_TILE_COMBINED_ICON,
+ Key.DND_CONFIRMED_PRIORITY_INTRODUCTION,
+ Key.DND_FAVORITE_BUCKET_INDEX,
+ Key.DND_NONE_SELECTED,
})
public @interface Key {
String SEARCH_APP_WIDGET_ID = "searchAppWidgetId";
@@ -44,6 +47,9 @@ public final class Prefs {
String COLOR_INVERSION_TILE_LAST_USED = "ColorInversionTileLastUsed";
String DND_TILE_VISIBLE = "DndTileVisible";
String DND_TILE_COMBINED_ICON = "DndTileCombinedIcon";
+ String DND_CONFIRMED_PRIORITY_INTRODUCTION = "DndConfirmedPriorityIntroduction";
+ String DND_FAVORITE_BUCKET_INDEX = "DndCountdownMinuteIndex";
+ String DND_NONE_SELECTED = "DndNoneSelected";
}
public static boolean getBoolean(Context context, @Key String key, boolean defaultValue) {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
index 539fec8..bb4aa61 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
@@ -107,20 +107,22 @@ public class VolumeDialog {
private boolean mShowing;
private boolean mExpanded;
private int mActiveStream;
- private boolean mShowHeaders = Prefs.DEFAULT_SHOW_HEADERS;
- private boolean mShowFooter = Prefs.DEFAULT_SHOW_FOOTER;
- private boolean mShowZenFooter = Prefs.DEFAULT_ZEN_FOOTER;
- private boolean mAutomute = Prefs.DEFAULT_ENABLE_AUTOMUTE;
- private boolean mSilentMode = Prefs.DEFAULT_ENABLE_SILENT_MODE;
+ private boolean mShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS;
+ private boolean mShowFooter = VolumePrefs.DEFAULT_SHOW_FOOTER;
+ private boolean mShowZenFooter = VolumePrefs.DEFAULT_ZEN_FOOTER;
+ private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE;
+ private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE;
private State mState;
private int mExpandButtonRes;
private boolean mExpanding;
private SafetyWarningDialog mSafetyWarning;
+ private Callback mCallback;
public VolumeDialog(Context context, VolumeDialogController controller,
- ZenModeController zenModeController) {
+ ZenModeController zenModeController, Callback callback) {
mContext = context;
mController = controller;
+ mCallback = callback;
mSpTexts = new SpTexts(mContext);
mKeyguard = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
@@ -421,14 +423,6 @@ public class VolumeDialog {
mHandler.obtainMessage(H.DISMISS, reason, 0).sendToTarget();
}
- protected void onSettingsClickedH() {
- // hook for subclasses
- }
-
- protected void onZenSettingsClickedH() {
- // hook for subclasses
- }
-
private void showH(int reason) {
mHandler.removeMessages(H.SHOW);
mHandler.removeMessages(H.DISMISS);
@@ -885,7 +879,9 @@ public class VolumeDialog {
@Override
public void run() {
Events.writeEvent(Events.EVENT_SETTINGS_CLICK);
- onSettingsClickedH();
+ if (mCallback != null) {
+ mCallback.onSettingsClicked();
+ }
}
}, WAIT_FOR_RIPPLE);
}
@@ -912,13 +908,23 @@ public class VolumeDialog {
@Override
public void onSettingsClicked() {
dismiss(Events.DISMISS_REASON_SETTINGS_CLICKED);
- onZenSettingsClickedH();
+ if (mCallback != null) {
+ mCallback.onZenSettingsClicked();
+ }
}
@Override
public void onDoneClicked() {
dismiss(Events.DISMISS_REASON_DONE_CLICKED);
}
+
+ @Override
+ public void onPrioritySettingsClicked() {
+ dismiss(Events.DISMISS_REASON_SETTINGS_CLICKED);
+ if (mCallback != null) {
+ mCallback.onZenPrioritySettingsClicked();
+ }
+ }
};
private final class H extends Handler {
@@ -1052,10 +1058,16 @@ public class VolumeDialog {
private boolean important;
private int cachedIconRes;
private int iconState; // from Events
- private boolean cachedShowHeaders = Prefs.DEFAULT_SHOW_HEADERS;
+ private boolean cachedShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS;
private int cachedExpandButtonRes;
private ObjectAnimator anim; // slider progress animation for non-touch-related updates
private int animTargetProgress;
private int lastAudibleLevel = 1;
}
+
+ public interface Callback {
+ void onSettingsClicked();
+ void onZenSettingsClicked();
+ void onZenPrioritySettingsClicked();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java
index 741e498..e1d49ce 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java
@@ -17,11 +17,13 @@
package com.android.systemui.volume;
import android.content.Context;
+import android.content.Intent;
import android.content.res.Configuration;
import android.media.AudioManager;
import android.media.VolumePolicy;
import android.os.Bundle;
import android.os.Handler;
+import android.provider.Settings;
import com.android.systemui.SystemUI;
import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -53,12 +55,7 @@ public class VolumeDialogComponent implements VolumeComponent {
}
};
mZenModeController = zen;
- mDialog = new VolumeDialog(context, mController, zen) {
- @Override
- protected void onZenSettingsClickedH() {
- startZenSettings();
- }
- };
+ mDialog = new VolumeDialog(context, mController, zen, mVolumeDialogCallback);
applyConfiguration();
}
@@ -113,8 +110,26 @@ public class VolumeDialogComponent implements VolumeComponent {
mDialog.dump(pw);
}
- private void startZenSettings() {
- mSysui.getComponent(PhoneStatusBar.class).startActivityDismissingKeyguard(
- ZenModePanel.ZEN_SETTINGS, true /* onlyProvisioned */, true /* dismissShade */);
+ private void startSettings(Intent intent) {
+ mSysui.getComponent(PhoneStatusBar.class).startActivityDismissingKeyguard(intent,
+ true /* onlyProvisioned */, true /* dismissShade */);
}
+
+ private final VolumeDialog.Callback mVolumeDialogCallback = new VolumeDialog.Callback() {
+ @Override
+ public void onSettingsClicked() {
+ startSettings(new Intent(Settings.ACTION_NOTIFICATION_SETTINGS));
+ }
+
+ @Override
+ public void onZenSettingsClicked() {
+ startSettings(ZenModePanel.ZEN_SETTINGS);
+ }
+
+ @Override
+ public void onZenPrioritySettingsClicked() {
+ startSettings(ZenModePanel.ZEN_PRIORITY_SETTINGS);
+ }
+ };
+
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
index f16e9d2..45cb4a1 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
@@ -428,6 +428,13 @@ public class VolumePanel extends Handler implements DemoMode {
}
@Override
+ public void onPrioritySettings() {
+ if (mCallback != null) {
+ mCallback.onZenPrioritySettings();
+ }
+ }
+
+ @Override
public void onInteraction() {
resetTimeout();
}
@@ -1524,6 +1531,7 @@ public class VolumePanel extends Handler implements DemoMode {
public interface Callback {
void onZenSettings();
+ void onZenPrioritySettings();
void onInteraction();
void onVisible(boolean visible);
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanelComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelComponent.java
index fa6ea9e..b072cab 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanelComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelComponent.java
@@ -17,6 +17,7 @@
package com.android.systemui.volume;
import android.content.Context;
+import android.content.Intent;
import android.content.res.Configuration;
import android.media.AudioManager;
import android.media.IRemoteVolumeController;
@@ -74,6 +75,12 @@ public class VolumePanelComponent implements VolumeComponent {
}
@Override
+ public void onZenPrioritySettings() {
+ mHandler.removeCallbacks(mStartZenPrioritySettings);
+ mHandler.post(mStartZenPrioritySettings);
+ }
+
+ @Override
public void onInteraction() {
final KeyguardViewMediator kvm = mSysui.getComponent(KeyguardViewMediator.class);
if (kvm != null) {
@@ -126,12 +133,23 @@ public class VolumePanelComponent implements VolumeComponent {
mPanel.postDismiss(0);
}
+ private void startSettings(Intent intent) {
+ mSysui.getComponent(PhoneStatusBar.class).startActivityDismissingKeyguard(intent,
+ true /* onlyProvisioned */, true /* dismissShade */);
+ mPanel.postDismiss(mDismissDelay);
+ }
+
private final Runnable mStartZenSettings = new Runnable() {
@Override
public void run() {
- mSysui.getComponent(PhoneStatusBar.class).startActivityDismissingKeyguard(
- ZenModePanel.ZEN_SETTINGS, true /* onlyProvisioned */, true /* dismissShade */);
- mPanel.postDismiss(mDismissDelay);
+ startSettings(ZenModePanel.ZEN_SETTINGS);
+ }
+ };
+
+ private final Runnable mStartZenPrioritySettings = new Runnable() {
+ @Override
+ public void run() {
+ startSettings(ZenModePanel.ZEN_PRIORITY_SETTINGS);
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/volume/Prefs.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java
index 58bc9f4..915e998 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/Prefs.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java
@@ -24,7 +24,7 @@ import android.preference.PreferenceManager;
/**
* Configuration for the volume dialog + related policy.
*/
-public class Prefs {
+public class VolumePrefs {
public static final String PREF_ENABLE_PROTOTYPE = "pref_enable_prototype"; // not persistent
public static final String PREF_SHOW_ALARMS = "pref_show_alarms";
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
index 387aed0..e979786 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
@@ -36,6 +36,7 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
+import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.SystemUI;
import com.android.systemui.qs.tiles.DndTile;
@@ -172,18 +173,40 @@ public class VolumeUI extends SystemUI {
private static final String DISABLE = "com.android.systemui.vui.DISABLE";
private static final String EXTRA_COMPONENT = "component";
+ private static final String PREF = "com.android.systemui.PREF";
+ private static final String EXTRA_KEY = "key";
+ private static final String EXTRA_VALUE = "value";
+
public void start() {
final IntentFilter filter = new IntentFilter();
filter.addAction(ENABLE);
filter.addAction(DISABLE);
+ filter.addAction(PREF);
mContext.registerReceiver(this, filter, null, mHandler);
}
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
+ if (PREF.equals(action)) {
+ final String key = intent.getStringExtra(EXTRA_KEY);
+ if (key != null && intent.getExtras() != null) {
+ final Object value = intent.getExtras().get(EXTRA_VALUE);
+ if (value == null) {
+ Prefs.remove(mContext, key);
+ } else if (value instanceof Boolean) {
+ Prefs.putBoolean(mContext, key, (Boolean) value);
+ } else if (value instanceof Integer) {
+ Prefs.putInt(mContext, key, (Integer) value);
+ } else if (value instanceof Long) {
+ Prefs.putLong(mContext, key, (Long) value);
+ }
+ }
+ return;
+ }
final ComponentName component = intent.getParcelableExtra(EXTRA_COMPONENT);
- final boolean current = component.equals(mVolumeControllerService.getComponent());
+ final boolean current = component != null
+ && component.equals(mVolumeControllerService.getComponent());
if (ENABLE.equals(action) && component != null) {
if (!current) {
showServiceActivationDialog(component);
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
index ef8257c..9dbe1c8 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
@@ -99,6 +99,7 @@ public class ZenFooter extends LinearLayout {
mController = controller;
mZenModePanel.init(controller);
mZenModePanel.setEmbedded(true);
+ mZenModePanel.setCallback(mZenModePanelCallback);
mSwitch.setOnCheckedChangeListener(mCheckedListener);
mController.addCallback(new ZenModeController.Callback() {
@Override
@@ -212,6 +213,32 @@ public class ZenFooter extends LinearLayout {
Util.setText(mSummaryLine2, line2);
}
+ private final ZenModePanel.Callback mZenModePanelCallback = new ZenModePanel.Callback() {
+ @Override
+ public void onMoreSettings() {
+ if (mCallback != null) {
+ mCallback.onSettingsClicked();
+ }
+ }
+
+ @Override
+ public void onPrioritySettings() {
+ if (mCallback != null) {
+ mCallback.onPrioritySettingsClicked();
+ }
+ }
+
+ @Override
+ public void onInteraction() {
+ // noop
+ }
+
+ @Override
+ public void onExpanded(boolean expanded) {
+ // noop
+ }
+ };
+
private final OnCheckedChangeListener mCheckedListener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@@ -230,5 +257,6 @@ public class ZenFooter extends LinearLayout {
void onFooterExpanded();
void onSettingsClicked();
void onDoneClicked();
+ void onPrioritySettingsClicked();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index f6d4c36..1b563dc 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -50,6 +50,7 @@ import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.TextView;
+import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -74,12 +75,15 @@ public class ZenModePanel extends LinearLayout {
private static final int FOREVER_CONDITION_INDEX = 0;
private static final int COUNTDOWN_CONDITION_INDEX = 1;
- public static final Intent ZEN_SETTINGS = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS);
+ public static final Intent ZEN_SETTINGS
+ = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS);
+ public static final Intent ZEN_PRIORITY_SETTINGS
+ = new Intent(Settings.ACTION_ZEN_MODE_PRIORITY_SETTINGS);
private final Context mContext;
private final LayoutInflater mInflater;
private final H mHandler = new H();
- private final Prefs mPrefs;
+ private final ZenPrefs mPrefs;
private final IconPulser mIconPulser;
private final int mSubheadWarningColor;
private final int mSubheadColor;
@@ -96,6 +100,9 @@ public class ZenModePanel extends LinearLayout {
private TextView mZenSubheadExpanded;
private View mZenEmbeddedDivider;
private View mMoreSettings;
+ private View mZenIntroduction;
+ private View mZenIntroductionConfirm;
+ private View mZenIntroductionCustomize;
private LinearLayout mZenConditions;
private Callback mCallback;
@@ -121,7 +128,7 @@ public class ZenModePanel extends LinearLayout {
public ZenModePanel(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
- mPrefs = new Prefs();
+ mPrefs = new ZenPrefs();
mInflater = LayoutInflater.from(mContext.getApplicationContext());
mIconPulser = new IconPulser(mContext);
mSubheadWarningColor = context.getColor(R.color.system_warning_color);
@@ -202,11 +209,36 @@ public class ZenModePanel extends LinearLayout {
});
Interaction.register(mMoreSettings, mInteractionCallback);
+ mZenIntroduction = findViewById(R.id.zen_introduction);
+ mZenIntroductionConfirm = findViewById(R.id.zen_introduction_confirm);
+ mZenIntroductionConfirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ confirmZenIntroduction();
+ }
+ });
+ mZenIntroductionCustomize = findViewById(R.id.zen_introduction_customize);
+ mZenIntroductionCustomize.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ confirmZenIntroduction();
+ if (mCallback != null) {
+ mCallback.onPrioritySettings();
+ }
+ }
+ });
+
mZenConditions = (LinearLayout) findViewById(R.id.zen_conditions);
setLayoutTransition(newLayoutTransition(mTransitionHelper));
}
+ private void confirmZenIntroduction() {
+ if (DEBUG) Log.d(TAG, "confirmZenIntroduction");
+ Prefs.putBoolean(mContext, Prefs.Key.DND_CONFIRMED_PRIORITY_INTRODUCTION, true);
+ mHandler.sendEmptyMessage(H.UPDATE_WIDGETS);
+ }
+
private LayoutTransition newLayoutTransition(TransitionListener listener) {
final LayoutTransition transition = new LayoutTransition();
transition.disableTransitionType(LayoutTransition.DISAPPEARING);
@@ -452,13 +484,15 @@ public class ZenModePanel extends LinearLayout {
final boolean zenImportant = zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
final boolean zenNone = zen == Global.ZEN_MODE_NO_INTERRUPTIONS;
final boolean expanded = !mHidden && mExpanded;
+ final boolean conditions = mEmbedded || !zenOff && expanded;
+ final boolean introduction = conditions && zenImportant && !mPrefs.mConfirmedIntroduction;
mZenButtons.setVisibility(mHidden ? GONE : VISIBLE);
mZenSubhead.setVisibility(!mHidden && !zenOff && !mEmbedded ? VISIBLE : GONE);
mZenSubheadExpanded.setVisibility(expanded ? VISIBLE : GONE);
mZenSubheadCollapsed.setVisibility(!expanded ? VISIBLE : GONE);
mMoreSettings.setVisibility(zenImportant && expanded ? VISIBLE : GONE);
- mZenConditions.setVisibility(mEmbedded || !zenOff && expanded ? VISIBLE : GONE);
+ mZenConditions.setVisibility(conditions ? VISIBLE : GONE);
if (zenNone) {
mZenSubheadExpanded.setText(R.string.zen_no_interruptions_with_warning);
@@ -469,6 +503,7 @@ public class ZenModePanel extends LinearLayout {
}
mZenSubheadExpanded.setTextColor(zenNone && mPrefs.isNoneDangerous()
? mSubheadWarningColor : mSubheadColor);
+ mZenIntroduction.setVisibility(introduction ? VISIBLE : GONE);
}
private static Condition parseExistingTimeCondition(Context context, Condition condition) {
@@ -835,6 +870,7 @@ public class ZenModePanel extends LinearLayout {
private final class H extends Handler {
private static final int UPDATE_CONDITIONS = 1;
private static final int MANUAL_RULE_CHANGED = 2;
+ private static final int UPDATE_WIDGETS = 3;
private H() {
super(Looper.getMainLooper());
@@ -842,16 +878,17 @@ public class ZenModePanel extends LinearLayout {
@Override
public void handleMessage(Message msg) {
- if (msg.what == UPDATE_CONDITIONS) {
- handleUpdateConditions((Condition[]) msg.obj);
- } else if (msg.what == MANUAL_RULE_CHANGED) {
- handleUpdateManualRule((ZenRule) msg.obj);
+ switch (msg.what) {
+ case UPDATE_CONDITIONS: handleUpdateConditions((Condition[]) msg.obj); break;
+ case MANUAL_RULE_CHANGED: handleUpdateManualRule((ZenRule) msg.obj); break;
+ case UPDATE_WIDGETS: updateWidgets(); break;
}
}
}
public interface Callback {
void onMoreSettings();
+ void onPrioritySettings();
void onInteraction();
void onExpanded(boolean expanded);
}
@@ -865,21 +902,20 @@ public class ZenModePanel extends LinearLayout {
Condition condition;
}
- private final class Prefs implements OnSharedPreferenceChangeListener {
- private static final String KEY_MINUTE_INDEX = "minuteIndex";
- private static final String KEY_NONE_SELECTED = "noneSelected";
-
+ private final class ZenPrefs implements OnSharedPreferenceChangeListener {
private final int mNoneDangerousThreshold;
private int mMinuteIndex;
private int mNoneSelected;
+ private boolean mConfirmedIntroduction;
- private Prefs() {
+ private ZenPrefs() {
mNoneDangerousThreshold = mContext.getResources()
.getInteger(R.integer.zen_mode_alarm_warning_threshold);
- prefs().registerOnSharedPreferenceChangeListener(this);
+ Prefs.registerListener(mContext, this);
updateMinuteIndex();
updateNoneSelected();
+ updateConfirmedIntroduction();
}
public boolean isNoneDangerous() {
@@ -890,7 +926,7 @@ public class ZenModePanel extends LinearLayout {
mNoneSelected = clampNoneSelected(mNoneSelected + 1);
if (DEBUG) Log.d(mTag, "Setting none selected: " + mNoneSelected + " threshold="
+ mNoneDangerousThreshold);
- prefs().edit().putInt(KEY_NONE_SELECTED, mNoneSelected).apply();
+ Prefs.putInt(mContext, Prefs.Key.DND_NONE_SELECTED, mNoneSelected);
}
public int getMinuteIndex() {
@@ -902,21 +938,19 @@ public class ZenModePanel extends LinearLayout {
if (minuteIndex == mMinuteIndex) return;
mMinuteIndex = clampIndex(minuteIndex);
if (DEBUG) Log.d(mTag, "Setting favorite minute index: " + mMinuteIndex);
- prefs().edit().putInt(KEY_MINUTE_INDEX, mMinuteIndex).apply();
+ Prefs.putInt(mContext, Prefs.Key.DND_FAVORITE_BUCKET_INDEX, mMinuteIndex);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
updateMinuteIndex();
updateNoneSelected();
- }
-
- private SharedPreferences prefs() {
- return mContext.getSharedPreferences(mContext.getPackageName(), 0);
+ updateConfirmedIntroduction();
}
private void updateMinuteIndex() {
- mMinuteIndex = clampIndex(prefs().getInt(KEY_MINUTE_INDEX, DEFAULT_BUCKET_INDEX));
+ mMinuteIndex = clampIndex(Prefs.getInt(mContext,
+ Prefs.Key.DND_FAVORITE_BUCKET_INDEX, DEFAULT_BUCKET_INDEX));
if (DEBUG) Log.d(mTag, "Favorite minute index: " + mMinuteIndex);
}
@@ -925,13 +959,22 @@ public class ZenModePanel extends LinearLayout {
}
private void updateNoneSelected() {
- mNoneSelected = clampNoneSelected(prefs().getInt(KEY_NONE_SELECTED, 0));
+ mNoneSelected = clampNoneSelected(Prefs.getInt(mContext,
+ Prefs.Key.DND_NONE_SELECTED, 0));
if (DEBUG) Log.d(mTag, "None selected: " + mNoneSelected);
}
private int clampNoneSelected(int noneSelected) {
return MathUtils.constrain(noneSelected, 0, Integer.MAX_VALUE);
}
+
+ private void updateConfirmedIntroduction() {
+ final boolean confirmed = Prefs.getBoolean(mContext,
+ Prefs.Key.DND_CONFIRMED_PRIORITY_INTRODUCTION, false);
+ if (confirmed == mConfirmedIntroduction) return;
+ mConfirmedIntroduction = confirmed;
+ if (DEBUG) Log.d(mTag, "Confirmed introduction: " + mConfirmedIntroduction);
+ }
}
private final SegmentedButtons.Callback mZenButtonsCallback = new SegmentedButtons.Callback() {