Merge "Ringer state is saved when zen mode is off" into pi-dev

This commit is contained in:
Beverly Tai
2018-03-08 14:14:19 +00:00
committed by Android (Google) Code Review
2 changed files with 86 additions and 10 deletions

View File

@@ -782,13 +782,13 @@ public class ZenModeHelper {
} }
private void setPreviousRingerModeSetting(Integer previousRingerLevel) { private void setPreviousRingerModeSetting(Integer previousRingerLevel) {
Slog.d("beverlyt", "setPreviousRingerMode=" + previousRingerLevel);
Global.putString( Global.putString(
mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL, mContext.getContentResolver(), Global.ZEN_MODE_RINGER_LEVEL,
previousRingerLevel == null ? null : Integer.toString(previousRingerLevel)); 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"); if (DEBUG) Log.d(TAG, "evaluateZenMode");
final int zenBefore = mZenMode; final int zenBefore = mZenMode;
final int zen = computeZenMode(); final int zen = computeZenMode();
@@ -796,7 +796,7 @@ public class ZenModeHelper {
mZenMode = zen; mZenMode = zen;
setZenModeSetting(mZenMode); setZenModeSetting(mZenMode);
updateRingerModeAffectedStreams(); updateRingerModeAffectedStreams();
if (setRingerMode) { if (setRingerMode && zen != zenBefore) {
applyZenToRingerMode(); applyZenToRingerMode();
} }
applyRestrictions(); applyRestrictions();
@@ -813,8 +813,8 @@ public class ZenModeHelper {
} }
private int computeZenMode() { private int computeZenMode() {
if (mConfig == null) return Global.ZEN_MODE_OFF;
synchronized (mConfig) { synchronized (mConfig) {
if (mConfig == null) return Global.ZEN_MODE_OFF;
if (mConfig.manualRule != null) return mConfig.manualRule.zenMode; if (mConfig.manualRule != null) return mConfig.manualRule.zenMode;
int zen = Global.ZEN_MODE_OFF; int zen = Global.ZEN_MODE_OFF;
for (ZenRule automaticRule : mConfig.automaticRules.values()) { for (ZenRule automaticRule : mConfig.automaticRules.values()) {
@@ -1018,6 +1018,13 @@ public class ZenModeHelper {
int ringerModeExternalOut = ringerModeNew; 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; int newZen = -1;
switch (ringerModeNew) { switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT: case AudioManager.RINGER_MODE_SILENT:
@@ -1046,12 +1053,7 @@ public class ZenModeHelper {
if (newZen != -1) { if (newZen != -1) {
setManualZenMode(newZen, null, "ringerModeInternal", null, setManualZenMode(newZen, null, "ringerModeInternal", null,
false /*setRingerMode*/); 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) { if (isChange || newZen != -1 || ringerModeExternal != ringerModeExternalOut) {
ZenLog.traceSetRingerModeInternal(ringerModeOld, ringerModeNew, caller, ZenLog.traceSetRingerModeInternal(ringerModeOld, ringerModeNew, caller,
ringerModeExternal, ringerModeExternalOut); ringerModeExternal, ringerModeExternalOut);

View File

@@ -407,7 +407,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL,
mZenModeHelperSpy.TAG); 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 = ZenModeHelper.RingerModeDelegate ringerModeDelegate =
mZenModeHelperSpy.new RingerModeDelegate(); mZenModeHelperSpy.new RingerModeDelegate();
ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL, ringerModeDelegate.onSetRingerModeInternal(AudioManager.RINGER_MODE_NORMAL,
@@ -423,4 +423,78 @@ public class ZenModeHelperTest extends UiServiceTestCase {
verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT, verify(mAudioManager, atLeastOnce()).setRingerModeInternal(AudioManager.RINGER_MODE_SILENT,
mZenModeHelperSpy.TAG); 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);
}
} }