From b02c744f05b0cca05b77fcbaad4a546ad86081eb Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Tue, 14 Apr 2015 09:32:25 -0400 Subject: [PATCH] Zen: Enter alarms only on volume down from vibrate. And vice versa (when dialog is showing). Also make alarms only the default mode when DND is switched on via the switch. Bug: 19260237 Change-Id: I16e4a27944bc8245bb2beed84c0421d493b0b876 --- media/java/android/media/VolumePolicy.java | 19 +++++++++++++++++++ .../volume/VolumeDialogComponent.java | 8 +++++++- .../volume/VolumeDialogController.java | 3 ++- .../android/systemui/volume/ZenFooter.java | 3 +-- .../android/server/audio/AudioService.java | 3 ++- .../server/notification/ZenModeHelper.java | 2 +- 6 files changed, 32 insertions(+), 6 deletions(-) diff --git a/media/java/android/media/VolumePolicy.java b/media/java/android/media/VolumePolicy.java index 2d3376ad80a69..1d33128ba752d 100644 --- a/media/java/android/media/VolumePolicy.java +++ b/media/java/android/media/VolumePolicy.java @@ -19,6 +19,8 @@ package android.media; import android.os.Parcel; import android.os.Parcelable; +import java.util.Objects; + /** @hide */ public final class VolumePolicy implements Parcelable { public static final VolumePolicy DEFAULT = new VolumePolicy(false, false, true, 400); @@ -52,6 +54,23 @@ public final class VolumePolicy implements Parcelable { + ",vibrateToSilentDebounce=" + vibrateToSilentDebounce + "]"; } + @Override + public int hashCode() { + return Objects.hash(volumeDownToEnterSilent, volumeUpToExitSilent, doNotDisturbWhenSilent, + vibrateToSilentDebounce); + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof VolumePolicy)) return false; + if (o == this) return true; + final VolumePolicy other = (VolumePolicy) o; + return other.volumeDownToEnterSilent == volumeDownToEnterSilent + && other.volumeUpToExitSilent == volumeUpToExitSilent + && other.doNotDisturbWhenSilent == doNotDisturbWhenSilent + && other.vibrateToSilentDebounce == vibrateToSilentDebounce; + } + @Override public int describeContents() { return 0; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index 741e4988cb427..c83e343699cc3 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -41,6 +41,12 @@ public class VolumeDialogComponent implements VolumeComponent { private final VolumeDialogController mController; private final ZenModeController mZenModeController; private final VolumeDialog mDialog; + private final VolumePolicy mVolumePolicy = new VolumePolicy( + true, // volumeDownToEnterSilent + true, // volumeUpToExitSilent + true, // doNotDisturbWhenSilent + 400 // vibrateToSilentDebounce + ); public VolumeDialogComponent(SystemUI sysui, Context context, Handler handler, ZenModeController zen) { @@ -77,7 +83,7 @@ public class VolumeDialogComponent implements VolumeComponent { mDialog.setZenFooter(true); mDialog.setAutomute(true); mDialog.setSilentMode(false); - mController.setVolumePolicy(VolumePolicy.DEFAULT); + mController.setVolumePolicy(mVolumePolicy); mController.showDndTile(false); } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java index 5bc8c3ec55a2b..012eb41b2d305 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java @@ -99,7 +99,7 @@ public class VolumeDialogController { private boolean mEnabled; private boolean mDestroyed; - private VolumePolicy mVolumePolicy = new VolumePolicy(true, true, false, 400); + private VolumePolicy mVolumePolicy; private boolean mShowDndTile = false; public VolumeDialogController(Context context, ComponentName component) { @@ -147,6 +147,7 @@ public class VolumeDialogController { public void setVolumePolicy(VolumePolicy policy) { mVolumePolicy = policy; + if (mVolumePolicy == null) return; try { mAudio.setVolumePolicy(mVolumePolicy); } catch (NoSuchMethodError e) { diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java index ef8257c0a798a..c03c0419d4401 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java @@ -217,8 +217,7 @@ public class ZenFooter extends LinearLayout { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (D.BUG) Log.d(TAG, "onCheckedChanged " + isChecked); if (isChecked != isZen()) { - final int newZen = isChecked ? Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS - : Global.ZEN_MODE_OFF; + final int newZen = isChecked ? Global.ZEN_MODE_ALARMS : Global.ZEN_MODE_OFF; mZen = newZen; // this one's optimistic setFooterExpanded(isChecked); mController.setZen(newZen, null, TAG); diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 1eddc8e21aa27..9a30f0dd83712 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5577,8 +5577,9 @@ public class AudioService extends IAudioService.Stub { @Override public void setVolumePolicy(VolumePolicy policy) { enforceVolumeController("set volume policy"); - if (policy != null) { + if (policy != null && !policy.equals(mVolumePolicy)) { mVolumePolicy = policy; + if (DEBUG_VOL) Log.d(TAG, "Volume policy changed: " + mVolumePolicy); } } diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index 683d1fdcbafd3..40218bb43e778 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -501,7 +501,7 @@ public class ZenModeHelper { if (isChange && policy.doNotDisturbWhenSilent) { if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS && mZenMode != Global.ZEN_MODE_ALARMS) { - newZen = Global.ZEN_MODE_NO_INTERRUPTIONS; + newZen = Global.ZEN_MODE_ALARMS; } } break;