Merge "Ringer state is saved when zen mode is off" into pi-dev
This commit is contained in:
@@ -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();
|
||||
@@ -796,7 +796,7 @@ public class ZenModeHelper {
|
||||
mZenMode = zen;
|
||||
setZenModeSetting(mZenMode);
|
||||
updateRingerModeAffectedStreams();
|
||||
if (setRingerMode) {
|
||||
if (setRingerMode && zen != zenBefore) {
|
||||
applyZenToRingerMode();
|
||||
}
|
||||
applyRestrictions();
|
||||
@@ -813,8 +813,8 @@ public class ZenModeHelper {
|
||||
}
|
||||
|
||||
private int computeZenMode() {
|
||||
if (mConfig == null) return Global.ZEN_MODE_OFF;
|
||||
synchronized (mConfig) {
|
||||
if (mConfig == null) return Global.ZEN_MODE_OFF;
|
||||
if (mConfig.manualRule != null) return mConfig.manualRule.zenMode;
|
||||
int zen = Global.ZEN_MODE_OFF;
|
||||
for (ZenRule automaticRule : mConfig.automaticRules.values()) {
|
||||
@@ -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:
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user