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) {
|
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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user