Loading services/core/java/com/android/server/notification/ZenModeHelper.java +11 −9 Original line number Diff line number Diff line Loading @@ -782,13 +782,13 @@ public class ZenModeHelper { } private void setPreviousRingerModeSetting(Integer previousRingerLevel) { Slog.d("beverlyt", "setPreviousRingerMode=" + previousRingerLevel); Global.putString( mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, previousRingerLevel == null ? null : Integer.toString(previousRingerLevel)); } private boolean evaluateZenMode(String reason, boolean setRingerMode) { @VisibleForTesting protected boolean evaluateZenMode(String reason, boolean setRingerMode) { if (DEBUG) Log.d(TAG, "evaluateZenMode"); final int zenBefore = mZenMode; final int zen = computeZenMode(); Loading @@ -796,7 +796,7 @@ public class ZenModeHelper { mZenMode = zen; setZenModeSetting(mZenMode); updateRingerModeAffectedStreams(); if (setRingerMode) { if (setRingerMode && zen != zenBefore) { applyZenToRingerMode(); } applyRestrictions(); Loading @@ -813,8 +813,8 @@ public class ZenModeHelper { } private int computeZenMode() { synchronized (mConfig) { if (mConfig == null) return Global.ZEN_MODE_OFF; synchronized (mConfig) { if (mConfig.manualRule != null) return mConfig.manualRule.zenMode; int zen = Global.ZEN_MODE_OFF; for (ZenRule automaticRule : mConfig.automaticRules.values()) { Loading Loading @@ -1018,6 +1018,13 @@ public class ZenModeHelper { int ringerModeExternalOut = ringerModeNew; if (mZenMode == Global.ZEN_MODE_OFF || (mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS && !ZenModeConfig.areAllPriorityOnlyNotificationZenSoundsMuted(mConfig))) { // in priority only with ringer not muted, save ringer mode changes // in dnd off, save ringer mode changes setPreviousRingerModeSetting(ringerModeNew); } int newZen = -1; switch (ringerModeNew) { case AudioManager.RINGER_MODE_SILENT: Loading Loading @@ -1046,12 +1053,7 @@ public class ZenModeHelper { if (newZen != -1) { setManualZenMode(newZen, null, "ringerModeInternal", null, false /*setRingerMode*/); } else if (mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS && !ZenModeConfig.areAllPriorityOnlyNotificationZenSoundsMuted(mConfig)) { // in priority only with ringer not muted, save ringer mode changes setPreviousRingerModeSetting(ringerModeNew); } if (isChange || newZen != -1 || ringerModeExternal != ringerModeExternalOut) { ZenLog.traceSetRingerModeInternal(ringerModeOld, ringerModeNew, caller, ringerModeExternal, ringerModeExternalOut); Loading services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +75 −1 Original line number Diff line number Diff line Loading @@ -407,7 +407,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); // 3. change ringer from normal to silent, verify previous ringer set to new rigner (silent) // 3. change ringer from normal to silent, verify previous ringer set to new ringer (silent) ZenModeHelper.RingerModeDelegate ringerModeDelegate = mZenModeHelperSpy.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, Loading @@ -423,4 +423,78 @@ public class ZenModeHelperTest extends UiServiceTestCase { verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT, mZenModeHelperSpy.TAG); } @Test public void testSilentRingerSavedInZenOff_startsZenOff() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); mZenModeHelperSpy.mAudioManager = mAudioManager; // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer mZenModeHelperSpy.evaluateZenMode("test", true); } verify(mZenModeHelperSpy, never()).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); } @Test public void testSilentRingerSavedOnZenOff_startsZenOn() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); mZenModeHelperSpy.mAudioManager = mAudioManager; mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; // previously set silent ringer ZenModeHelper.RingerModeDelegate ringerModeDelegate = mZenModeHelperSpy.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, AudioManager.RINGER_MODE_SILENT, "test", AudioManager.RINGER_MODE_NORMAL, VolumePolicy.DEFAULT); assertEquals(AudioManager.RINGER_MODE_SILENT, Global.getInt(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, AudioManager.RINGER_MODE_NORMAL)); // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer mZenModeHelperSpy.evaluateZenMode("test", true); } verify(mZenModeHelperSpy, times(1)).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); } @Test public void testVibrateRingerSavedOnZenOff_startsZenOn() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); mZenModeHelperSpy.mAudioManager = mAudioManager; mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; // previously set silent ringer ZenModeHelper.RingerModeDelegate ringerModeDelegate = mZenModeHelperSpy.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, AudioManager.RINGER_MODE_VIBRATE, "test", AudioManager.RINGER_MODE_NORMAL, VolumePolicy.DEFAULT); assertEquals(AudioManager.RINGER_MODE_VIBRATE, Global.getInt(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, AudioManager.RINGER_MODE_NORMAL)); // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer mZenModeHelperSpy.evaluateZenMode("test", true); } verify(mZenModeHelperSpy, times(1)).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); } } Loading
services/core/java/com/android/server/notification/ZenModeHelper.java +11 −9 Original line number Diff line number Diff line Loading @@ -782,13 +782,13 @@ public class ZenModeHelper { } private void setPreviousRingerModeSetting(Integer previousRingerLevel) { Slog.d("beverlyt", "setPreviousRingerMode=" + previousRingerLevel); Global.putString( mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, previousRingerLevel == null ? null : Integer.toString(previousRingerLevel)); } private boolean evaluateZenMode(String reason, boolean setRingerMode) { @VisibleForTesting protected boolean evaluateZenMode(String reason, boolean setRingerMode) { if (DEBUG) Log.d(TAG, "evaluateZenMode"); final int zenBefore = mZenMode; final int zen = computeZenMode(); Loading @@ -796,7 +796,7 @@ public class ZenModeHelper { mZenMode = zen; setZenModeSetting(mZenMode); updateRingerModeAffectedStreams(); if (setRingerMode) { if (setRingerMode && zen != zenBefore) { applyZenToRingerMode(); } applyRestrictions(); Loading @@ -813,8 +813,8 @@ public class ZenModeHelper { } private int computeZenMode() { synchronized (mConfig) { if (mConfig == null) return Global.ZEN_MODE_OFF; synchronized (mConfig) { if (mConfig.manualRule != null) return mConfig.manualRule.zenMode; int zen = Global.ZEN_MODE_OFF; for (ZenRule automaticRule : mConfig.automaticRules.values()) { Loading Loading @@ -1018,6 +1018,13 @@ public class ZenModeHelper { int ringerModeExternalOut = ringerModeNew; if (mZenMode == Global.ZEN_MODE_OFF || (mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS && !ZenModeConfig.areAllPriorityOnlyNotificationZenSoundsMuted(mConfig))) { // in priority only with ringer not muted, save ringer mode changes // in dnd off, save ringer mode changes setPreviousRingerModeSetting(ringerModeNew); } int newZen = -1; switch (ringerModeNew) { case AudioManager.RINGER_MODE_SILENT: Loading Loading @@ -1046,12 +1053,7 @@ public class ZenModeHelper { if (newZen != -1) { setManualZenMode(newZen, null, "ringerModeInternal", null, false /*setRingerMode*/); } else if (mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS && !ZenModeConfig.areAllPriorityOnlyNotificationZenSoundsMuted(mConfig)) { // in priority only with ringer not muted, save ringer mode changes setPreviousRingerModeSetting(ringerModeNew); } if (isChange || newZen != -1 || ringerModeExternal != ringerModeExternalOut) { ZenLog.traceSetRingerModeInternal(ringerModeOld, ringerModeNew, caller, ringerModeExternal, ringerModeExternalOut); Loading
services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +75 −1 Original line number Diff line number Diff line Loading @@ -407,7 +407,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); // 3. change ringer from normal to silent, verify previous ringer set to new rigner (silent) // 3. change ringer from normal to silent, verify previous ringer set to new ringer (silent) ZenModeHelper.RingerModeDelegate ringerModeDelegate = mZenModeHelperSpy.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, Loading @@ -423,4 +423,78 @@ public class ZenModeHelperTest extends UiServiceTestCase { verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT, mZenModeHelperSpy.TAG); } @Test public void testSilentRingerSavedInZenOff_startsZenOff() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); mZenModeHelperSpy.mAudioManager = mAudioManager; // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer mZenModeHelperSpy.evaluateZenMode("test", true); } verify(mZenModeHelperSpy, never()).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); } @Test public void testSilentRingerSavedOnZenOff_startsZenOn() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); mZenModeHelperSpy.mAudioManager = mAudioManager; mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; // previously set silent ringer ZenModeHelper.RingerModeDelegate ringerModeDelegate = mZenModeHelperSpy.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, AudioManager.RINGER_MODE_SILENT, "test", AudioManager.RINGER_MODE_NORMAL, VolumePolicy.DEFAULT); assertEquals(AudioManager.RINGER_MODE_SILENT, Global.getInt(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, AudioManager.RINGER_MODE_NORMAL)); // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer mZenModeHelperSpy.evaluateZenMode("test", true); } verify(mZenModeHelperSpy, times(1)).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); } @Test public void testVibrateRingerSavedOnZenOff_startsZenOn() { AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class); mZenModeHelperSpy.mAudioManager = mAudioManager; mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_OFF; // previously set silent ringer ZenModeHelper.RingerModeDelegate ringerModeDelegate = mZenModeHelperSpy.new RingerModeDelegate(); ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, AudioManager.RINGER_MODE_VIBRATE, "test", AudioManager.RINGER_MODE_NORMAL, VolumePolicy.DEFAULT); assertEquals(AudioManager.RINGER_MODE_VIBRATE, Global.getInt(mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, AudioManager.RINGER_MODE_NORMAL)); // apply zen off multiple times - verify ringer is not set to normal when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; mZenModeHelperSpy.mConfig = null; // will evaluate config to zen mode off for (int i = 0; i < 3; i++) { // if zen doesn't change, zen should not reapply itself to the ringer mZenModeHelperSpy.evaluateZenMode("test", true); } verify(mZenModeHelperSpy, times(1)).applyZenToRingerMode(); verify(mAudioManager, never()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, mZenModeHelperSpy.TAG); } }