diff options
author | John Spurlock <jspurlock@google.com> | 2015-04-14 20:00:16 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-14 20:00:22 +0000 |
commit | 691ae9dc25edb1c3d005c46e729356a08450e378 (patch) | |
tree | 8c6afebb0f1ca914891a4b611e72a5cad081787f /packages/SystemUI | |
parent | f8a713309ac8575b64641adbbb3ecb183429d7e1 (diff) | |
parent | f55b7f2fb614b917b7d1943396880978258dd1bb (diff) | |
download | frameworks_base-691ae9dc25edb1c3d005c46e729356a08450e378.zip frameworks_base-691ae9dc25edb1c3d005c46e729356a08450e378.tar.gz frameworks_base-691ae9dc25edb1c3d005c46e729356a08450e378.tar.bz2 |
Merge "Zen: Add new user introduction msg for "Priority only"."
Diffstat (limited to 'packages/SystemUI')
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 2858fa2..ae134c6 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() { |